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はずです。なぜでしょうか?