MOV
MOV {destinattion} {source}
メモリ参照
mov ax, [bar] ;アドレスbarにある値をAXに移動する
mov ax, bar ;値barをAXに移動する
mov eax, [ebp+8] ;ebp+8にある値をeaxに移動する
※すぐに値が計算できる即値でなければならない
メモリからメモリへは直接値をコピーできない
ダメな例
mov byte[x], [y]
良い例
mov dl, [y]
mov [x], dl
※通常はMOVSを使う。
また、destination operandにメモリを指定したとき、サイズ単位がわからないので、明示する
ダメな例
mov [x], 8
良い例
mov byte[x], 8
mov word[x], 8
XCHG
source operand <-> destination operandの交換
例
xchg dl, [msg+1] ;msg+1の内容とdlを交換する
xchg al, ah ;alとahの内容を交換する
ポップとプッシュ
POPで取り出されるデータは
16bitの場合は[SS:SP], 32ビットの値は[SS:ESP]の値
PUSHAとPOPA
すべての汎用レジスタ AX,CX,DX,BX,SP,BP,SI,DIを連続してスタックにプッシュする
16bit環境では、スタックポインタは合計で16bitだけデクリメントされる2*8
32bit環境では、EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDIで合計32bit(4*8bit)だけデクリメントされる
※スタックはマイナス方向に延びる
PUSHFとPOPF
PUSHFはフラグレジスタ全体をプッシュする
範囲を明示的に示す場合は、PUSHFW,またはPUSHFDを使う
ロードとストア
ロード: レジスタにデータを読み込む
ストア: レジスタのデータをほかの場所に保存する
LAHFとSAHF
LAHF(Load AH from Flags)はフラグをAHにロード => フラグレジスタの内容をAHレジスタにセットする
SAHF(Store AH to Flags)はAHの値をフラグに保存する
例)
mov ah, 10010011b ;AHレジスタにフラグを設定したい値をセットする
sahf ;フラグの値をAHレジスタから読み込む
lahf ;フラグをAHレジスタにロードする
push ah ;ahレジスタの内容をプッシュする
(AHやフラグを使って何かする)
pop ah ;ahレジスタの内容をポップする
sahf ;フラグの内容をahレジスタから読み込む
LDSとLES
LDS(Load far pointer to DS and register)
LES(Load far pointer to ES and register)
メモリから1回で16bitオフセットと16bitのセグメントをロードする
32bit環境では、
32bitオフセットと16bitのセグメントをロードする
LEA(Load Effective Address) 有効アドレスをロードする
例)
LEA (レジスタ), (メモリ)
source -> memory
dest -> register
※メモリの内容にはアクセスしない 第2オペランドで指定された有効アドレスを計算し、第1オペランドで指定したレジスタの中に、その計算されたアドレスを保存する
最終更新:2009年08月25日 02:16