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ãn là nhã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: