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: