我想在一个函数中添加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
答案 0 :(得分:1)
以下是一些指示。
您将位与 ASCII字符'0'和'1'混淆。如果添加'0'和'1',则不是'1'而是'a'(因为'0'是字符48,'1'是字符49,'a'是字符97)。
< / LI>您首先要查看每个字符串中的偏移量32。但字符串长度为32个字符,因此它们的有效偏移量为0..31,因此您要做的第一件事就是读取输入数据的结尾。
您没有在添加中使用进位标志。当你添加位时,你也没有做任何事情来检查进位。
但是,您使用您声称的进位标志作为循环计数器。
我离MIPS汇编专家很远,所以这两个可能是错的:
您是否在代码开头时遗漏了一些说明?我的意思是,您真的可以说$a2, resultSpace
或者您需要la $a2, resultSpace
或类似的东西吗?
是否存在直接的伪指令?因为我很确定没有实际的直接指令; MIPS指令集中的bne
指令期望给出两个寄存器而不是寄存器和立即值。