Montaż - pętle
Do implementacji pętli można użyć instrukcji JMP. Na przykład poniższego fragmentu kodu można użyć do wykonania treści pętli 10 razy.
MOV CL, 10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
Zestaw instrukcji procesora zawiera jednak grupę instrukcji pętli do implementacji iteracji. Podstawowa instrukcja LOOP ma następującą składnię -
LOOP label
Gdzie etykieta jest etykietą docelową, która identyfikuje instrukcję docelową, tak jak w instrukcjach skoku. Instrukcja LOOP zakłada, żeECX register contains the loop count. Gdy wykonywana jest instrukcja pętli, rejestr ECX jest zmniejszany, a sterowanie przeskakuje do etykiety docelowej, aż wartość rejestru ECX, tj. Licznik osiągnie wartość zero.
Powyższy fragment kodu można zapisać jako -
mov ECX,10
l1:
<loop body>
loop l1
Przykład
Poniższy program drukuje cyfry od 1 do 9 na ekranie -
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
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
123456789: