조립-루프
JMP 명령어는 루프를 구현하는 데 사용할 수 있습니다. 예를 들어 다음 코드 조각은 loop-body를 10 번 실행하는 데 사용할 수 있습니다.
MOV CL, 10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
그러나 프로세서 명령어 세트에는 반복을 구현하기위한 루프 명령어 그룹이 포함되어 있습니다. 기본 LOOP 명령어는 다음과 같은 구문을 갖습니다.
LOOP label
여기서 label 은 점프 명령에서와 같이 대상 명령을 식별하는 대상 레이블입니다. LOOP 명령어는ECX register contains the loop count. 루프 명령이 실행되면 ECX 레지스터가 감소하고 컨트롤이 ECX 레지스터 값, 즉 카운터가 값 0에 도달 할 때까지 대상 레이블로 점프합니다.
위의 코드 조각은 다음과 같이 작성할 수 있습니다.
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: