RISC-V NOP指令

Bet*_*tty 5 assembly nop riscv

我最近正在处理RISC-V 32I指令。我有一个关于NOP指令的问题,规范说它等于ADDI x0, x0, 0

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

任何人都可以在这点上阐明一些观点吗?

眠りネ*_*ネロク 5

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

来自RISC-V 指令集手册第一卷:非特权 ISA

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

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