Assemblaggio - Loop

L'istruzione JMP può essere utilizzata per implementare i loop. Ad esempio, il seguente frammento di codice può essere utilizzato per eseguire 10 volte il corpo del ciclo.

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

Il set di istruzioni del processore, tuttavia, include un gruppo di istruzioni di ciclo per l'implementazione dell'iterazione. L'istruzione LOOP di base ha la seguente sintassi:

LOOP 	label

Dove, etichetta è l'etichetta di destinazione che identifica l'istruzione di destinazione come nelle istruzioni di salto. L'istruzione LOOP presuppone che il fileECX register contains the loop count. Quando viene eseguita l'istruzione di ciclo, il registro ECX viene decrementato e il controllo salta all'etichetta di destinazione, finché il valore del registro ECX, ovvero il contatore raggiunge il valore zero.

Lo snippet di codice sopra potrebbe essere scritto come:

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

Esempio

Il seguente programma stampa il numero da 1 a 9 sullo schermo:

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

123456789: