Open ataga101 opened 2 years ago
jump min_caml_start
print_int:
sw a0, 0(zero)
jalr zero, ra, 0 # ret
fib.10:
addi a1, zero, 1
blt a1, a0, ble_else.24
jalr zero, ra, 0 # ret
ble_else.24:
addi a1, zero, 1
sub a1, a0, a1
sw a0, 0(sp)
add a0, a1, zero
sw ra, -2(sp)
addi sp, sp, -3
jal ra, fib.10 # call
addi sp, sp, 3
lw ra, -2(sp)
addi a1, zero, 2
lw a2, 0(sp)
sub a1, a2, a1
sw a0, 1(sp) ←ココ!
add a0, a1, zero
sw ra, -2(sp)
addi sp, sp, -3
jal ra, fib.10 # call
addi sp, sp, 3
lw ra, -2(sp)
lw a1, 1(sp) ←ココ!
add a0, a1, a0
jalr zero, ra, 0 # ret
min_caml_start:
addi sp, sp, -28
addi a0, zero, 30
sw ra, 0(sp)
addi sp, sp, -1
jal ra, fib.10 # call
addi sp, sp, 1
lw ra, 0(sp)
sw ra, 0(sp)
addi sp, sp, -1
jal ra, print_int # call
addi sp, sp, 1
lw ra, 0(sp)
jalr zero, ra, 0 # ret
最新版のだと今度は上のココ!って部分でraを書き換えちゃってるので変数保存する時のオフセットがおかしいっぽい。
spを関数呼び出しするときに-3してるのが少し不思議だったんですけどsw a0 1(sp)
をsw a0 -1(sp)
にしたらちゃんと動いたしspを-3してるのも辻褄合うのでなんか符号間違えてる感じですかね
fibでデバッグしていたんだけど、変数がSaveできてなさそうです。 というのも、
ココ!って書いてあるところで、どうやら一個前の関数呼び出しの時にスタックに積んだraを書き換えてしまっているようです。