假设我在寄存器v1中有一个32位的signed int。我想得到这个值的两个补码存储在另一个寄存器v2中。在正常的数学运算中,这意味着我需要翻转所有32位,然后加1。
如何翻转位?
提前致谢。
答案 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