RISC-V ADDI指令

时间:2018-06-04 19:21:23

标签: riscv

我目前正致力于实施RV32I基本指令集。

我有一个关于ADDI指令的问题。在手册中,如何理解该子句" ADDI rd,rs1,0用于实现MV rd,rs1汇编伪指令。"

是否表示ADDI rd,rs1,0等于将rs1的内容移动到rd指定的寄存器?

3 个答案:

答案 0 :(得分:2)

ADDI rd, rs1, 0执行操作:

rd <- rs1 + 0,即rd <- rs1

所以ADDI rd, rs1, 0执行MV rd, rs1

如果在问题中提到,它不会对rs1指定的寄存器执行rs1内容的移动(复制是一个更好的词)。 它执行rs1内容到寄存器rd的移动(再次复制)。

举个例子:

ADDI x3, x5, 0会将x5的内容复制到x3 - 并使用与上面相同的名称,在此示例中:rdx3和{ {1}}是rs1

答案 1 :(得分:2)

mv x, y(移动)伪指令只是addi x, y, 0的别名。这意味着syntactic sugar是在汇编程序内部实现的。

由于mv别名由汇编程序mv解析,因此没有自己的操作码,因此不是真正的指令。因此,它称为伪指令。

使用mv伪指令可以更清楚地描述代码的用途。当然,对于人类来说,它的键入和解析要少一些。

答案 2 :(得分:1)

是的,ADDI rd, rs1, 0MV rd, rs1指令的编码。

许多编码都是可能的,例如XORI rd, rs1, 0将具有相同的效果。

区分哪个编码的原因是当看到MV rd, rs1时输出为ADDI rd, rs1, 0的反汇编程序,但是XORI rd, rs1, 0仍将被反汇编为XORI rd, rs1, 0。 / p>

其他指令指定了编码,例如NOP为ADDI x0, x0, 0,而不是其他不执行任何操作的指令。注意:寄存器0是 magic 。它始终读为零,因此写入丢失。

MV指令将一个寄存器的值设置为等于另一个寄存器的值,因此最好将它们描述为“复制”,如@LiHenyuan所写。