การประกอบ - ลูป

คำสั่ง 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: