- AT&T与Intel汇编语法的比较
1)GCC采用的是AT&T的汇编格式, 而微软采用Intel的汇编格式.
1)在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。
2) AT&T 和 Intel 格式中的源操作数和目标操作数的位置正好相反。在 Intel 汇编格式中,目标操作数在源操作数的左边;而 在 AT&T 汇编格式中,目标操作数在源操作数的右边。
3)在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。
4)在 AT&T 汇编格式中,操作数的字长由操作符的最后一个字母决定,后缀'b'、'w'、'l'分别表示操作数为字节(byte,8 比 特)、字(word,16 比特)和长字(long,32比特);而在 Intel 汇编格式中,操作数的字长是用 "byte ptr" 和 "word ptr" 等前缀来表示的。
5)寻址方式
2. IA32寄存器
寄存器%ebp和%esp有特殊用途,%ebp保存帧指针(基地址,base pointer),%esp保存栈指针(stack pointer)。程序栈中每调用一个函数就会创建一个栈帧,栈是向下增长的。寄存器%ebp保存一个栈帧的起始地址(即基地址),一般来说函数中的局部变量靠%ebp加上偏移量寻找;寄存器%esp保存指向栈顶的指针。
寄存器%eax和寄存器%edx也有特殊用途,%eax一般用于保存函数的返回值,也用来保存64位数据的低32位;%edx用来保存64位数据的高32位。
资料来源:
https://blog.csdn.net/happy987818/article/details/51557502
https://blog.csdn.net/qq_15514565/article/details/57644132