移動命令

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オペランドで指定したレジスタの中に、その計算されたアドレスを保存する

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年08月25日 02:16
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。