【问题标题】:mov instruction in x86 assemblyx86汇编中的mov指令
【发布时间】:2011-08-18 22:38:20
【问题描述】:

从我读到的关于mov 的内容中,它将第二个参数复制到第一个参数中。那么,这有什么作用呢?

movl 8(%ebp), %edx

它将 edx 中的任何内容复制到函数的第一个参数(因为从 ebp 偏移 +8 是一个参数)?

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

【问题讨论】:

    标签: assembly x86 att mov


    【解决方案1】:
    movl 8(%ebp), %edx
    

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

    在英特尔语法中,您的指令会写成:

    mov edx, [ebp + 8]
    

    注意寄存器名称前没有%,地址使用方括号代替括号,指令中没有l 后缀。这些是了解您正在查看哪种形式的组装的绝妙礼物。

    【讨论】:

    • 有两种不同的汇编语言的原因是什么?正如您所指出的,这对于新手来说可能是一个常见的混淆来源,因为他们使用完全不同的约定。
    • @Victor T.:英特尔语法是英特尔最初指定的; AT&T 语法是对贝尔实验室汇编语法的改编,旨在用于多个平台。
    • @Stephen:英特尔 Synax 出现错误。一定有mov [ebp + 8], edx :)
    • @Ilya:那将是一个商店,而不是一个负载。 Intel 语法中的参数顺序与 AT&T 语法相反。
    • 对不起,同样的movl 8(%ebp), %edx,op 说'它将第二个参数复制到第一个参数',所以它是1 <- 2,但这里说'在这种语法中,源是第一位的和第二个目的地',所以它是1 -> 2,然后是So yes, your belief is correct,现在完全糊涂了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多