1. 程式人生 > >彙編:AT&T與NASM的區別

彙編:AT&T與NASM的區別

暫存器:

通用暫存器:EAX,EBX,ECX,EDX,  用於操作資料;

AX,BX,CX,DX,暫存器的16位版本;

AH,BH,CH,DH,AL,BL,CL,DL暫存器的8位高位和低位位元組;

段暫存器:CS,SS,DS,ES,FS,GS,16位暫存器,存放著,記憶體地址的前半部分;存放著指向程式碼,棧和額外資料段的指標

偏移暫存器:EBP,指向函式的本地環境的起始位置; ESI,存放著使用記憶體塊的操作中的源資料的偏移

EDI,存放著使用記憶體塊的操作中目的資料偏移; ESP,指向棧頂的指標;

特殊暫存器:EFLAGS標誌暫存器.CPU用來跟蹤邏輯結果和處理器的狀態;

EIP 指向要執行的下一條指令的地址

AT&T:

主要由GNU彙編器,gcc編譯器條件中,Linux通常會使用這種形式.

NASM:

NASM格式許多用於windows彙編器和偵錯程式.

 

這兩種生成機器語言是完全一樣的,只是在風格上存在一些差異;

語法格式:

NASM語法 mov eax,51h;   AT&T語法:Movl $51h, %eax;

NASM是前面是暫存器,後面是資料,AT&T是資料在前資料,後面是暫存器;

AT&T在暫存器前面使用%符號,NASM不需要.

AT&T資料前面使用$符號,NASM不需要.

AT&T處理記憶體引用的方式與NASM不同.