iOS 學習 AT T彙編

2021-07-13 11:31:10 字數 2256 閱讀 3890

at&t彙編和8086組合語言雖然兩者很相似,但是還是不能根據8086的語法規則來讀at&t彙編的吧,所以還是要看看at&t彙編的語法規則,因為在讀核心**時,跟硬體打交道的部分**是用at&t彙編編寫的,所以不可避免的會遇到at&t彙編,下面先來看看at&t彙編的語法規則吧。

一、 大小寫 

intel格式的指令使用大寫字母,而at&t格式的使用小寫字母。 

例: intel  at&t 

mov eax,ebx  movl %ebx,%eax 

二、 運算元賦值方向 

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

at&t語法第乙個為源運算元,第二個為目的運算元,方向從左到右,合乎自然。 

例: intel                        at&t 

mov eax,ebx  movl %ebx,%eax 

三、字首 

在 intel 語法中暫存器和立即數不需要字首;at&t 中暫存器需要加字首「%」 ;立即數

需要加字首「$」 。 

例: intel  at&t 

mov eax,1  movl $1,%eax 

符號常數直接引用,不需要加字首,如:movl value , %ebx,value為一常數;在符

號前加字首$表示引用符號位址, 如movl $value, %ebx,是將value的位址放到 ebx中。 

匯流排鎖定字首「lock」 :匯流排鎖定操作。 「lock」字首在linux 核心**中使用很多,特

別是smp**中。當匯流排鎖定後其它cpu不能訪問鎖定位址處的記憶體單元。 

遠端跳轉指令和子過程呼叫指令的操作碼使用字首「l「,分別為 ljmp,lcall,與之

相應的返回指令偽lret。 

例: intel  at&t 

call far section:offset  lcall $secion:$offset 

jmp far section:offset  ljmp $secion:$offset 

ret far satck_adjust  lret $stack_adjust 

四、間接定址語法 

intel 中基位址使用「[」 、「]」 ,而在 at&t 中使用「(」、「)」 ;另外處理複雜運算元的

語法 也 不同 , intel 為 segreg:[base+index*scale+disp] , 而在 at&t 中為

%segreg:disp(base,index,sale),其中segreg,index,scale,disp都是可選的,在指定

index而沒有顯式指定scale的情況下使用預設值 1。scale和 disp不需要加字首「&」 。 

intel  at&t 

instr 

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

instr

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

五、 字尾 

at&t 語法中大部分指令操作碼的最後乙個字母表示運算元大小, 「b」表示 byte(乙個

位元組) ;「w」表示 word(2 個位元組) ;「l」表示 long(4 個位元組) 。intel 中處理記憶體運算元

時也有類似的語法如:byte ptr、word ptr、dword ptr。 

例: intel  at&t 

mov al, bl  movb %bl,%al 

mov ax,bx  movw %bx,%ax 

mov eax, dword ptr [ebx]  movl (%ebx), %eax 

在 at&t 彙編指令中,運算元擴充套件指令有兩個字尾,乙個指定源運算元的字長,另乙個

指定目標運算元的字長。at&t 的符號擴充套件指令的為「movs」 ,零擴充套件指令為「movz」 (相應

的 intel指令為「movsx」和「movzx」) 。因此, 「movsbl %al,%edx」表示對暫存器 al 中的

位元組資料進行位元組到長字的符號擴充套件,計算結果存放在暫存器edx中。下面是一些允許的操

作數擴充套件字尾:  

bl: 位元組->長字  

bw: 位元組->字  

wl: 字->長字  

跳轉指令標號後的字尾表示跳轉方向, 「f」 表示向前 (forward) , 「b」 表示向後 (back) 。  

例: jmp 1f 

1:       jmp 1f 

1:有了上面內容做基礎,在接下來我們講解gcc內嵌彙編時就好多了。

原文:

at t彙編學習(一)

工作一年了,很是迷茫,乙個程式設計師不知到何去何從,現在網際網路上每天都會出現大量的程式語言,大量的新技術,感覺沒有自己的方向。找不到方向就積累知識。at t組合語言的基本框架如下所示 section data section text globl start start movl 1,eax mo...

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

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

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...