【问题标题】:What does "not" mean in Assembly-RiscV? [duplicate]Assembly-RiscV 中的“不”是什么意思? [复制]
【发布时间】:2021-01-08 14:02:50
【问题描述】:

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

not     a0, t1

【问题讨论】:

  • Google 没有给出任何结果,但 xori,我不明白这是什么..
  • 我可以用更简单的命令替换它吗?
  • electronics-tutorials.ws/logic/logic_4.html 对于每一位,零变为一,一变为零。 en.wikipedia.org/wiki/XOR_gate xor 是一种矫枉过正,但如果您比较一个操作数是否为 1,则另一个操作数反转或未记录。查看两个页面上的真值表(如果链接继续有效)。

标签: assembly riscv ones-complement riscv32


【解决方案1】:

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

【讨论】:

  • @old_timer 否定每一位都是一回事,但我会编辑澄清一下,谢谢
【解决方案2】:

有时您会看到 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 和结果的角度来看,这与非操作相同,因此您经常会看到异或与全 1 而不是非指令。在这种情况下,如果工具支持它(程序集是由工具定义的(gnu 汇编器,或 jimmy 的汇编器或 sue 的汇编器),而不是目标 (risc-v)),它似乎是一条伪指令。

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

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

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

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 2020-10-27
    • 2015-07-15
    • 2018-07-17
    • 2012-08-13
    • 2019-09-12
    • 2015-01-22
    • 2011-04-16
    相关资源
    最近更新 更多