アセンブラ命令メモ

■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]