说说汇编
合久必分,x86架构的assembly语法居然有两支,AT&T和intel,而两者的语法却是totally不同的。于是,在初次接触的时候,就会很迷惑。挑重点,两者的主要区别如下:
1. intel语法里的目标在左,而AT&T的目标在右,譬如intel里 mov eax,[ecx] 在AT&T里就成了movl (%ecx),%eax
2. AT&T语法里的寄存器前用%,如%eax, %ebx,常量前用$,如$1,$0xff,intel语法里什么都不用加
3. 寻址写法不一样,intel里用[]括住寄存器如[%eax],[%ebx+3],而AT&T用(),如(%eax),3(%ebx)
4. AT&T里有诸如movl,movb来标明操作的字节数,而intel用dword的前缀来做同样的事情
5. gcc支援的是AT&T的语法