0

我正在尝试在一个函数中添加 2 个位字符串,但我无法让它工作......有什么建议吗?这是我的代码如下:

$a0, "11111111111100000001111111111110"    #= -4064

$a1, "00000000001000111000000000000010"   # = 9088

$a2, resultSpace 
$a3, representation                #one's or two's complement

li $t4, 0 #carry flag 

lb $t0, 32($a0)
lb $t1, 32($a1)

move $t5, $a0

loop: 
lb $t0, 32($a0)
lb $t1, 32($a1)


add $t3, $t0, $t1


sb $t3, 32($a2)

sub $a2, $a2, 1 
sub $a0, $a0, 1
sub $a1, $a1, 1 


addi $t4, $t4, 1 # increments 
bne $t4, 32, loop 
4

1 回答 1

1

这里有一些建议。

  1. 您将ASCII 字符 '0' 和 '1'混淆了。如果添加 '0' 和 '1' 你得到的不是 '1' 而是 'a' (因为 '0' 是字符 48,'1' 是字符 49,而 'a' 是字符 97)。

  2. 您首先查看每个字符串中的偏移量 32。但是字符串有 32 个字符长,所以它们的有效偏移量是 0..31,所以你要做的第一件事就是读取输入数据的结尾。

  3. 您没有在加法中使用进位标志。添加位时,您也没有做任何事情来检查进位。

  4. 但是,您正在使用您声称是进位标志的寄存器作为循环计数器。

我远不是 MIPS 汇编专家,所以这两个可能是错误的:

  1. 您是否在代码开头缺少一些说明?我的意思是,你真的可以说只是$a2, resultSpace或者你需要la $a2, resultSpace或类似的东西吗?

  2. 有没有立即执行的伪指令?因为我很确定没有真正的 bne-immediate 指令;MIPS 指令集中的bne指令期望得到两个寄存器,而不是一个寄存器和一个立即数。

于 2011-03-15T00:00:11.657 回答