指令集與組合語言

RISC-V的虛擬指令「nop」(什麼都不做),實際上會被組譯器替換為下列哪一個指令?

  1. Aaddi x0, x0, 0
  2. Bjal ra, 0
  3. Clw x0, 0(sp)
查看答案與解析

正確答案:A. addi x0, x0, 0

RISC-V沒有「什麼都不做」的專用指令,nop以「addi x0, x0, 0」表示。由於寫入x0的內容會被捨棄,暫存器與記憶體都不會有任何改變。同樣地,「mv rd, rs」是「addi rd, rs, 0」,「j label」是「jal x0, label」,「ret」是「jalr x0, 0(ra)」。善用x0來減少指令的種類,是RISC-V的設計理念。

  • A. 正確。是將結果捨棄到x0的加法。
  • B. 會改寫ra,所以不是什麼都不做的指令。
  • C. 因為會讀取記憶體,還可能引發例外。
練習這個領域 前往領域頁面

指令集與組合語言的其他題目

  1. 下列何者是RISC-V的「add」指令與「addi」指令的差異?
  2. 執行上述RISC-V程式碼之後,暫存器a2的值是多少?
  3. 下列何者是RISC-V指令「lw t0, 8(sp)」的動作?
  4. 在RISC-V的條件分支指令「beq a0, a1, label」中,分支目標label的位址是如何表示的?
  5. 下列何者是分支或跳躍使用PC相對定址的優點?