【发布时间】:2011-08-18 22:38:20
【问题描述】:
从我读到的关于mov 的内容中,它将第二个参数复制到第一个参数中。那么,这有什么作用呢?
它将 edx 中的任何内容复制到函数的第一个参数(因为从 ebp 偏移 +8 是一个参数)?
我觉得这真正意味着将第一个参数移动到edx 寄存器中,但我在维基百科上读到它是相反的方式?
【问题讨论】:
从我读到的关于mov 的内容中,它将第二个参数复制到第一个参数中。那么,这有什么作用呢?
它将 edx 中的任何内容复制到函数的第一个参数(因为从 ebp 偏移 +8 是一个参数)?
我觉得这真正意味着将第一个参数移动到edx 寄存器中,但我在维基百科上读到它是相反的方式?
【问题讨论】:
movl 8(%ebp), %edx
在“AT&T 语法”中;在这种语法中,源在前,目标在后。所以,是的,你的信念是正确的。大多数文档使用“英特尔语法”,它具有相反的顺序。对于刚接触 x86 汇编的人来说,这是一个相当混乱的根源。
在英特尔语法中,您的指令会写成:
mov edx, [ebp + 8]
注意寄存器名称前没有%,地址使用方括号代替括号,指令中没有l 后缀。这些是了解您正在查看哪种形式的组装的绝妙礼物。
【讨论】:
mov [ebp + 8], edx :)
movl 8(%ebp), %edx,op 说'它将第二个参数复制到第一个参数',所以它是1 <- 2,但这里说'在这种语法中,源是第一位的和第二个目的地',所以它是1 -> 2,然后是So yes, your belief is correct,现在完全糊涂了