Perakitan - Loop

Instruksi JMP dapat digunakan untuk mengimplementasikan loop. Misalnya, cuplikan kode berikut dapat digunakan untuk menjalankan loop-body 10 kali.

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

Set instruksi prosesor, bagaimanapun, termasuk sekelompok instruksi loop untuk mengimplementasikan iterasi. Instruksi LOOP dasar memiliki sintaks berikut -

LOOP 	label

Dimana, label adalah label target yang mengidentifikasikan instruksi target seperti pada instruksi lompat. Instruksi LOOP mengasumsikan bahwaECX register contains the loop count. Ketika instruksi loop dijalankan, register ECX dikurangi dan kontrol melompat ke label target, sampai nilai register ECX, yaitu, penghitung mencapai nilai nol.

Potongan kode di atas dapat ditulis sebagai -

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

Contoh

Program berikut mencetak angka 1 hingga 9 di layar -

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

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

123456789: