1. 第一個 operand 為 source, 第二個為 destination (和 Intel 的剛好相反).
將 EAX寄存器的內容拷貝到 EBX:
movl %eax, %ebx
2. 寄存器的名字前要加上 %
3. 立即數前面加上 $. 靜態 C語言變數也加首碼 $
4. operand 的大小通過operator 的最後一個字元(b,w,l)來確定。b: 1 byte; w: 2 bytes; l: 4 bytes
5. memory 操作:
section:disp(base, index, scale)
相當與 intel 的
section:[base + index*scale + disp]
對於用作 scale 和 disp的常量,不用加首碼 $
下面是 Intel 和 AT&T 格式的 assembly code 的對比:
+------------------------------+------------------------------------+| Intel Code | AT&T Code |+------------------------------+------------------------------------+| mov eax,1 | movl $1,%eax | | mov ebx,0ffh | movl $0xff,%ebx | | int 80h | int $0x80 | | mov ebx, eax | movl %eax, %ebx || mov eax,[ecx] | movl (%ecx),%eax || mov eax,[ebx+3] | movl 3(%ebx),%eax | | 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 || sub eax,[ebx+ecx*4h-20h] | subl -0x20(%ebx,%ecx,0x4),%eax |