最简单的main函数
test1.c
#include "stdio.h"
int main()
{
return 0;
}
gcc -S test1.c -o test.s
代码
.file "test1.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
movl $0, %eax
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.1 20061011 (Red Hat 4.1.1-30)"
.section .note.GNU-stack,"",@progbits
AT&T语法和intel系列汇编语言有差别
1、指令大小写
intel大写,AT&T小写
2、指令操作数赋值方向
intel从右到左:MOV EAX, EBX
AT&T从左到右:movl %ebx, %eax
3、指令前缀
intel语法中寄存器和立即数不需要前缀
AT&T寄存器加前缀“%”,立即数加前缀“$”:movl $1, %eax; 符号常数直接饮用,不加前缀movl value, %ebx; 符号前加$,表示引用符号地址
movl %value, %ebx
4、间接寻址
intel中基地址实用[],AT&T中使用()
intel中segreg:[base+index*scale+disp],AT&T中%segreg:disp(base,index,scale)

浙公网安备 33010602011771号