アセンブリ-ループ

JMP命令は、ループの実装に使用できます。たとえば、次のコードスニペットは、ループ本体を10回実行するために使用できます。

MOV	CL, 10
L1:
<LOOP-BODY>
DEC	CL
JNZ	L1

ただし、プロセッサ命令セットには、反復を実装するためのループ命令のグループが含まれています。基本的なLOOP命令の構文は次のとおりです。

LOOP 	label

ここで、labelは、ジャンプ命令のようにターゲット命令を識別するターゲットラベルです。LOOP命令は、ECX register contains the loop count。ループ命令が実行されると、ECXレジスタがデクリメントされ、ECXレジスタ値、つまりカウンタが値ゼロに達するまで、制御がターゲットラベルにジャンプします。

上記のコードスニペットは、次のように記述できます。

mov ECX,10
l1:
<loop body>
loop l1

次のプログラムは、画面に1から9までの数字を出力します-

section	.text
   global _start        ;must be declared for using gcc
	
_start:	                ;tell linker entry point
   mov ecx,10
   mov eax, '1'
	
l1:
   mov [num], eax
   mov eax, 4
   mov ebx, 1
   push ecx
	
   mov ecx, num        
   mov edx, 1        
   int 0x80
	
   mov eax, [num]
   sub eax, '0'
   inc eax
   add eax, '0'
   pop ecx
   loop l1
	
   mov eax,1             ;system call number (sys_exit)
   int 0x80              ;call kernel
section	.bss
num resb 1

上記のコードをコンパイルして実行すると、次の結果が得られます。

123456789: