[問題] 費氏數列轉MIPS

看板Programming作者 (Aesthetic)時間14年前 (2011/03/06 12:12), 編輯推噓0(004)
留言4則, 3人參與, 最新討論串1/1
C 語言的程式碼是這樣 int fact(int n){ if(n<1)return(1); else return (n*fact(n-1)); } 組合語言如下 fact: addi $sp $sp -8 sw $ra 4($sp) sw $a0 0($sp) slti $t0 $a0 1 beq $t0 $zero L1 addi $v0 $zero 1 addi $sp $sp 8 jr $ra L1: addi $a0 $a0 -1 jal fact lw $a0 0($sp) lw $ra 4($sp) addi $sp $sp 8 mul $vo $a0 $vo jr $ra ------------------------------------------------------------------ 我搞混的地方在於 到了L1裡面的 jal fact 我記得jal是會把下一個指令的位址存在ra 也就是說會把 lw $a0 0($sp) 這一行的位址存在ra 於是跳到了fact裡面 但是一進去就把ra ,a0 給存到stack裡面了 然後又跳到L1 又回去fact幾次後 終於來到了 L1裡面的 lw $a0 0($sp) 然後 lw $ra 4($sp) 接著到最後一個ra 課本上好像說這個ra是要回到主程式的 但是ra不是在jal那邊回到了fact 就把ra的值存為要到lw $ra 4($sp) 所以最後一個 jr ra 應該會回到lw $ra 4($sp) 不會結束阿 我一定有一些盲點在哪邊= = 遞迴用組語寫真的很煩人 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.117.15

03/06 12:28, , 1F
你的費氏數列怪怪的耶
03/06 12:28, 1F

03/06 12:30, , 2F
$ra 每次遞回前都有存所以回得去主程式
03/06 12:30, 2F

03/06 13:01, , 3F
我自己想出來了 謝謝大家~
03/06 13:01, 3F

03/15 18:46, , 4F
這是費氏還是階乘...
03/15 18:46, 4F
文章代碼(AID): #1DSmd6zk (Programming)
文章代碼(AID): #1DSmd6zk (Programming)