0

我正在尝试在 MIP 中创建一个字符串,然后将字符串中的每个字符更改为一个整数。目前我在创建新字符串时遇到了麻烦,我不知道我做错了什么。我插入的代码块应该为 4 个字符创建内存分配,然后为每个位置分配一个数字并将字符串保存到内存位置。然而,它似乎并没有保存字符串,因为当我稍后打印它时它总是空白的。我只包括似乎不起作用的代码块。

任何提示将非常感谢!

.data
string: .space 16   #declare storage for string 4 char
string2: .asciiz "Success!"
string3: .asciiz "Failure!"

.text
main:    # convert string to integer

la $t0, string      # load base address of string to reg $t0
li $t1, 1       # $t1 = 1   
sw $t1, ($t0)       # first array element set to 1
li $t1, 2       # $t1 = 2
sw $t1, 4($t0)      # second array element set to 2
li $t1, 3       # $t1 = 3
sw $t1, 8($t0)      # third array element set to 3
li $t1, 0       # $t1 = 0
sw $t1, 12($t0)     # third array element set to 0
            # array stored at #t0
sw $t0, string

li $v0, 4       # syscall for print string
la $a0, string      # load string to be printed
syscall         # print digit string

这一切都编译没有问题。

4

1 回答 1

1

在 MIPS 中,每个字符占用 1 个字节(不是 4 个),至少在使用syscall4 打印字符串时是这样。

另请注意,您正在尝试打印不可打印的字符(ASCII 代码 1、2 和 3),而不是 '1'、'2' 和 '3' 的 ASCII 代码。我认为sw $t0, string指令不应该在那里。

最后,请注意syscall4 假设字符串以 NULL 结尾,因此如果您声明存储 4 个字符,并且想要使用该系统调用,那么您确实有 3 个字符可用。

这是您发布的固定打印字符串的代码片段123

.data
string: .space 4   #declare storage for string 4 char

.text
main:    # convert string to integer

la $t0, string      # load base address of string to reg $t0
li $t1, '1'       # $t1 = 1   
sb $t1, ($t0)       # first array element set to 1
li $t1, '2'       # $t1 = 2
sb $t1, 1($t0)      # second array element set to 2
li $t1, '3'       # $t1 = 3
sb $t1, 2($t0)      # third array element set to 3
li $t1, 0       # $t1 = 0
sb $t1, 3($t0)     # third array element set to 0
            # array stored at #t0

li $v0, 4       # syscall for print string
la $a0, string      # load string to be printed
syscall         # print digit string
于 2012-11-20T20:31:50.767 回答