MIPSアセンブラを使用して書かれた整数の加算/減算を計算することができる計算機プログラムについてのmipsプログラムコードno結果が正しくない
MIPSアセンブラを使用して書かれた整数の加算/減算を計算することができる計算機プログラムについてのmipsプログラムコードを完成しようとしている
これをデバッグするのに苦労している、結果が正しくない
入力は式の形で式char(ベースアドレス$ s0)の配列に与えられます。
ヌル文字(¥0、ASCIIコード0)が末尾に配置されます。計算結果はレジスタ$ s1に保存され、オーバーフローは無視されます。
例えば、入力がFormula =“ 100 + 20 + 3”の場合、$ s1 = 123、Formula =“ - 100 + 20-3”の場合、$s1 = -83が出力されます。
プログラムの「+」と「 - 」は、それぞれASCIIの「+」と「 - 」の文字で、ASCII文字は0、1,2、3。。。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 //この部分ちょっと自信がない
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->"
ただし、このコードをデバッグすると出力される値が23、正しい結果は-83はずです。なぜでしょうか?