计算器在mips程序集中将字符串转换为整数代码

时间:2019-07-15 06:07:08

标签: assembly mips

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

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

0 个答案:

没有答案