AT T 和 Intel 彙編語法的主要區別

2022-09-05 13:27:10 字數 1704 閱讀 4386

october 29, 2011 分類:技術

作為乙個愛折騰的大好青年,補番之餘還要補一些 linux 下的基礎,比如 gdb 的正確使用方法。但無論是看gdb還是gcc -s裡的彙編,感覺都不能一下子接受這種設定。

後來發現,雖然同為 x86 彙編,但語法也分兩大流派:之前上學時學的 intel 語法,以及流行於 unix/linux 平台上的 at&t 語法。

首先,兩者最讓人糾結的區別就是源運算元、目標運算元的順序。at&t 語法先寫源運算元,再寫目標運算元;intel 語法先寫目標運算元,再寫源運算元:

at&t

movl %esp, %ebp

intel

mov ebp, esp

然後,另乙個明顯的區別就是指令的命名(或者說,運算元大小的指定方式)。at&t 語法將運算元的大小表示在指令的字尾中(b、w、l);intel 語法將運算元的大小表示在運算元的字首中(byte ptr、word ptr、dword ptr):

at&t

decw (%eax)

intel

dec word ptr [ebx]

再者,各種取址方式的表示。at&t 語法總體上是offset(base, index, width)的格式;intel 語法總體上是[index * width + base + offset]的格式:

at&t

movl           0x0100, %eax

movl (%esi), %eax

movl -8(%ebp), %eax

movl 0x0100(,%ebx,4), %eax

movl 0x8(%edx,%ebx,4), %eax

intel

mov eax, [0100]

mov eax, [esi]

mov eax, [ebp-8]

mov eax, [ebx*4+0100]

mov eax, [edx+ebx*4+8]

另外,各種非十進位制數制下數字的表示方法。at&t 語法用字首表示數制(0x、0、0b);intel 語法用字尾表示數制(h、o、b):

at&t

movl 0x8   , %eax

movl 010 , %eax

movl 0b1000, %eax

intel

mov eax,    8h

mov eax, 10o

mov eax, 1000b

最後就是零碎的東西的表示方法了。at&t 語法要在常數前加 $、在暫存器名前加 % 符號;intel 語法沒有相應的東西要加:

at&t

subl $0x30, %eax

intel

sub eax, 30

於是,以上就是 at&t 和 intel 彙編語法的主要區別了……吧

AT T彙編和Intel彙編語法主要區別

at t使用 表示立即運算元,而intel的立即運算元是不需要界定的。因此,使用at t語法引用十進位制值4時,使用 4,使用intel語法時只需使用4。at t在暫存器名稱前加上字首 而intel不這樣做。因此,使用at t語法引用eax暫存器寫為 eax。at t語法處理源和目標運算元時使用相反...

ATT 彙編語法

在研華的pc104上使用看門狗要使用彙編。使用彙編來修改cmos裡面的引數。也就是內聯彙編。linux下gcc只支援att彙編。所以這兒有必要將att語法學習學習。以後需要的時候翻出來溫習溫習。1,運算元的長度 運算元的長度用加在指令後的符號表示 b byte,8 bit w word,16 bit...

AT T與intel彙編格式區分

在intel語法中,第乙個運算元表示目的運算元,第二個運算元表示源運算元,賦值方向從右向左。而在at t語法中,第乙個運算元表示源運算元,第二個運算元表示目的運算元,賦值方向從左到右。例 將ebx賦值給eax intel at t mov eax,ebx movl ebx,eax 在intel語法中...