【发布时间】:2017-03-29 21:09:12
【问题描述】:
我对汇编有一个非常简单的了解,但对下面这段代码的作用感到困惑?
movl (%eax, %edx, 4), %ecx
我的理解是%edx被乘以4,然后加上%eax的值,然后存储在%ecx中这是给出的值的表
给出的答案是 0x11,但我没有得到那个答案。
【问题讨论】:
-
在 AT&T 语法中,
(..)括号的使用暗示正在获取/写入内存内容。不幸的是,该规则并非处处都遵循,某些指令在没有()语法的情况下强制使用内存(当指令对非内存使用没有意义时)。在 Intel 语法中,内存访问由[]标记,更严格地用于所有 (?) 指令(lea是一种使用mov语法的异常,但不访问内存)。因此,使用 AT&T 语法时,您必须完整阅读指令以判断是否访问了内存,但使用()是安全的选择。