AT T內聯彙編示例

2021-07-10 12:28:29 字數 1121 閱讀 5800

一、at&t 內聯彙編的語法格式

1、暫存器的引用方式

引用暫存器要在暫存器號前面加% 《==》intel彙編的引用暫存器前是不加% 的

例如:  mov %eax, %ebx

2、運算元的順序

運算元排列是從源(左)到目的(右),

例如: mov %eax, %ebx   ==>將暫存器eax內的資料拷貝到暫存器ebx

<==>intel會彙編的引用順序是從右到左的,和這個相反

3、常數、立即數的格式

使用立即數,要在立即數前面加$符號,例如, mov $1,%eax  =>給暫存器eax賦值1

使用常數,  mov  value, %eax  =>將常數value代表的數值賦值給暫存器eax

mov  $value, %eax =>將儲存常數value的記憶體位址賦值給暫存器eax

4、指令都是小寫字母

5、絕對轉移和呼叫指令(jmp/call)的運算元前要加上「*」作為字首

6、遠端指令轉移和遠端呼叫指令為ljmp 和 lcall

例如:ljmp $section,$offset;

lcall $section,$offset;

7、遠端返回指令  

lret $stack_adjust;

8、定址方式

格式: disp(base,index,scale)  ==>  disp+base+index*scale

例如:movl -4(%ebx), %eax   ==>  將  -4+%ebx 賦值給暫存器eax

movl array(,%ebx,4),%eax  ==>  將  array+%ebx*4賦值給暫存器eax

movl array(%ecx,%ebx,4),%eax  ==>將 array+%ecx+%ebx*4賦值給暫存器eax

9、內嵌彙編格式

__asm__("section1;\n\t"    //注意,前後分別有兩個--

"section2;\n\t"

"section3;\n\t"

:"=暫存器限定符"(變數名)   // 輸出

:"暫存器限定符"(變數名)     //輸入

:破壞描述部分 );

例項:int main()

AT T學習筆記彙編之內聯c語言

asm assembly code ansi c將asm用於其它用途,用 asm 替換 在asm後面加上 volatile可以禁止編譯器優化 asm volatile pusha n tpopa asm volatile pushl 1 n t 擴充套件asm asm asm code output...

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