VCのインラインアセンブラでC言語のマクロが使えない・・・

解決:一つ一つの命令に_asmをつければ#defineしたインラインアセンブラ構文も認識してくれるらしいですよ。hoshu氏に感謝。
例:


#define MD5_VC_MMX_F3(d,x,y,z)\
_asm pxor y,z\
_asm pxor x,y\
_asm movq d,x
以下、解決前の記事


/* #define MD5_VC_MMX_F1(x, y, z) (x & y | ~x & z) non optimize*/

/**
#define MD5_VC_MMX_F1(x, y, z) (z ^ (x & (y ^ z)))
d:dest x:mm0 y:mm1 z:mm2
*/

#define MD5_VC_MMX_F1(d,x,y,z)\
pxor y,z\
pand x,y\
pxor z,x\
movq d,z

#define MD5_VC_MMX_F2(d,x, y, z) MD5_VC_MMX_F1(d,z, x, y)

///#define MD5_VC_MMX_F3(x, y, z) (x ^ y ^ z)
#define MD5_VC_MMX_F3(d,x,y,z)\
pxor y,z\
pxor x,y\
movq d,x



///#define MD5_VC_MMX_F4(x, y, z) (y ^ (x | ~z))
#define MD5_VC_MMX_F4(x,y,z)\
pandn z,0xFFFFFFFFFFFFFFFF\
por x,z\
pxor y,x\
movq d,y




/* This is the central step in the MD5 algorithm.
#define MD5_VC_MMX_STEP(f, w, x, y, z, data, s) \
( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
core rotate plus
*/

///out w
///w += f(x, y, z) + data
#define MD5_VC_MMX_CORE(temp,w,f,x,y,z,data)\
f(temp,x,y,z)\
paddd temp,data\
paddd w,temp

///out d
///w = w<<s | w>>(32-s)
#define MD5_VC_MMX_ROTATE(d,w,s)\
movq d,w\
psllq d,s\
psrlq w,32-s\
por d,w

///out w
#define MD5_VC_MMX_PLUS(w,x)\
paddd w,x

///lastout w,temp
#define MD5_VC_MMX_STEP(f, w, x, y, z, data, s,temp) \
MD5_VC_MMX_CORE(temp,w,f,x,y,z,data)\
MD5_VC_MMX_ROTATE(temp,w,s)\
MD5_VC_MMX_PLUS(temp,x)\
movq w,temp

見たいなの定義して__asm{ }内で使ったのですが、上手く認識してくれんのです。orz
やっぱり素直にMASMとかNASMとか使うべきなのかなぁ〜
どれで記述するのがいいんでしょう?皆さんならどれにします?
硬派にインラインアセンブラ?(マクロ展開する)もしくはMASM,NASM?