標籤

Linux (2) 中原宿舍 (2) 網路 (2) CISCO (1) android (1) ubuntu (1) vim (1) windows (1) x10 (1) 冷知識 (1) 網路協議 (1) 網路工程 (1)

2010年10月11日 星期一

組合語言 AT&T Syntax 與 Intel/Microsoft Syntax 差別

order(來源與目標暫存器順序不同)
source在前面destination在後面


Intex Syntax                            AT&T Syntax

instr   dest,source                     instr   source,dest
mov     eax,[ecx]                       movl    (%ecx),%eax
 
 
register naming(暫存器命名)
AT&T前面要加個%
Intel Syntax                            AT&T Syntax

mov     eax,1                           movl    $1,%eax
mov     ebx,0ffh                        movl    $0xff,%ebx
int     80h                             int     $0x80
 
 
imme operand(立即定址命名)
AT&T前面要加個$
 
Intel Syntax                            AT&T Syntax

mov     eax,1                           movl    $1,%eax
mov     ebx,0ffh                        movl    $0xff,%ebx
int     80h                             int     $0x80 
 
 
memory reference(間接定址)
AT&T用小括號"()" 
 
Intel Syntax                           AT&T Syntax

mov     eax,[ebx+20h]                  movl    0x20(%ebx),%eax
add     eax,[ebx+ecx*2h]               addl    (%ebx,%ecx,0x2),%eax
lea     eax,[ebx+ecx]                  leal    (%ebx,%ecx),%eax
 
 
opcode naming(指令命名)
必需指定長度,根據系統而不一樣,word有的是32 bits有的是16 bits
b : byte
w : word
l : long

Intel Syntax                            AT&T Syntax

mov     al,bl                           movb    %bl,%al
mov     ax,bx                           movw    %bx,%ax
mov     eax,ebx                         movl    %ebx,%eax
mov     eax, dword ptr [ebx]            movl    (%ebx),%eax
 
type casting(型別轉換)
s  (signed)
z  (zero)
 
bl (from byte to long) 
bw (from byte to word) 
wl (from word to long)
 
movsbl %al, %edx
 
long jump,call與ret
 
Intel Syntax                            AT&T Syntax

jmp far seg:offsetljmp seg, offset

jmp far  INITSEG:GO                     ljmp $INITSEG, $GO
call far INITSEG:GO                     lcall $INITSEG, $GO
ret far  STACK_ADJUS                    lret $STACK_ADJUST 

註:GAS 亦可接受 Intel/Microsoft syntax 組合語言,只要指令後面寫「.intel_syntax noprefix」即可。

轉自 Study-Area