如何获得两个';ARM中寄存器值的s补码?
假设我在寄存器v1中有一个32位有符号整数。我想得到这个值的两个补码,以存储在另一个寄存器v2中。在普通数学中,这意味着我需要翻转所有32位,然后加1 我如何翻转这些位 提前感谢。试试这个(MVN用否定移动): 就像你问的那样,这个“翻页”。您只需执行+1:如何获得两个';ARM中寄存器值的s补码?,arm,bit-manipulation,Arm,Bit Manipulation,假设我在寄存器v1中有一个32位有符号整数。我想得到这个值的两个补码,以存储在另一个寄存器v2中。在普通数学中,这意味着我需要翻转所有32位,然后加1 我如何翻转这些位 提前感谢。试试这个(MVN用否定移动): 就像你问的那样,这个“翻页”。您只需执行+1: ADD v2, v1, #1 或者,您可以只使用NEG v2,v1指令(RSB v2,v1,#0的同义词)在单个指令中执行等效操作。或比MVN稍慢一点: MOV v0,-1 mulv2、v1、v0似乎没有专门的命令来反转ARM中的寄存器。
ADD v2, v1, #1
或者,您可以只使用NEG v2,v1指令(RSB v2,v1,#0的同义词)在单个指令中执行等效操作。或比MVN稍慢一点:
MOV v0,-1
mulv2、v1、v0
似乎没有专门的命令来反转ARM中的寄存器。但下面有一个简单而快速的替代品(已通过gdb/qemu检查):
rsb接收,接收,-1
这样做的目的如下:
输出=-1-输入
这是获取逻辑NOT的正确过程 我认为mvn只是不在注册范围内。问题是“我如何翻转位?”。MVN将翻转位。问题是要求否定(两个的补码),而不是逻辑非(一个的补码)。所以我认为你的-1应该被0替换。
ADD v2, v1, #1