close

比克爾語翻譯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) 不會竣事阿 我一定有一些盲點在哪邊= = 遞迴用組語寫真 翻譯很煩人

。-> 翻譯社|,-> 翻譯公司|的-> 翻譯來自: https://www.ptt.cc/bbs/Programming/M.1299384774.A.F6E.html有關翻譯的問題歡迎諮詢華頓翻譯社

arrow
arrow
    文章標籤
    翻譯社
    全站熱搜
    創作者介紹
    創作者 christrdnrb 的頭像
    christrdnrb

    christrdnrb@outlook.com

    christrdnrb 發表在 痞客邦 留言(0) 人氣()