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: