You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86-64汇编操作数顺序咨询:目标在前还是源在前?

x86-64汇编操作数顺序:两种语法的区别

嘿,这个问题太常见了——毕竟x86-64汇编有两种主流语法体系,刚好对应你查到的两种不同表述,难怪会困惑!

Intel 语法(Windows/多数入门教材常用)

这种语法的操作数顺序是 「指令 目标, 源」,数据从“源”流向“目标”。比如经典的移动指令:

mov eax, ebx    ; 把ebx寄存器的值,复制到eax寄存器中

目标寄存器eax写在前面,源ebx在后面,符合“把源的内容放到目标里”的直觉。绝大多数面向初学者的教材、Windows平台的汇编工具(比如MASM)都用这种语法。

AT&T 语法(Unix/Linux生态常用)

而在Unix/Linux环境中(比如GCC配套的汇编器gas),用的是AT&T语法,操作数顺序刚好反过来:「指令 源, 目标」。同样的移动操作,AT&T写法是:

movl %ebx, %eax    ; 功能和上面完全一致,只是操作数顺序颠倒

这里还有两个明显特征:寄存器前要加%,指令后会带长度后缀(比如l代表32位长字),这些都是区分两种语法的快速标志。

为什么会有两种差异?

简单来说,Intel语法是英特尔官方定义的原生语法,而AT&T语法是当年贝尔实验室为适配Unix工具链,对Intel语法做的变体调整,后来就成为了类Unix系统的默认汇编语法。你看到的三本书出现两种表述,大概率是分别采用了这两种不同的语法体系。

下次遇到类似情况,只要看操作数前有没有%、指令有没有长度后缀,就能快速判断是哪种语法啦!

内容的提问来源于stack exchange,提问作者Josiah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:41:42