gasの場合は

intel式とgas式のひじょう~に簡単な対応表です. gasの場合, ソースの名前は***.sではなく***.Sにしてください. 後者ではC言語の強力なプリプロセッサが介在するためいろいろな機能が使えます. gasの場合も参照して下さい.

intel形式とgas形式の対応表
intel形式 gas形式
主な疑似命令
code segment
...
code ends
.text
data segment
...
data ends
.data
align 4 .align 4
WX equ 5 WX=5
if
...
else
...
endif
.if
...
.else
...
. endif
public function .globl function
ニーモニック一般
mov eax, ecx movl %ecx, %eax
mov ax, 5 movw $5, %ax
mov eax, WX movl $WX, %eax
mov ch, -24 movb $-24, %ch
mov eax, [esp+4] movl 4(%esp), %eax
[mem+eax+ecx*4] mem(%eax, %ecx, 4)
[mem+ecx*2] mem(,%ecx, 2)
push ds pushl %ds
cbw cbtw
cwde cwtl
cwd cwtd
cdq cltd
データーの指定方法
mem1: db 5 mem1: .byte 5
mem2: dw 12 mem2: .word 12
mem3: dd 13 mem3: .long 13
mem4: dq 20 mem4: .quad 20
mes: db 'Hello' mes: .ascii "Hello"
vmem: db 512 dup(255) vmem: .fill 512,1,255
buf: dd 100 dup(10) buf: .fill 100,4,10

その他 gasに移植することを予定しているのなら, MASM形式で有効なfadd (=faddp st,st(1) )やfmulは 使わない方がいいです. 混乱する原因となります(経験者は語る).

;for MASM
CLIP macro reg, X
    local L1
    cmp reg, X
    jb L1
    mov reg, X-1
L1:
    endm

localというのはこの命令内でのみ有効と言う意味です.

//for gas
#define CLIP(reg, X) \
    cmpl $X, %reg;\
    jb 1f;\
    movl $X-1, %reg;\
1:

1fというのはすぐ次のラベルへの前方参照という意味です. すぐ前のラベルへの参照は1bと書きます. 細かい分岐がたくさんあるときにラベル名を考えなくてすむので便利です. 残念ながらNASMにはありません. tasmだと使えるのに...

[追記:2010/6/29] gasのmacro命令を使う方法を教えていただきました. ありがとうございました.

.macro CLIP REG, X
       cmpl \X, %\REG
       jp 1f
       movl $\X-1, %\REG
 1:
.endm

func:
        CLIP eax, 5

御意見は光成滋生<herumi@nifty.com>までお願いします