x86 汇编中的 mov 指令
根据我所读到的有关 mov
的内容,它将第二个参数复制到第一个参数中。那么,这有什么作用呢?
movl 8(%ebp), %edx
它将 edx 中的所有内容复制到函数的第一个参数(因为距 ebp
的偏移量 +8 是一个参数)?
我觉得这真正的意思是将第一个参数移动到 edx 寄存器中,但我在维基百科上读到它是相反的?
From what I've read about mov
, it copies the second argument into the first argument. Then, what does this do?
movl 8(%ebp), %edx
It copies whatever is in edx to the first parameter of the function (since an offset of +8 from ebp
is a parameter)?
I feel like what this really means is moving the first parameter into the edx
register, but I read on Wikipedia that it is the other way around?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
位于“AT&T 语法”中;在此语法中,源在前,目标在后。所以是的,你的信念是正确的。大多数文档使用“英特尔语法”,其顺序相反。对于刚接触 x86 汇编的人来说,这是一个相当大的困惑。
在英特尔语法中,您的指令将编写为:
请注意寄存器名称之前缺少
%
,并且使用方括号而不是括号作为地址,并且缺少l< /code> 指令后缀。这些是了解您正在查看哪种形式的装配的绝对赠品。
is in "AT&T Syntax"; in this syntax, the source comes first and the destination second. So yes, your belief is correct. Most documentation uses the "Intel Syntax", which has the reverse ordering. This is a source of considerable confusion for people new to x86 assembly.
In Intel Syntax, your instruction would be written:
Note the absence of
%
before the register names, and the use of square brackets instead of parentheses for the address, and the lack of anl
suffix on the instruction. These are dead giveaways to know which form of assembly you are looking at.