AT T彙編語法格式

2021-06-02 16:24:49 字數 1140 閱讀 5463

1.暫存器的引用要在暫存器前加%, 如mov %eax, %ebx

2.運算元排列是左源右目的,如上例表示把值從eax暫存器mov到ebx暫存器

3.常數/立即數前面要加$,如mov $4, %ebx  

4.對於變數加$表示取位址。如mov value,%ebx表示傳值給ebx,而mov $value, %ebx表示傳位址給ebx.

5.運算元長度通過在命令後加字尾實現,如movb,movl等。b(byte 8bit),w(word 16bit),l(long  32bit)

6.絕對轉移和呼叫指令運算元前要加上*作為字首

7.遠轉移和遠呼叫指令的操作碼分別為ljump和lcall。在intel分別為jmp far和cal  far。

at&t格式  ljump ssection,$offset       lret $stack_adjust

intel格式    jmp far section:offset      ret far stack_adjust

8.定址方式

at&t格式  section:disp(base,index,scale)   表示位址base+index*scale+disp

intel格式    section:[base+index*scale+disp]   表示方法比較直接

9.嵌入彙編語句格式 a b c d s d r 0分別表示暫存器eax,ebx,ecx,edx,esi,edi,任何暫存器,與前面相同的暫存器。

_asm_("asm statements":outputs:inputs:registers-modified);後面三個為可選項。分別為輸出變數,輸入變數,會被修改或被使用的的暫存器。

例如: _asm_("pushl %%eax \n\t","movl $0,%%eax \n\t","popl %%eax");//兩個%%是因為該語句被編譯器進行轉義處理後僅剩下乙個%。

_asm_("push %%fs \n\t","movw %%eax,%%fs \n\t","movb %%fa:%2,%%al \n\t":=a(_res):"0"(seg):"m"(*addr));//輸出為把eax內容傳給res,輸入為把seg的內容傳給eax,可修改的內容為addr所代表的記憶體位址(m表示memory)

int main() 列印結果a1和b1都為10.

ATT 彙編語法

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

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

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

Linux下AT T彙編語法格式簡介

一 at t 格式linux 彙編語法格式 在 at t 彙編格式中,暫存器名要加上 作為字首 而在 intel 彙編格式中,暫存器名不需要加字首。例如 at t格式 intel格式 pushl eax push eax 在 at t 彙編格式中,用 字首表示乙個立即運算元 而在 intel 彙編格...