ジャンプ命令

ジャンプ命令
命令 意味
jz jump if zero
jne jump if not zero
below/above系のジャンプ命令
符号なしで比較した結果とみなす.
jb jump if below
ja jump if above
jbe jump if below or equal
jae jump if above or equal
less/greater系のジャンプ命令
符号付きの演算結果とみなして,ジャンプするかどうかを決める.
jl jump if less
jg jump if greater
jle jump if less or equal
jge jump if greater or equal

IP:インストラクションポインタ

8086のインストラクションポインタに対しては,mov命令で値をセットすることはできない. ジャンプ,コール,リターンおよび割り込み命令の4種類の操作でしか値を変えることができないようになっている.

ジャンプ命令のオペランドは8086では必ず相対アドレスに変換される

8086では,アセンブリ言語ソースでjmp 1234のように絶対アドレスを指定していても, このjmp命令の次の命令からの指定されたアドレスまでのオフセット(つまり相対アドレス)に変換されるようになっている. 8086のジャンプ命令はすべて,指定されたアドレスを相対アドレスと解釈するようになっている.

LOOP命令

CXレジスタをデクリメントし,結果が0でなければ指定されたアドレスにジャンプする.

ショートジャンプとニアジャンプ

相対アドレスで1バイトであらわせる範囲内のジャンプをショートジャンプ, 2バイトで表す範囲内へのジャンプをニアジャンプという. 条件ジャンプ(LOOPを含む)はすべてショートジャンプになっている. ヒューリスティックな考え方ではあるけど, 条件ジャンプというのは,たいていの場合if文のような文脈で生成されるものなので, ジャンプ先はごく近く(ショートジャンプであらわせる範囲)に限られているだろうというのは たぶん正しい. ジャンプ先がショートジャンプでは届かない位置にあるときは, ショートジャンプ範囲内のどこかに無条件ジャンプ命令をおいて,そこを中継して目的地に到着するようにする.

無条件ジャンプ命令(jmp命令)はニアジャンプになるが, 飛び先がショートジャンプの範囲内にあるときは, jmp short labelとすることでショートジャンプに変更することもできる. 実行速度には影響はない(ショートジャンプにしても速くなるわけではない)が, オブジェクトファイルのサイズが微妙に小さくなる.


はたいたかし
May 5, 2006.
トップ > 開発ツール > 8086