如何在ARM中获得两个寄存器值的补码?

时间:2013-04-11 21:46:41

标签: arm bit-manipulation

假设我在寄存器v1中有一个32位的signed int。我想得到这个值的两个补码存储在另一个寄存器v2中。在正常的数学运算中,这意味着我需要翻转所有32位,然后加1。

如何翻转位?

提前致谢。

3 个答案:

答案 0 :(得分:4)

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

MVN v2, v1

这就像你问的那样“翻转”。你只需做+1:

ADD v2, v1, #1

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

答案 1 :(得分:0)

似乎没有专用命令可以反转ARM中的寄存器。但是下面有一个简单快捷的替代方法(已通过gdb / qemu检查):

rsb Rx,Rx,-1

这将执行以下操作:

输出= -1-输入

这是获取逻辑NOT的正确过程。

答案 2 :(得分:-1)

或者比MVN慢一点:

MOV v0,-1

MUL v2,v1,v0