彙編:AT&T與NASM的區別
阿新 • • 發佈:2018-11-12
暫存器:
通用暫存器: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不同.