有两种汇编格式:Intel汇编和AT&T汇编,前者常用于Windows,后者常用于Unix,是GNU汇编器的缺省格式,本文介绍后者(AT&T汇编格式)。
1,常用指令及解释
movl %eax, %edx --- 数据传递,%eax地址传递给%edx
pushl %eax --- 入栈,分两步:subl $4, %esp(栈向低地址方向增长) + movl %eax, (%esp)
popl %eax --- 出栈,分两步:movl (%esp), %eax + addl $4, %esp
addl $8, %eax ---
subl $4, %esp ---
enter --- 进入函数,分两步:pushl %ebp + movl %esp, %ebp(将栈顶地址复制给栈基址,当前栈变为空)
leave --- 退出函数,分两步:movl %ebp, %esp + popl %ebp
call 0x12345 --- push %eip + movl 0x12345, %eip(%eip存放下一条执行指令)
ret --- call的逆操作,相当于popl %eip
2,传输字节数
movb 8bit
movw 16bit
movl 32bit
movq 64bit
3,程序实例
int g(int x){
return x + 10;
}