2011-05-04 113 views
8

从我读到的关于mov的内容中,它将第二个参数复制到第一个参数中。那么,这是做什么的?x86程序集中的mov指令

 
movl 8(%ebp), %edx 

它复制无论是在EDX的函数的第一参数(因为一个从ebp的8偏移量是一个参数)?

我觉得这真的意味着将第一个参数移动到edx寄存器中,但是我在维基百科上读到它是相反的方式?

回答

15
movl 8(%ebp), %edx 

is in“AT & T Syntax”;在这种语法中,源头第一,目的地第二。所以是的,你的信念是正确的。大多数文档使用“Intel语法”,它具有相反的顺序。对于新装x86组装的人来说,这是一个相当混乱的来源。

在Intel语法,你的指令将被写成:

mov edx, [ebp + 8] 

注意没有%的寄存器名称之前,并用方括号代替括号中的地址,以及缺乏l的后缀在指令上。这些都是知道你正在看的是哪种形式的组装的死去的赠品。

+0

有两种不同的装配方式是什么原因?正如你所指出的那样,这可能是新人混淆的常见原因,因为他们使用完全不同的惯例。 – greatwolf 2011-05-07 21:58:21

+0

@Victor T .:英特尔语法是英特尔本来指定的; AT&T语法是贝尔实验室汇编语法的改编,旨在用于多个平台。 – 2011-05-07 22:37:11

+0

@Stephen:Intel Synax存在错误。必须有'mov [ebp + 8],edx' :) – 2011-07-12 11:12:39