“movl (%esi, %ecx, 4), eax” 是什么意思?

3

movl指令的来源是这3个指令,这意味着什么?

(%esi, %ecx, 4)
1个回答

5
这意味着:
计算地址 = (ESI + ECX * 4)。 从该内存地址的32位值中读取值到EAX中。
来自相关文章:
GAS指令通常具有以下形式:助记符 源,目标
请参见:http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax 个人而言,我更喜欢更易读的MASM语法。
mov EAX, dword ptr [ESI + ECX * 4]
     ^     ^
     |     +-- source in a readable syntax
     +-------- destination

表单如下:助记符目标,源(顺序完全相反)。

评论
哦,你所说的指令其实是参数
指令是整个语句。


这是AT&T语法,所以实际上是相反的。 - Mahmoud Al-Qudsi
感谢您的澄清。Intel和AT&T之间的主要区别是指令中源和目的地的顺序吗? - tippenein
主要是的,@tippenein。但还有其他差异,特别是与您发布的问题相关的差异。请参阅此链接以获取更多信息:http://www.imada.sdu.dk/Courses/DM18/Litteratur/IntelnATT.htm - Mahmoud Al-Qudsi
@tippenein 除了上述提到的差异 (操作数顺序、寻址方式语法) 之外,指令助记符 (名称) 还有许多差异,通常助记符还带有后缀用于声明数据类型。例如,movbmovwmovl 分别用于 8、16 和 32 位数据。也有完全不同的助记符,例如 retf (Intel) vs lret (AT&T)。 - doug65536

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接