←練習問題へ :  INDEX :  次へ→



4-5.ループ ( Loop )
  
     他の言語でも大抵ループ命令がある。(C言語では「for」「while」「do...while」、 N88-BASICでは「for....next」)アセンブラでも極々簡単なループ命令がある。

LOOPループ (繰り返し)

LOOP	SRC

   動作:(E)CX=(E)CX-1(ただしフラグは不変)、(E)CX≠0ならSRCにショートジャンプ
  影響を受けるフラグ:なし
    SRC1:即値
   次のように書き換えも可能である。(ただしフラグは考慮しない)
	dec	cx(ecx)		
	loop	SRC

例:'A'を20個表示させる。
START:
	mov	cx,20
	mov	dl,'A'
PL1:
	mov	ah,2
	int	21h
	loop	PL1

	mov	ax,4c00h
	int	21h
   これは上で述べたように、以下のように書き換えることができる。
START:
	mov	cx,20
	mov	dl,'A'
PL1:
	mov	ah,2
	int	21h
	dec	cx
	jnz	PL1

	mov	ax,4c00h
	int	21h
以下、「LOOP」命令での注意を挙げる。
  • ショートジャンプなので、±約128バイトまでしかジャンプできない。
    →減算命令と条件ジャンプを使い、できるだけサブルーチンを作る)
  • (E)CXが0の時は216(232)回ループするので注意する。
    JCXZ,JECXZで事前に抜ける
  • 処理中で(E)CXレジスタを破壊しない。
    PUSH,POP命令を用いるか変数に入れる
  • ループ内の処理中に条件分岐(JZ,JA等)でループを抜け出してもかまわない。

←練習問題へ :  INDEX :  次へ→