←前ページへ :  INDEX :  次ページへ→

分岐

4-1.無条件分岐 ( Jump Unconditionally )

無条件にlabel に分岐します。

無条件分岐とは、C言語やN88-BASICで言うgotoで、他の処理に移行する命令である。

JMP ( Jump Unconditionally ) :無条件分岐

JMP	DEST

   動作 :DESTが示す番地に処理を移行する
  DEST : 相対オフセット、即値、メモリ、レジスタ
  影響を受けるフラグ : なし

  DESTが示す番地に処理を移行します。一般には処理を移行したい場所にラベルをつけて、そのラベルにジャンプするようにします。
	jmp	FUNC2		;FUNC2に処理を移行する
FUNC1:
	  :
	  :
FUNC2:
	  :
	  :
	mov	ax,4c00h
	int	21h
	jmp	ax		;AXの内容の番地にジャンプする	
	jmp	0		;CSセグメントの0番地にジャンプする
	jmp	ds:100h		;ds:100h番地の内容の番地にジャンプする
  実は、jmp命令には3種類あります。「short jmp」と「near jmp」、「far jmp」である。

short jmp
現在のアドレスの-128〜+127番地以内へのジャンプで、即値を示した場合である。 shortジャンプであるとわかっている場合には「jmp short FUNC1」と記述することによって、アセンブラ(コンパイラ)によっては、実行形式プログラムの大きさが小さくなる場合がある。
near jmp
同じセグメント内でのジャンプ。上の例では「jmp ax」「jmp 0」「jmp ds:100h」が該当する。ほとんどのアセンブラではこれがデフォルトになっているが、特に「near jmp」であることを明記したい場合は「jmp near FUNC1」のように書く。
far jmp
異なるセグメントへのジャンプ。上の例には示していない。例えば、「jmp far 100h:200h」、「jmp far [ds:100h]」のように書く。前者ではセグメント100hの200h番地にジャンプする。後者は、ds:100h の内容が1234h、102h番地の内容が5678hの場合、セグメントが5678hの 1234h番地にジャンプする。

←前ページへ :  INDEX :  次ページへ→