【问题标题】:What does this expression evaluates to: mov eax, [(ebp + 8) + [ebp - 25]]这个表达式的计算结果是什么:mov eax, [(ebp + 8) + [ebp - 25]]
【发布时间】:2015-03-04 14:12:18
【问题描述】:

Assembly 中是否允许此表达式:mov eax, [(ebp + 8) + [ebp - 25]]

如果它被允许,这就是它的评估结果吗:

(ebp + 8) 计算为一个地址,然后将该地址与(ebp - 25) 指向的内存值相加,然后将这个相加后的值本身用作地址,并将这个新地址指向的值移入@ 987654324@.

【问题讨论】:

    标签: assembly x86 nasm


    【解决方案1】:

    这是不允许的,但你可以像这样分解它:

    mov eax, [ebp - 25]    
    mov eax, [eax + ebp + 8]
    

    【讨论】:

    • 我也可以这样做吗:mov eax, [ebp - 25] mov ebx, [ebp + 8] mov eax, [eax + ebx + 123]。
    • @ 500 - 内部服务器错误 即使我尝试过,我也不知道它是否有效。我只想知道我是否可以在[]中选择我想要的任何格式,只要它不是嵌套的[[]]。我无法在网上找到任何说明英特尔语法寻址模式所允许的格式的教程!
    • 是的,你所拥有的应该可以工作。一般支持的形式是 [base + index * scale + offset],其中 base 和 index 可以是任何通用寄存器,并且 scale 是 1(不存在)2 或 4。所有元素都是可选的,但您至少需要一个。您可以在英特尔编程手册中看到所有这些内容 - 可从他们的网站下载。
    猜你喜欢
    • 2015-01-25
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2017-05-18
    • 2015-01-21
    相关资源
    最近更新 更多