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: