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,%eaxmov 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
0 意見:
張貼留言