假设我在寄存器 v1 中有一个 32 位有符号整数。我想让这个值的二进制补码存储在另一个寄存器 v2 中。在普通数学中,这意味着我需要翻转所有 32 位,然后加 1。
我如何翻转位?
提前致谢。
假设我在寄存器 v1 中有一个 32 位有符号整数。我想让这个值的二进制补码存储在另一个寄存器 v2 中。在普通数学中,这意味着我需要翻转所有 32 位,然后加 1。
我如何翻转位?
提前致谢。
试试这个,(MVN 移动与否定):
MVN v2, v1
就像你问的那样“翻转位”。然后你就做+1:
ADD v2, v1, #1
或者,您可以只使用 NEG v2、v1 指令(RSB v2、v1、#0 的同义词)在单个指令中执行等效操作。
或者比 MVN 慢一点:
MOV v0,-1
MUL v2,v1,v0
似乎没有专门的命令来反转 ARM 中的寄存器。但下面有一个简单而快速的替代品(用 gdb/qemu 检查过):
rsb 接收,接收,-1
这将执行以下操作:
输出 = -1 - 输入
这是获得逻辑非的正确程序。