AT T彙編簡介

2021-08-20 03:02:07 字數 2661 閱讀 8987

at&t語法與intel匯程式設計序使用的語法很不一樣,他們之間的主要區別有以下幾點:

這種定址方式常常用於在資料結構陣列中訪問特定元素內的乙個字段,base為陣列的起始位址,scale為每個陣列元素的大小,index為下標。如果陣列元素是資料結構,則disp為具體欄位在結構中的偏移。

at&t彙編器不提供對多**段程式的支援,類unix作業系統要求所有**在乙個段中

現代的彙編工具吸收了c語言預處理的功能,在彙編之前加上了一趟預處理,而預處理之前的檔案則已.s為字尾。此類.s檔案也和c程式一樣,可以使用#include、#ifdef等等。對於.s檔案則不回進行預處理。

符號是由字元組成的識別符號,包括大小寫字符集、數字和三個字元_.$。符號不允許用數字字元開始,並且大小寫含義不同。

語句以換行符或者行分割字元;作為結束。檔案最後語句必須以換行符作為結束。

語句由零個或多個標號(label)開始,後面可以跟隨乙個確定語句型別的關鍵符號。標號由符號後面跟隨乙個冒號:構成。關鍵符號確定了語句餘下部分的語義。如果該關鍵符號以乙個.開始,那麼當前語句就是乙個彙編命令(或稱為偽指令、指示符)。如果關鍵符號以乙個字母開始,那麼當前語句就是一條組合語言指令語句。因此一條語句的通用格式為:

標號: 彙編命令  注釋部分(可選)

或標號: 指令助記符 運算元1, 運算元2 注釋部分(可選)

常數是乙個數字,可分為字元常數和數字常數兩類。字元常數還可分為字串和單個字元;數字常數分為整數和浮點數。

一條指令語句可以含有0個或最多3個用逗號分開的運算元。對於具有兩個運算元的指令語句,第1個是源運算元,第2個是目的運算元,指令操作結果儲存在目的運算元中。

運算元可以是立即數、暫存器或記憶體。乙個間接運算元含有實際運算元的位址值。at&t語法通過在運算元前加乙個*字元來指定乙個間接運算元。

mov var,

%eax #把記憶體位址var處的內容放入暫存器eax中

mov %cs:var,

%eax #把**段中記憶體位址var處的內容放入暫存器eax中

movb $0x0a

,%es:

(%ebx) #位元組值0x0a放入到es段偏移ebx中

movl $var,

%eax #var位址放入eax

movl array

(%esi)

,%eax #array + esi位址的內容放入到eax

movl (

%ebx,

%esi,4)

,%eax #ebx +

4* esi位址內容放入eax

movl array

(%ebx,

%esi,4)

,%eax #array + ebx +

4* esi位址內容放入eax

movl -4(

%ebp)

,%eax #ebp -

4位址內容放入eax

movl foo(,

%eax,5)

,%eax #foo +

5* eax位址內容放入eax

直接跳轉和間接跳轉,條件跳轉只能是直接跳轉,對於直接跳轉,跳轉的目標位址作為指令的一部分直接編碼進跳轉指令中;間接跳轉,跳轉的目的位置來自於某個暫存器或某個記憶體位置中。

jmp *

%eax #間接跳轉,eax內容是跳轉的目標位置

jmp *

(%eax) #間接跳轉,eax位址內容是跳轉的目標位置

.ascii "string"

從位置計數器當前位置為字串分配空間並儲存字串。.ascii "hello world", "my assembler"

.asciz "string"

該彙編命令與.ascii類似,但是每個字串後面會自動新增null字元

.byte expressions

該彙編命令定義定義0個或多個用逗號分開的自己值。每個表示式的值是乙個位元組

.comm symbol,length

在bss區中宣告乙個命名的公共區域。在ld連線過程中,某個目標檔案中的乙個公共符號會與其他目標檔案中同名的公共符號合併。

.data subsection

通知編譯器把隨後的語句彙編到編號為subsection的data子區中。

.global symbol(.globl symbol)

使得鏈結器ld能看見符號symbol。如果在檔案中定義了symbol,那麼他的值能被鏈結過程中的其它目標檔案使用。

.org new_lc,fill

這個彙編命令會把當前區的位置計數器設定為new_lc。fill代表跳過的填充自己數。位置計數器都是同區的。

AT T彙編簡介

1.暫存器引用 引用暫存器要在暫存器號前加百分號 如 movl eax,ebx 80386有如下暫存器 8個32 bit暫存器 eax,ebx,ecx,edx,edi,esi,ebp,esp 8個16 bit暫存器,它們事實上是上面8個32 bit暫存器的低16位 ax,bx,cx,dx,di,si...

AT T彙編語法簡介

引用自 ps 這段時間在研究linux源 遇到了at t彙編,故轉貼個不錯的at t彙編貼。就像軟體的真諦 給我乙個標準,我用我的邏輯舞動世界 一樣,at t彙編是組合語言裡的另一種標準,這是相對於鼎鼎大名的intel的x86彙編來說。即使對於電子專業的學生來說,一旦掌握了c51微控制器的彙編,x8...

att格式彙編指令 關於ATT彙編

att 彙編大體格式是 指令 源運算元 目的運算元 比如將 10 移動到 eax 暫存器的寫法 movl 10,eax 1.att 彙編的源運算元和目的運算元和 intel 正好相反,也就是資料流向是從左到右 2.att 中立即數前需要加 符號,暫存器前加 符號 3.att 的指令加字尾 b w l...