-
操作数方向和 Intel 语法的刚好相反。
-
寄存器名称有 "%" 前缀
-
立即数以 "$" 为前缀。
-
存储器操作数的大小取决于操作码名字的最后一个字符。操作码后缀 'b' 、'w'、'l' 分别指明了字节(8位)、字(16位)、长型(32位)存储器引用。
-
基址寄存器变为 "(" 和 ")"。另外,在 Intel 语法中, 间接内存引用"section:base + index\*scale + disp",在 AT&T中变为 "section:disp(base, index, scale)"。
-
需要牢记的一点是,当一个常量用于 disp 或 scale,不能添加 "$" 前缀。
| Intel | AT&T |
|---|---|
| mov eax,ecx | movl (%ecx),%eax |
| mov eax,ebx+3 | movl 3(%ebx),%eax |
| add eax,ebx+ecx\*2h | addl (%ebx,%ecx,0x2),%eax |
| sub eax,ebx+ecx\*4h-20h | subl -0x20(%ebx,%ecx,0x4),%eax |
| ----- | ----- |
| ----- | ----- |
"="修饰符表明它是一个只读的输出操作数。
"r" 表明可以使用任一寄存器存储操作数。
参考链接: