2

not在 RiscV中是什么意思?我从 C 中翻译了一些代码后得到它,如下所示:

not     a0, t1
4

2 回答 2

4

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

于 2021-01-08T14:09:02.413 回答
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(或仅按位)如果按位考虑,则对结果没有影响。你也可以用两个互补来做否定。反转并添加一个。按位负 0 = 1+1 = 0,按位负 1 = 0+1 = 1。您可以简单地对结果 = 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 和结果的角度来看,这与非操作相同,因此您经常会看到 xor 与全 1 而不是非指令。在这种情况下,如果工具支持它(程序集由工具定义(gnu 汇编器,或 jimmy 的汇编器或 sue 的汇编器),而不是目标(risc-v)),它似乎是一条伪指令。

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

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

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

于 2021-01-08T17:06:37.783 回答