MIPSで乗算のコードを書きましたが動きません。どうすればいいでしょうか？


MIPSのアセンブリコードで乗算を行おうとしています。（下に書いてありますコードです）  
ただQtspimを用いて動作が確認できませんでした。  
何か対処法はありますでしょうか？

[code]

        .data
        str:
        .asciiz "\nEnter two positive integer a,b "
        .text
        .globl main
    main:
        addi $sp,$sp,-16 #スタック上で4語分のスペースを取る
        sw $s0,12($sp) #$s0を退避する
        sw $s1,8($sp) #$s1を退避する
        sw $s2,4($sp) #$s2を退避する
        sw $ra,0($sp) #$raを退避する
        add $s0,$zero,$zero #$s0 = 0
    L1:
        li $v0,4 #print_stringのシステムコールコード4を$v0にロード
        la $a0,str #asciizで保存した文字列のアドレスを$a0に格納
        syscall #実行
    
        li $v0,5 #read_intのシステムコード5を$s1にロード
        syscall #実行
        add $a1,$zero,$v0
        add $s1,$zero,$v0
    
        li $v0,5 #read_intのシステムコード5を$s2にロード
        syscall #実行
        add $a2,$zero,$v0
        add $s2,$zero,$v0
    
        jal multp #multへジャンプする
        j L1 #L1へジャンプする
    End:
    multp:
        beq $t0,$zero,end2 #$t0 ≠ 0 ならラベルendに行く
        add $s0,$s0,$s2 #r = r + y
        addi $t1,$zero,1 #$t1 = 1
        beq $s1,$t1,end1 #$s1 = 1ならラベルend1に行く
    end1:
        lw $ra,0($sp) #$raを戻す
        lw $s2,4($sp) #$s2を戻す
        lw $s1,8($sp) #$s1を戻す
        lw $s0,12($sp) #$s0を戻す
        add $v0,$s0,$zero #$v0 = $s0
    end2:
        jal half #halfへジャンプ
        add $s2,$s2,$s2 #$s2 = $s2 + $s2
        lw $ra,0($sp) #$raを戻す
        lw $s2,4($sp) #$s2を戻す
        lw $s1,8($sp) #$s1を戻す
        lw $s0,12($sp) #$s0を戻す
        j $ra
    odd:
        andi $t0,$s0,0x1 #$t0 = $s0 & 0x1
        jr $ra
    half:
    srl $s1,$s1,1 #$s1を右に1シフト
        jr $ra
    
[/code]

