x86 汇编中的 mov 指令

发布于 2024-11-05 13:55:34 字数 228 浏览 0 评论 0原文

根据我所读到的有关 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟酒忠诚 2024-11-12 13:55:34
movl 8(%ebp), %edx

位于“AT&T 语法”中;在此语法中,源在前,目标在后。所以是的,你的信念是正确的。大多数文档使用“英特尔语法”,其顺序相反。对于刚接触 x86 汇编的人来说,这是一个相当大的困惑。

在英特尔语法中,您的指令将编写为:

mov edx, [ebp + 8]

请注意寄存器名称之前缺少 %,并且使用方括号而不是括号作为地址,并且缺少 l< /code> 指令后缀。这些是了解您正在查看哪种形式的装配的绝对赠品。

movl 8(%ebp), %edx

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:

mov edx, [ebp + 8]

Note the absence of % before the register names, and the use of square brackets instead of parentheses for the address, and the lack of an l suffix on the instruction. These are dead giveaways to know which form of assembly you are looking at.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文