

MIPSアセンブラを使用して書かれた整数の加算/減算を計算することができる計算機プログラムについてのmipsプログラムコードを完成しようとしている  
これをデバッグするのに苦労している、結果が正しくない

入力は式の形で式char（ベースアドレス$ s0）の配列に与えられます。  
ヌル文字（¥0、ASCIIコード0）が末尾に配置されます。計算結果はレジスタ$ s1に保存され、オーバーフローは無視されます。  
例えば、入力がFormula =“ 100 + 20 + 3”の場合、$ s1 = 123、Formula =“ - 100 + 20-3”の場合、$s1
= -83が出力されます。  
プログラムの「+」と「 - 」は、それぞれASCIIの「+」と「 - 」の文字で、ASCII文字は0、１，２、３。。。9は、それぞれ
48（10）、49（10）、および57（10）です。

[code]

    .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->"
    
[/code]

ただし、このコードをデバッグすると出力される値が23、正しい結果は-83はずです。なぜでしょうか？


CC BY-SA 4.0
2019-07-15T02:35:16.757
56646
2019-07-15T07:05:05.227
2019-07-15T07:05:05.227
35114
35114
question
c assembly mips
MIPSアセンブラを使用して書かれた整数の加算/減算を計算することができる計算機プログラムについてのmipsプログラムコードno結果が正しくない