RISC-V NOP指令

时间:2018-06-12 18:46:33

标签: riscv nop

我最近正在研究RISC-V 32I指令。我得到了一个关于NOP指令的问题,规范说明它等于ADDI x0, x0, 0

但是,x0不是可由程序员修改的通用寄存器。那么,为什么x0在这里用作NOP指令的目标寄存器?

有人可以就这一点发表一些看法吗?

3 个答案:

答案 0 :(得分:5)

NOP是扩展到ADDI x0, x0, 0伪指令x0(或zero)是专用于值零的只读寄存器,即,每硬连线为零一点。写入该寄存器的任何内容都将被丢弃,因为其值无法修改。

来自The RISC-V Instruction Set Manual Volume I: Unprivileged ISA

  

NOP指令不会更改任何体系结构可见的状态,除了前进pc并增加任何适用的性能计数器外。 NOP被编码为ADDI x0, x0, 0

请记住,RISC-V没有算术标志(例如,进位,溢出,零,符号标志),目标寄存器x0的任何算术运算都将作为无操作指令与源寄存器无关,因为最终结果将包括将程序计数器推进到下一条指令,而不会更改任何其他相关处理器的状态。

答案 1 :(得分:1)

答案 2 :(得分:0)

oystercatcher引用正确的语句,x0保持常量0并且不能写入另一个值。

指令ADDI x0, x0, 0执行x0 <- x0 + 0,其中0是指令中的立即编码。这样的指令对RISCV的状态没有影响,因此是一个NOP。

RISCV NOP的其他替代方法:ADDI x0, x1, 0。即使ADD x0, x1, x2也不会影响RISCV(RISCV上没有Carry标志),因此行为类似于NOP