Assembly - Vòng lặp

Lệnh JMP có thể được sử dụng để thực hiện các vòng lặp. Ví dụ: đoạn mã sau có thể được sử dụng để thực thi phần nội dung vòng lặp 10 lần.

MOV	CL, 10
L1:
<LOOP-BODY>
DEC	CL
JNZ	L1

Tuy nhiên, tập lệnh bộ xử lý bao gồm một nhóm các lệnh lặp để thực hiện lặp. Hướng dẫn LOOP cơ bản có cú pháp sau:

LOOP 	label

Trong đó, nhãnnhãn đích xác định lệnh đích như trong lệnh nhảy. Lệnh LOOP giả định rằngECX register contains the loop count. Khi lệnh lặp được thực hiện, thanh ghi ECX giảm dần và bộ điều khiển nhảy đến nhãn đích, cho đến khi giá trị thanh ghi ECX, tức là bộ đếm đạt đến giá trị bằng không.

Đoạn mã trên có thể được viết là -

mov ECX,10
l1:
<loop body>
loop l1

Thí dụ

Chương trình sau sẽ in số từ 1 đến 9 trên màn hình:

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

123456789: