assembly - x86 汇编中的 mov 指令

标签 assembly x86 att mov

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

movl    8(%ebp),    %edx

它将 edx 中的所有内容复制到函数的第一个参数(因为距 ebp 的 +8 偏移量是一个参数)?

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

最佳答案

movl 8(%ebp), %edx

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

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

mov edx, [ebp + 8]

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

关于assembly - x86 汇编中的 mov 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890724/

相关文章:

程序集 32 位打印显示在 qemu 上运行的代码,无法在真实硬件上运行

function - 如何从程序集中调用 Rust 函数?

linux - 汇编中 EAX,1 和 EBX,1 的区别?

linux - ASM printf : no output if string doesn't include\n newline

c++ - 将汇编代码移植到 C++

c++ - 如何强制 GCC 以线性方式转换 volatile 内联汇编语句?

assembly - assembly 模数 x86

gcc - DOS .COM 文件末尾的额外字节,使用 GCC 编译

assembly - MOV(%r11,%r12,1),%edx是什么意思?

macos - Mac OS X 上的 64 位程序集运行时错误 : "dyld: no writable segment" and "Trace/BPT trap"