指令集與組合語言
RISC-V的虛擬指令「ret」,實際上是以下列哪一個指令執行的?
- Ajal ra, 0
- Bjalr x0, 0(ra)
- Clw ra, 0(sp)
查看答案與解析
正確答案:B. jalr x0, 0(ra)
jalr(jump and link register)會跳躍到暫存器的值加上位移的位址,並將下一個指令的位址放入寫入目的地。ret是「jalr x0, 0(ra)」,跳到ra的位址,並將連結捨棄到x0。jalr也用於函式指標或虛擬函式的呼叫這類在執行時才決定目的地的跳躍。還原ra的「lw ra, …」是在ret之前進行的準備。
- A. 會覆寫ra,導致無法返回。
- B. 正確。跳到ra的位址,並捨棄返回位址。
- C. 只是從記憶體讀取ra,並不會返回。