MIPSアセンブリコード内の"jal"が動きません。対処法を教えてください。
私は乗算を行うMIPSのアセンブリコードを書きました。(下のコードです)
しかし、main文中で乗算を行う関数を表すラベル、"mult"に"jal"を用いて行くようにしましたが、Qtspimで確認したところ、動きませんでした。
それの対処法および、改善点等明示して頂けますでしょうか?
よろしくお願いします。
.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:
.data
str:
.asciiz "\nEnter two positive integer a,b "
.text
li $v0,4 #print_stringのシステムコールコード4を$v0にロード
la $a0,str #asciizで保存した文字列のアドレスを$a0に格納
syscall #実行
li $v0,1 #print_int
li $s1,5 #read_intのシステムコード5を$s1にロード
syscall #実行
li $v0,1 #print_int
li $s2,5 #read_intのシステムコード5を$s2にロード
syscall #実行
jal mult #multへジャンプする
j L1 #L1へジャンプする
End:
mult:
beq $t0,$zero,end #$t0 ≠ 0 ならラベルendに行く
$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を戻す
addi $v0,$zero,$s0 #$v0 = $s0
end:
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を戻す
addi $v0,
odd:
andi $t0,$s0,0x1 #$t0 = $s0 & 0x1
jr $ra
half:
srl $s1,Ss1,1 #$s1を右に1シフト
jr $ra