Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/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
Assembly 更改登录程序集(16位)_Assembly_Arm_Bit_16 Bit - Fatal编程技术网

Assembly 更改登录程序集(16位)

Assembly 更改登录程序集(16位),assembly,arm,bit,16-bit,Assembly,Arm,Bit,16 Bit,我应该把一个16位的值从正数改为负数。在谷歌搜索了几分钟后,我找到了一个解决方案,但我仍然不确定它是否正确,所以如果你能帮助我,那就太好了。谢谢 eor r4,r1,#0x8000000使用reversesub轨迹指令rsb执行任务 rsb r4, r1, #0 @ computes r4 = 0 - r1 此指令在ARM和Thumb状态下都可用,但Thumb1只有 rsbs Rd, Rn, #0 将立即数操作数限制为#0使用rsb指令:rsb r4,r1,#0(这将使用反向减法指令计算

我应该把一个16位的值从正数改为负数。在谷歌搜索了几分钟后,我找到了一个解决方案,但我仍然不确定它是否正确,所以如果你能帮助我,那就太好了。谢谢


eor r4,r1,#0x8000000

使用reversesub轨迹指令
rsb
执行任务

rsb r4, r1, #0   @ computes r4 = 0 - r1
此指令在ARM和Thumb状态下都可用,但Thumb1只有

rsbs Rd, Rn, #0

将立即数操作数限制为
#0

使用
rsb
指令:
rsb r4,r1,#0
(这将使用反向减法指令计算
r4=0-r1
)。请注意,建议的解决方案仅翻转高位。如果有符号整数使用符号大小表示,这将起作用,但ARM和过去30年制造的任何其他主流计算机都不是这种情况;他们使用二的补语。因此,例如,如果输入是
1
,您的指令将给出结果
0x80000001
,它表示32位有符号整数-2147483647,而不是-1。@NateEldredge:公平地说,它总是将值从非负值更改为负值,反之亦然。问题并不是说他们想保持大小不变:P但是,是的,第一步应该是对输入进行一个微不足道的实验,比如
0
1
,以及
-1
。(或者使用调试器单步执行实际实验,也很容易。)是否要对16位值求反
0x8000000
是32位寄存器的顶部,因此不可能正确,您只需在低位16之外更改1位。(
0x8000
也不正确,如果您希望使用
eor
进行求反而不是添加
INT\u MIN
,但是您确定要在寄存器中使用16位值吗?通常您会进行符号扩展,将加载从半个字扩展到完整寄存器。)