我最近正在研究 RISC-V 32I 指令。我有一个关于 NOP
指令的问题,规范称它等于 ADDI x0, x0, 0
。
但是,x0
不是一个可以由程序员修改的通用寄存器。那么,为什么x0
在这里充当NOP
指令的目标寄存器呢?
任何人都可以阐明这一点吗?
最佳答案
NOP
是一个伪指令,扩展为ADDI x0, x0, 0
。 x0
(或zero
)是专用于值零的只读寄存器,即,它硬连线为零 每一位。写入该寄存器的任何内容都将被丢弃,因为其值无法修改。
来自The RISC-V Instruction Set Manual Volume I: Unprivileged ISA :
The
NOP
instruction does not change any architecturally visible state, except for advancing thepc
and incrementing any applicable performance counters.NOP
is encoded asADDI x0, x0, 0
.
请记住,RISC-V 没有算术标志(即进位、溢出、零、符号标志),任何目标寄存器为 x0
的算术运算都将无论源寄存器如何,都作为无操作指令执行,因为最终结果将包括将程序计数器前进到下一条指令,而不更改任何其他相关处理器的状态。 p>
关于assembly - RISC-V NOP指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823865/