특정 조건을 만족할 때까지 반복해서 실행
ex) Hello World를 10번 출력해야 한다면?
mov ecx, 10 ; 통상적으로 카운팅과 관련된 건 ecx를 사용
LABEL_LOOP:
PRINT_STRING msg
NEWLINE
dec ecx ; sub ecx, 1과 동일하지만 좀 더 빨리 동작
cmp ecx, 0
jne LABEL_LOOP
section.data
msg db 'Hello World', 0x00
연습 문제) 1에서 100까지의 합을 구하는 프로그램 1+...+100 = ?
mov eax, 100 ; 최종 목적지
xor ebx, ebx ; mov ebx, 0 ebx : 결과물
xor ecx, ecx
LABEL_SUM:
inc ecx ; add ecx, 1과 동일
add ebx, ecx ; ebx = ebx + ecx
cmp ecx, eax
jne LABEL_SUM
PRINT_DEC 4, ebx
NEWLINE
ecx를 사용하지 않고 만든다면?
mov eax, 100 ; 최종 목적지
xor ebx, ebx ; mov ebx, 0 ebx : 결과물
LABEL_SUM:
add ebx, eax
dec eax
cmp eax, 0
jne LABEL_SUM
PRINT_DEC 4, ebx
NEWLINE
어셈블리어에서 cmp와 jump를 사용한 반복문을 좀 더 간단하게 하기 위한 별도의 문법이 존재한다.
C++로 코드를 만들어서 빌드 후 어셈블리 코드를 열어보면 가끔 등장하는 문법이다.
loop [라벨]
mov ecx, 100
xor ebx, ebx
LABEL_LOOP_SUM:
add ebx, ecx
loop LABEL_LOOP_SUM
PRINT DEC 4, ebx
NEWLINE