Montaj - Döngüler

JMP talimatı döngüleri uygulamak için kullanılabilir. Örneğin, aşağıdaki kod parçacığı döngü gövdesini 10 kez çalıştırmak için kullanılabilir.

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

Bununla birlikte, işlemci komut seti, yinelemenin gerçekleştirilmesi için bir grup döngü talimatını içerir. Temel LOOP komutu aşağıdaki sözdizimine sahiptir -

LOOP 	label

Nerede, etiket atlama talimatlarında olduğu gibi hedef talimatı tanımlayan hedef etikettir. LOOP talimatı,ECX register contains the loop count. Döngü komutu yürütüldüğünde, ECX kaydı azaltılır ve kontrol, ECX kayıt değeri, yani sayaç sıfır değerine ulaşıncaya kadar hedef etikete atlar.

Yukarıdaki kod parçacığı şu şekilde yazılabilir:

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

Misal

Aşağıdaki program ekrana 1'den 9'a kadar olan sayıları yazdırır -

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

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

123456789: