Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得两个';ARM中寄存器值的s补码?_Arm_Bit Manipulation - Fatal编程技术网

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

如何获得两个';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中的寄存器。

假设我在寄存器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中的寄存器。但下面有一个简单而快速的替代品(已通过gdb/qemu检查):

rsb接收,接收,-1

这样做的目的如下:

输出=-1-输入


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

我认为mvn只是不在注册范围内。问题是“我如何翻转位?”。MVN将翻转位。问题是要求否定(两个的补码),而不是逻辑非(一个的补码)。所以我认为你的-1应该被0替换。
ADD v2, v1, #1