我无法完成和理解此 mips 代码
关于使用 MIPS 汇编器编写的可以计算整数加法/减法的计算器程序。输入以公式的形式提供给 Formula char(基地址 $s0)的数组。空字符(\0,ASCII 码 0)放在最后。计算结果交给寄存器$s1,溢出被忽略。例如,如果输入是公式 = “100 + 20 + 3”,则 $ s1 = 123,如果公式 = “- 100 + 20-3”,则输出 $ s1 = -83。程序中的'+'和-是字符+'和-,分别是ASCII字符,ASCII字符0..9分别是48(10)、49(10)和57(10)。
我很难调试这个。
.text
.globl main
main:
la $s0,word ##copy base address of array to t1
add $s1, $zero, $zero
add $s2, $zero, $zero
Addi $s3,$zero,1
Addi $t1, $zero,'+'
Addi $t2,$zero,'-'
addi $t3,$zero,10
Loop: lb $t0,0($s0)
Addiu $s0,$s0,1
Beq $t0,$t1,Plus
Beq $t0,$t2,Minus
Beq $t0,$zero,Cal
Addi $t0,$t0,-48
Mul $s2, $s2, $t3
Add $s2,$s2,$t0
J Loop
End:
li $v0,1
move $a0,$s1
syscall
li $v0, 10
syscall
Plus: addi $s4, $zero, 1
j Cal
Minus: addi $s4, $zero, 0
Cal: beq $s3,$zero,Subn
Addn:
add $s1,$s1,$s2
beq $s4,1,Join //im not sure here
Subn: sub $s1,$s1,$s2
Join : add $s2,$zero,$zero
Beq $t0,$zero,End
Add $s3,$s4,$zero
J Loop
Exit:
li $v0, 10
syscall
.data
word: .asciiz "-100+20+3"
result: .asciiz "$s1->"
prompt: .asciiz "$s0->"
但是在调试此代码时会产生 -77,但正确的结果是 -83
但是,当调试此代码不起作用时,是否有错误的部分?