0

我无法完成和理解此 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

但是,当调试此代码不起作用时,是否有错误的部分?

4

0 回答 0