簡體   English   中英

RISC-V NOP 指令

[英]RISC-V NOP instruction

我最近正在研究 RISC-V 32I 指令。 我有一個關於NOP指令的問題,規范說它等於ADDI x0, x0, 0

但是, x0不是程序員可以修改的通用寄存器。 因此,為什么x0在這里用作NOP指令的目標寄存器?

任何人都可以請說明這一點嗎?

NOP是擴展為ADDI x0, x0, 0ADDI x0, x0, 0 x0 (或zero )是專用於值零的只讀寄存器,即,它的每一位都硬連線為零 寫入該寄存器的任何內容都將被簡單地丟棄,因為它的值無法修改。

來自RISC-V 指令集手冊第一卷:非特權 ISA

除了推進pc和增加任何適用的性能計數器之外, NOP指令不會改變任何架構可見的狀態。 NOP編碼為ADDI x0, x0, 0

請記住,RISC-V 沒有算術標志(即進位、溢出、零、符號標志),任何目標寄存器x0算術運算都將作為無運算指令執行,而不管源寄存器如何,因為最終結果將包括將程序計數器推進到下一條指令而不改變任何其他相關處理器的狀態。

牡蠣捕手引用了一個正確的說法,x0 保持常量 0 並且不能寫入另一個值。

指令ADDI x0, x0, 0執行x0 <- x0 + 0 ,其中 0 是指令中編碼的立即數。 此類指令對 RISCV 的狀態沒有影響,因此是 NOP。

RISCV 上NOP其他替代方案: ADDI x0, x1, 0 即使ADD x0, x1, x2也不會對 RISCV 產生影響(RISCV 上沒有進位標志),因此其行為類似於NOP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM