조립-루프

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: