我在完成和理解此mips代码时遇到困难
关于可以计算使用MIPS汇编器编写的整数加/减的计算器程序。 输入以公式的形式提供给公式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
但是,当调试此代码不起作用时,是否存在错误的部分?