AT T與intel彙編格式區分

2021-10-17 18:38:42 字數 1477 閱讀 4031

在intel語法中,第乙個運算元表示目的運算元,第二個運算元表示源運算元,賦值方向從右向左。而在at&t語法中,第乙個運算元表示源運算元,第二個運算元表示目的運算元,賦值方向從左到右。

例:將ebx賦值給eax

intel

at&t

mov eax,ebx

movl %ebx,%eax

在intel語法中暫存器和立即數不需要字首,而at&t語法中暫存器需要加字首%,立即數需要加字首$

intel與at&t字首的區別

intel

at&t

mov eax,8

movl $8,%eax

mov ebx,0ffffh

movl $0xffff,%ebx

int 80h

int $0x80

在intel語法中偏移位址使用,而在at&t語法中偏移位址使用()。更具體來說,intel的指令格式是segreg:[base+index*scale+disp],而at&t的格式是%segreg:disp(base,index,scale)。其中index/scale/disp/segreg都是可選的,如果沒有指定scale而制定了index,則scale的預設值為1.

定址語法比較例子(第一行是通用語法):

intel語法

at&t語法

指令 foo,segreg:[base+index*scale+disp]

%segreg:disp(base,index,scale),foo

mov eax,[ebx+20h]

movl 0x20(%ebx),%eax

add eax,[ebx+ecx*2h]

addl (%ebx,%ecx,0x2),%eax

lea eax,[ebx+ecx]

leal (%ebx,%ecx),%eax

sub eax,[ebx+ecx*4h-20h]

subl -0x20(%ebx,%ecx,0x4),%eax

在at&t語法中,操作碼後面有乙個字尾,其含義就是指出操作碼的大小,l表示32位,w表示word-16位,b表示byte-8位。而在intel語法中,則要在記憶體單元運算元的前面加上byte ptr、word ptr和dword ptr等來指定運算元的長度。

操作碼的字尾舉例:

intel語法

at&t語法

mov al,bl

movb %bl,%al

mov ax,bx

movw %bx,%ax

mov eax,ebx

movl %ebx,%eax

mov eax,dword ptr [ebx]

movl (%ebx),%eax

參考

AT T彙編格式與Intel彙編格式的比較

gcc採用的是at t的彙編格式,也叫gas格式 gnu asembler gnu彙編器 而微軟採用intel的彙編格式.一 基本語法 語法上主要有以下幾個不同.1 暫存器命名原則 at t intel 說明 eax eaxintel的不帶百分號 2 源 目的運算元順序 at t intel 說明m...

AT T彙編格式與Intel彙編格式的比較

gcc採用的是at t的彙編格式,也叫gas格式 gnu asembler gnu彙編器 而微軟採用intel的彙編格式.一 基本語法 語法上主要有以下幾個不同.1 暫存器命名原則 at t intel 說明 eax eaxintel的不帶百分號 2 源 目的運算元順序 at t intel 說明m...

AT T彙編格式與Intel彙編格式的比較

gcc採用的是at t的彙編格式,也叫gas格式 gnu asembler gnu彙編器 而微軟採用intel的彙編格式.一 基本語法 語法上主要有以下幾個不同.1 暫存器命名原則 at t intel 說明 eax eaxintel的不帶百分號 2 源 目的運算元順序 at t intel 說明m...