添加位x32 mips装配

时间:2011-03-14 23:44:01

标签: assembly mips mips32

我想在一个函数中添加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 

1 个答案:

答案 0 :(得分:1)

以下是一些指示。

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

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

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

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

  5. 我离MIPS汇编专家很远,所以这两个可能是错的:

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

    2. 是否存在直接的伪指令?因为我很确定没有实际的直接指令; MIPS指令集中的bne指令期望给出两个寄存器而不是寄存器和立即值。