Assembly 确定目的地(寄存器名称或地址)和值

Assembly 确定目的地(寄存器名称或地址)和值,assembly,x86,Assembly,X86,在这里,我知道目的地是esp。我还知道LEA(加载有效地址)在这种情况下的行为类似于移动。但我不确定这个寄存器中存储的值。我是这样看的: 0x8000*2=0x80000 0x20000+0x10000=0x200000 因此,该值为: [0x200000] 我说得对吗 检查一下你的算术,但总的来说,你是对的。您正确理解x86 LEA指令 x86 LEA指令不会取消对其计算的地址的引用。也就是说,LEA不去地址;相反,LEA只计算地址供其他指令稍后使用。0x8000*2是0x10000,而不是0

在这里,我知道目的地是esp。我还知道LEA(加载有效地址)在这种情况下的行为类似于移动。但我不确定这个寄存器中存储的值。我是这样看的:

0x8000*2=0x80000

0x20000+0x10000=0x200000

因此,该值为:

[0x200000]


我说得对吗

检查一下你的算术,但总的来说,你是对的。您正确理解x86 LEA指令


x86 LEA指令不会取消对其计算的地址的引用。也就是说,LEA不去地址;相反,LEA只计算地址供其他指令稍后使用。

0x8000*2是0x10000,而不是0x80000。无论如何,我个人认为该值是
0x20000
(不带括号)。说
[0x20000]
可以解释为地址0x20000处的值。@Michael如果我使用了mov[ebx],mov ebx 0x10000之后的eax会改变什么吗?我是这样看的——将0x8000存储在地址0x10000处,地址0x10000既不在eax地址中,也不在ebx地址中,所以不会。
mov eax 0x8000 

mov ebx 0x10000

lea esp, [ebx+eax*2]