【问题标题】:Determine the destination (register name or address) and value确定目的地(寄存器名称或地址)和值
【发布时间】:2019-01-28 00:21:01
【问题描述】:
mov eax 0x8000 

mov ebx 0x10000

lea esp, [ebx+eax*2]

这里我知道目的地是 esp。我也知道 LEA(加载有效地址)在这种情况下表现得像移动。但我不确定存储在这个寄存器中的值。我是这样看的:

0x8000 * 2 = 0x80000

0x20000 + 0x10000 = 0x200000

所以值是:

[0x200000]

我说的对吗?

【问题讨论】:

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

标签: assembly x86


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 2020-07-04
    • 2018-10-22
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多