Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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 添加负十六进制数_Assembly_X86_Hex - Fatal编程技术网

Assembly 添加负十六进制数

Assembly 添加负十六进制数,assembly,x86,hex,Assembly,X86,Hex,我有一个小问题: 是否有任何X的值满足此等式,并且可以放入32位寄存器 7A40B660+X=004023A0 我需要它来调用004023A0地址(我控制ESI寄存器): 所有的数字都是十六进制数。首先,让我们简单地讨论一下问题: 7A40B660+X=004023A0 让我们把X放在它自己的位置上: X=004023A0-7A40B660 在32位十六进制中,FFFFFFFF+1=0。把零加到一个数字上不会改变它的值。让我们在右边加零: X=FFFFFF+1+004023A0-7A40B66

我有一个小问题: 是否有任何
X
的值满足此等式,并且可以放入32位寄存器

7A40B660+X=004023A0
我需要它来调用004023A0地址(我控制ESI寄存器):


所有的数字都是十六进制数。

首先,让我们简单地讨论一下问题:

7A40B660+X=004023A0

让我们把X放在它自己的位置上:

X=004023A0-7A40B660

在32位十六进制中,
FFFFFFFF+1=0
。把零加到一个数字上不会改变它的值。让我们在右边加零:

X=FFFFFF+1+004023A0-7A40B660

重新安排:

X=(FFFFFF-7A40B660)+1+004023A0


现在很容易解决。答案是85FF6D40。

这取决于所使用的表示形式。例如,这些是32位数字吗?嗨。它不起作用。我这样做是为了解决ASM问题:我控制ESI,我希望add指令的结果是004023A0。再次感谢!你说的“没用”是什么意思?你到底做了什么?发生了什么?您是否将
ESI
设置为包含值
85FF6D40
的地址?EAX中的值是多少?是的,我做了。显然,EAX具有以下值:
7A40B660
(mov EAX,7A40B660h)。因此,EAX=
7A40B660
和ESI的指针=
85FF6D40
,但在外接程序EAX之后存储的值是
BAAEB5E5
@Alberto,地址处的值必须是85FF6D40,而不一定是地址本身。
.code:00401095 mov     eax, 7A40B660h
.code:0040109A add     eax, [esi]      ; Add
.code:0040109C call    eax