assembly - RISC-V NOP指令

标签 assembly riscv no-op

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

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

任何人都可以阐明这一点吗?

最佳答案

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

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

The NOP instruction does not change any architecturally visible state, except for advancing the pc and incrementing any applicable performance counters. NOP is encoded as ADDI x0, x0, 0.

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

关于assembly - RISC-V NOP指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823865/

相关文章:

linux - 有没有办法在linux中去除dll文件中的时间戳和日期?有可用的工具吗?

c++ - 适用于 Windows 的 riscv-gcc

string - 如何摆脱 RISC-V 中的 '\n'?

chisel - Chisel 模块中的条件端口

c - 循环展开优化,这是如何工作的

c++ - VS2015 中奇怪的 memcpy_s 行为

c++ - 在 C++ 中实现无操作语句的可移植方式是什么?

c# - 为什么用空委托(delegate)调用 ThreadStart?

assembly - 当我有第一个索引的地址时,如何获取 x86 程序集中数组元素的值

python - 使用 NOOP 命令检查 FTP 连接是否有效