インラインアセンブラ

486 レジスタ
レジスタ名 データサイズ(bit) 説明
eax
ebx
ecx
edx
esi
edi

486命令一覧
命令コード オペランド データサイズ(bit) 機能
mov ope1,ope2 8,16,32 データ転送
movzx ope1,ope2 8,16,32 データ転送。例、mov eax,dx;//eax:0xF87A53C6,dx:0xFF88 → eax:0x0000FF88
inc ope1 8,16,32 インクリメント。キャリーフラグに影響しない。
dec ope1 8,16,32 デクリメント。キャリーフラグに影響しない。
add ope1,ope2 8,16,32 たしざん
sub ope1,ope2 8,16,32 ひきざん
or ope1,ope2 8,16,32 OR演算
and ope1,ope2 8,16,32 AND演算
test ope1,ope2 8,16,32 andをやってフラグ変化だけ残す。ope1に戻さない
xor ope1,ope2 8,16,32 XOR演算
not ope1 8,16,32 全ビットを反転
shl ope1,ope2 8,16,32 左ビットシフト。ope2には1(即値)かclのどちらか
shr ope1,ope2 8,16,32 右ビットシフト。ope2には1(即値)かclのどちらか
rol ope1,ope2 8,16,32 左ローテート。ope2には1(即値)かclのどちらか
ror ope1,ope2 8,16,32 右ローテート。ope2には1(即値)かclのどちらか
cmp ope1,ope2 8,16,32 ope1からope2を引く(比較)。ope1に戻さない
jmp ope1 32 無条件ジャンプ
jz ope1 32 ゼロフラグ1でジャンプ
jc ope1 32 キャリーフラグ1でジャンプ
ja ope1 32 キャリー、ゼロともに0でジャンプ
jbe ope1 32 キャリー、ゼロいずれか1でジャンプ
jcxz ope1 32 cxが0でジャンプ
loop ope1 32 cxを-1して0以外でジャンプ
push ope1 16,32 スタックへ退避
pop ope1 16,32 スタックから取り出し
nop --- --- なにもしない(1命令分やり過ごす)
xchg ope1,ope2 8,16,32 ope1,ope2の値を入れ替える
cpuid --- --- eaxの値をチェックしてeax,edxに値を入れる。
補足1:ジャンプ命令(jcxz,loopなどを除く)はjの後ろに"n"を入れると条件反転。jaとjbeは対の関係だが、分けて考えたほうがいい場合あり。
補足2:ジャンプ命令のオペランドには99%以上の確率でラベルを入れることになります。ラベル以外を入れることもできなくはないっぽいですが、やめましょう。
補足3:cpuidで返ってくる値はCPU情報です。ベンダIDやらなにやらが返ってきます。MMX対応を調べるにはedxの23ビット目がセットされてるか調べてあげます。

参考

http://kmkz.jp/mtm/mag/code/asm.html