アセンブラ命令メモ
■XCHG命令(Exchange)
第1オペランド(ディスティネーション)で指定されたデータ(レジスタ、又は、メモリ)と、第2オペランド(ソース)で指定されたデータ(レジスタ、又は、メモリ)を交換する
構文 xchg [destination] [source]
例文 xchg ax, bx
■LEA命令(Load Effective Address)
第1オペランド(ディスティネーション)で指定された場所(レジスタ)に、第2オペランド(ソース)で指定されたデータ(メモリ)のオフセットアドレスを転送する
構文 lea [destination] [source]
例文 lea si, [ebp-0x40]
■REP命令(Repeat String Operation Prefix)
カウンタレジスタ(CX)に指定された回数(0にデクリメントされる迄)、ストリング命令を繰り返す。
ストリング命令は、INS、MOVS、OUTS、LODS、STOS、CMPS、SCAS など
構文 rep [Mnemonic]
例文 rep stos DWORD PTR es:[edi],eax
例文の実行前が ecx=15 eax=0x0 edi=0xffffcff8 とする。例文の1行でediに格納されたアドレスにeaxの値を15回コピーする。実行後は ecx=0 eax=0x0 edi=0xffffd030 となり 0xffffcff8 ~ 0xffffd030 に 0x0 が書き込まれた。edi が自動で加算された理由は不明(es:[edi] の記述の意味も分からないが関係しているのかも?)
■stos命令(Store String)
■JA命令
より上(CF = 0 & ZF = 0)
■JAE命令
より上か等しい(CF = 0)
■JB命令
より下(CF = 1)
■JBE命令
より下か等しい(CF = 1 | ZF = 1)
■JC命令
キャリーがある(CF = 1)
■JCXZ命令
CXレジスタが0
■JE命令
等しい(ZF = 1)
■JG命令
より大きい(ZF = 0 & SF = OF)
■JGE命令
より大きいか等しい(SD = OF)
■JL命令
より小さい(SF ! OF)
■JLE命令
より小さいか等しい(ZF = 1 | SF ! OF)
■JNA命令
より上でない(CF = 1 | ZF = 1)
■JNAE命令
より上でなく等しい(CF = 1)
■JNB命令
より下でない(CF = 0)
■JNBE命令
より下でなく等しい(CF = 0 & ZF = 0)
■JNC命令
キャリーがない(CF = 0)
■JNE命令
等しくない(ZF = 0)
■JNG命令
より大きくない(ZF = 1 | SF ! OF)
■JNGE命令
より大きくなく等しくない(SF ! OF)
■JNL命令
より小さくない(SF = OF)
■JNLE命令
より小さくなく等しくない (ZF = 0 & SF = OF)
■JNO命令
オーバーフローがない(OF = 0)
■JNP命令
パリティがない(PF = 0)
■JNS命令
符号がない(SF = 0)
■JNZ命令
ゼロではない(ZF = 0)
■JO命令
オーバーフローがある(PF = 1)
■JP命令
パリティがある(PF = 1)
■JPE命令
パリティが偶数(PF = 1)
■JPO命令
パリティが基数(PF = 0)
■JS命令
符合がある(SF = 1)
■JZ命令
ゼロである(ZF = 1)
■XOR命令
第1オペランド(格納先)を第2オペランド(読み込み元)との間のビット単位のXOR(排他的論理和)演算を行い、結果を第1オペランド(格納先)に格納します。
構文 xor [destination] [source]
例文 xor eax, [ebp-0x40]