Perakitan - Loop
Instruksi JMP dapat digunakan untuk mengimplementasikan loop. Misalnya, cuplikan kode berikut dapat digunakan untuk menjalankan loop-body 10 kali.
MOV CL, 10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
Set instruksi prosesor, bagaimanapun, termasuk sekelompok instruksi loop untuk mengimplementasikan iterasi. Instruksi LOOP dasar memiliki sintaks berikut -
LOOP label
Dimana, label adalah label target yang mengidentifikasikan instruksi target seperti pada instruksi lompat. Instruksi LOOP mengasumsikan bahwaECX register contains the loop count. Ketika instruksi loop dijalankan, register ECX dikurangi dan kontrol melompat ke label target, sampai nilai register ECX, yaitu, penghitung mencapai nilai nol.
Potongan kode di atas dapat ditulis sebagai -
mov ECX,10
l1:
<loop body>
loop l1
Contoh
Program berikut mencetak angka 1 hingga 9 di layar -
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
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
123456789: