什麼是虛擬指令(Pseudo-instruction)

在組合語言中可以像指令一樣書寫,但由組譯器替換成一個以上真正指令的東西。RISC-V的nop、mv、li、j、ret等。

日文名稱: 疑似命令

「虛擬指令(Pseudo-instruction)」出現在1領域的5道練習題中(指令集與組合語言等)。

這個名詞所屬的領域: 指令集與組合語言

練習虛擬指令(Pseudo-instruction)的題目

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的設計理念。

RISC-V的虛擬指令「ret」,實際上是以下列哪一個指令執行的?

  1. Ajal ra, 0
  2. Bjalr x0, 0(ra)
  3. 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之前進行的準備。

解析中的「虛擬指令(Pseudo-instruction)」

出現「虛擬指令(Pseudo-instruction)」的題目(5題)

  1. RISC-V的虛擬指令「nop」(什麼都不做),實際上會被組譯器替換為下列哪一個指令?
  2. RISC-V的虛擬指令「ret」,實際上是以下列哪一個指令執行的?
  3. 下列何者是組合語言與機器語言之間的關係?
  4. 執行完上述RISC-V程式碼時,t0的值是多少?
  5. 下列何者是RISC-V指令「jal ra, func」的動作?

相關名詞

組譯器 指令集架構(ISA) 呼叫慣例 返回位址 分支延遲槽 立即值 呼叫者保存暫存器 定址模式 框指標 堆疊指標

前往名詞解釋列表