ジャンプ
FAR |
異なるコードセグメントの中のコードへジャンプ |
NEAR |
同じコードセグメントの中のコードへのジャンプ |
SHORT |
同じコードセグメントの中の相対オフセットで-128-127バイト以内のコードへのジャンプ |
条件付きジャンプ (Jcc)
例) cmp dl, 5Bh
jnz dispchr
JCXZとJECXZ
JCXZ |
CXレジスタの内容が0である場合にショートジャンプ |
JECXZ |
ECXレジスタの内容が0である場合にショートジャンプ |
例)
mov cx, N;
doit:
dec cx
jcxz endquit
jmp doit
endquit:
ループ
CXレジスタが0であるかどうかという条件のみ
例)
mov cx, N
doit:
loop doit ;CXがゼロでなければdoitにジャンプする
32ビットの場合は、ECXが使われる
条件付きループ
命令 |
概要 |
LOOPE |
等しい(ZF=1)ならば繰り返す |
LOOPNE |
等しくない(ZF=0)ならば繰り返す |
LOOPNZ |
ゼロでない(ZF=0)ならば繰り返す |
LOOPZ |
ゼロ(ZF=1)ならば繰り返す |
例)
mov dl, 41h
mov cx, 20h
doit:
int 21h
inc dl
cmp dl, 5Bh
loopne doit
サブルーチン
CALL -- 指定されたアドレスにジャンプしてサブルーチンを呼び出す
CALLが実行されると、現在のIP(Instruction Pointer)がスタックにプッシュされる。
呼び出しがfarコールのときは、IPとCSがプッシュされる
サブルーチンから戻る場合は、RET命令を使う
RET --- スタックからIPかEIPをポップして新しいアドレスに制御を移す。
第2オペランドに数値を指定した場合は、リターンアドレスをポップしたあとでさらに指定したバイトだけスタックポインタをインクリメントする (スタックを減らす '-'->'+')
パラメータの受け渡し
最終更新:2009年08月26日 00:39