not
伪lyszt.net 更详细地介绍了 not 和其他 RISC-V 指令。
描述
not 反转寄存器的所有位。0 变为 1,1 变为 0。下面的形式读取源寄存器 rs,翻转全部 32 位,并将结果写入目标寄存器 rd。此操作是按位取反。
not rd, rs
not 是一条伪指令:一个可读的名称,汇编器会将其重写为真正的指令。它变成下面的指令,即与全 1 掩码进行 XOR。
xori rd, rs, -1
XOR 在掩码为 1 的位置翻转位,因此全 1 掩码会翻转所有位。值 -1 在位上全是 1,这就是它能作为掩码的原因。RISC-V 没有专用的取反指令,因为这种重写就能处理它。
not 产生掩码的反面。如果某个模式选择某些位,not 会生成选择其余位的模式。在 not 之后接 and 会清除原掩码指定的位,从而关闭一组标志。
RISC-V 手册将 not 定义为常量 -1 的 xori 的汇编器伪指令,并将该 xori 描述为寄存器 rs1 的按位逻辑取反。
not 和 neg 给出不同的结果。not 翻转位,neg 翻转符号。5 的 not 是 -6,5 的 neg 是 -5。模拟器的跟踪显示了代替 not 运行的 xori。
展开为
xori rd, rs, -1
汇编器会将此伪指令替换为上面列出的真实指令或指令。
示例
li t0, 0 not t1, t0 # t1 = -1 (every bit flipped)
