Assemblage - Boucles
L'instruction JMP peut être utilisée pour implémenter des boucles. Par exemple, l'extrait de code suivant peut être utilisé pour exécuter le corps de la boucle 10 fois.
MOV CL, 10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
Le jeu d'instructions du processeur comprend cependant un groupe d'instructions de boucle pour la mise en œuvre de l'itération. L'instruction LOOP de base a la syntaxe suivante -
LOOP label
Où, étiquette est l'étiquette cible qui identifie l'instruction cible comme dans les instructions de saut. L'instruction LOOP suppose que leECX register contains the loop count. Lorsque l'instruction de boucle est exécutée, le registre ECX est décrémenté et la commande saute à l'étiquette cible, jusqu'à ce que la valeur du registre ECX, c'est-à-dire que le compteur atteigne la valeur zéro.
L'extrait de code ci-dessus pourrait être écrit comme suit:
mov ECX,10
l1:
<loop body>
loop l1
Exemple
Le programme suivant imprime le nombre 1 à 9 sur l'écran -
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
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
123456789: