การประกอบ - ลูป
คำสั่ง JMP สามารถใช้สำหรับการใช้งานลูป ตัวอย่างเช่นสามารถใช้ข้อมูลโค้ดต่อไปนี้เพื่อดำเนินการลูปบอดี้ได้ 10 ครั้ง
MOV CL, 10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
อย่างไรก็ตามชุดคำสั่งโปรเซสเซอร์ประกอบด้วยกลุ่มคำสั่งแบบวนซ้ำสำหรับการใช้งานการวนซ้ำ คำสั่ง LOOP พื้นฐานมีไวยากรณ์ต่อไปนี้ -
LOOP label
โดยที่labelคือเลเบลเป้าหมายที่ระบุคำแนะนำเป้าหมายตามคำแนะนำในการกระโดด คำสั่ง LOOP ถือว่าไฟล์ECX register contains the loop count. เมื่อดำเนินการคำสั่งแบบวนซ้ำการลงทะเบียน ECX จะถูกลดลงและตัวควบคุมจะกระโดดไปที่เลเบลเป้าหมายจนกระทั่งค่าการลงทะเบียน ECX นั่นคือตัวนับถึงค่าศูนย์
ข้อมูลโค้ดด้านบนสามารถเขียนเป็น -
mov ECX,10
l1:
<loop body>
loop l1
ตัวอย่าง
โปรแกรมต่อไปนี้จะพิมพ์หมายเลข 1 ถึง 9 บนหน้าจอ -
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
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -
123456789: