2

假设我在寄存器 v1 中有一个 32 位有符号整数。我想让这个值的二进制补码存储在另一个寄存器 v2 中。在普通数学中,这意味着我需要翻转所有 32 位,然后加 1。

我如何翻转位?

提前致谢。

4

3 回答 3

5

试试这个,(MVN 移动与否定):

MVN v2, v1

就像你问的那样“翻转位”。然后你就做+1:

ADD v2, v1, #1

或者,您可以只使用 NEG v2、v1 指令(RSB v2、v1、#0 的同义词)在单个指令中执行等效操作。

于 2013-04-11T23:01:39.333 回答
-1

或者比 MVN 慢一点:

MOV v0,-1

MUL v2,v1,v0

于 2013-04-11T23:06:40.843 回答
-1

似乎没有专门的命令来反转 ARM 中的寄存器。但下面有一个简单而快速的替代品(用 gdb/qemu 检查过):

rsb 接收,接收,-1

这将执行以下操作:

输出 = -1 - 输入

这是获得逻辑非的正确程序。

于 2020-03-30T20:16:05.720 回答