汇编语言(英语:assembly language)是任何一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。
使用汇编语言编写的源代码,然后通过相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程。
语言的种类
汇编风格
x86/amd64汇编指令的两大风格分别是Intel汇编与AT&T汇编,分别被Microsoft Windows/Visual C++与GNU/Gas采用(Gas也可使用Intel汇编风格):
项目 | Intel风格 | AT&T风格 |
---|---|---|
操作数顺序 | 目标操作数在前 | 源操作数在前 |
寄存器 | 原样 | 加%前缀 |
立即数 | 原样 | 加$前缀 |
16进制立即数 | 用后缀B与H分别表示二进制与十六进制 对于16进制字母开头的要加前缀0 |
加前缀0x |
访问内存长度的表示 | 前缀BYTE PTR, WORD PTR, DWORD PTR和QWORD PTR表示字节,字,双字和四字 | 后缀b,w,l,q表示字节,字,双字和四字 |
引用全局或静态变量var的值 | [var] | var |
引用全局或静态变量var的地址 | var | $var |
引用局部变量 | 需要基于栈指针(rsp) | |
绝对寻址 | [imm] | imm |
间接寻址 | [reg] | (%reg) |
基址相对寻址 | [reg +imm] | imm(%reg) |
变址寻址 | [base+index] | (base,index) |
变址寻址 | [base+index+imm] | imm(base,index) |
比例变址寻址 | [base + index * scale + imm] | imm(base, index, scale) |
scale只能是1,2,4,8其中的一个数字(1省略不写就是普通变址寻址) | ||
代码注释 | 单行注释用;+注释内容。例如:mov rax, rdx ;这里是注释 | |
注意 | 这里imm为立即数,base和index为寄存器,scale为伸缩量 |