什麼是虛擬指令(Pseudo-instruction)
在組合語言中可以像指令一樣書寫,但由組譯器替換成一個以上真正指令的東西。RISC-V的nop、mv、li、j、ret等。
日文名稱: 疑似命令
「虛擬指令(Pseudo-instruction)」出現在1領域的5道練習題中(指令集與組合語言等)。
這個名詞所屬的領域: 指令集與組合語言
在組合語言中可以像指令一樣書寫,但由組譯器替換成一個以上真正指令的東西。RISC-V的nop、mv、li、j、ret等。
日文名稱: 疑似命令
「虛擬指令(Pseudo-instruction)」出現在1領域的5道練習題中(指令集與組合語言等)。
這個名詞所屬的領域: 指令集與組合語言
正確答案: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的設計理念。
正確答案:B. jalr x0, 0(ra)
jalr(jump and link register)會跳躍到暫存器的值加上位移的位址,並將下一個指令的位址放入寫入目的地。ret是「jalr x0, 0(ra)」,跳到ra的位址,並將連結捨棄到x0。jalr也用於函式指標或虛擬函式的呼叫這類在執行時才決定目的地的跳躍。還原ra的「lw ra, …」是在ret之前進行的準備。
不過「li」或「mv」這類虛擬指令,組譯器會將其替換為一個以上的真正指令。
下列何者是組合語言與機器語言之間的關係?bnez是「bne t1, zero, loop」的虛擬指令。
執行完上述RISC-V程式碼時,t0的值是多少?依呼叫慣例,返回位址放在ra(x1),所以函式的呼叫寫成「jal ra, func」,以虛擬指令則寫成「call func」。
下列何者是RISC-V指令「jal ra, func」的動作?