分岐とサブルーチン


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ジャンプ


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オペランドに数値を指定した場合は、リターンアドレスをポップしたあとでさらに指定したバイトだけスタックポインタをインクリメントする (スタックを減らす '-'->'+')

パラメータの受け渡し

  • 特定のメモリアドレスを使う sample
  • レジスタを使う sample
  • スタックを使う sample
ツールボックス

下から選んでください:

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