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) |
变址寻址 | imm[base+index] | imm(base,index) |
比例变址寻址 | imm[base + index * scale ] | imm(base, index, scale) |
scale只能是1,2,4,8其中的一个数字(1省略不写就是普通变址寻址) | ||
代码注释 | 单行注释用;+注释内容。例如:mov rax, rdx ;这里是注释 | |
注意 | 这里imm为立即数,base和index为寄存器,scale为伸缩量 |
原文地址:https://www.cnblogs.com/songyaqi/p/12075155.html
时间: 2024-11-23 13:42:45