Assembly-RiscV 中的“不”是什么意思?

问题描述

not 在 RiscV 中是什么意思?像这样从 C 翻译了一些代码后我得到了它:

not     a0,t1

解决方法

not 不是指令集的一部分,但一些汇编程序可能会将其用作速记。它编译为 xori a0,t1,-1,这意味着它将反转寄存器中的每一位并将结果存储在目标中。

,

有时您会看到 neg 而不是指令,但您可以使用 sub 和 xor 使用额外的操作数(/寄存器)来实现它们,因此有时您不会。

not 类似于 xor、and、or 等,并且是按位操作数,因此第 0 位与另一个操作数的第 0 位进行运算以产生结果的第 0 位。不是一条指令,如果实现的逻辑将使用一个操作数来完成(对唯一操作数的位 0 进行运算以获得结果的位 0)。

not 的真值表只是一个倒置

a  q
0  1
1  0

neg 是否定的,与 not 不同。它不是按位运算,因为负 0 = -(或仅 0 位) 0 和负 1 = -1(或仅一位),如果按位考虑,它对结果没有影响。你也可以用twos copplement来做否定。反转并添加一个。按位负 0 = 1+1 = 0,按位负 1 = 0+1 = 1。您可以简单地用 result = 0 - 操作数进行减法,以执行(非按位)否定。所以你不会总是看到否定指令。

xor 的真值表本质上是一种奇偶校验,如果一个而不是两个都为真,则为真

a b  q
0 0  0
0 1  1
1 0  1
1 1  0

现在任何与 0 异或的东西都是它自己:

a b  q
0 0  0
1 0  1

任何与 1 异或的东西都是倒置的

a b  q
0 1  1
1 1  0

从操作数 a 和结果的角度来看,这与 not 操作相同,因此您经常会看到 xor 与所有 1 而不是 not 指令。在这种情况下,如果工具支持它(汇编是由工具定义的(gnu 汇编程序,或 jimmy 的汇编程序或 sue 的汇编程序),而不是目标 (risc-v)),它似乎是一条伪指令。

例如ARM有真正的否定(否定)和mvn(不移动)指令。

not 是按位取反,每个输出位都从输入取反。

xor 是一种按位运算,如果操作数的两位中恰好有一个为 1,则匹配的输出位为 1,否则为 0。对于多输入 xor,它等效于将操作数相加并取 lsbit ,它给你奇偶校验奇数位设置你得到1个偶数(零是偶数)然后零。 (对于两个输入也是如此)