1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
%include "io64.inc"
 
section .text
global CMAIN
CMAIN:
    mov rbp, rsp; for correct debugging
 
    ; 반복문 (while for)
    ; 특정 조건을 만족할 때까지 반복해서 실행~
    
    ; ex) Hello World를 10번 출력해야 한다면?
    
    mov ecx, 10
    
    
 LABEL_LOOP:
    PRINT_STRING msg
    NEWLINE
    dec ecx ; sub ecs, 1과 동일
    cmp ecx, 0
    jne LABEL_LOOP
    
    ; 연습 문제) 1에서 100까지의 합을 구하는 프로그램 1+2+3+4+...+100 = ?
    mov eax, 100 ; 최종 목적지
    xor ebx, ebx ; mov ebx, - ebx: ,결과물
    xor ecx, ecx
 
LABEL_SUM:
    inc ecx ; add ecs, 1과 동일
    add ebx, ecx  
    cmp ecx, eax
    jne LABEL_SUM
    
    PRINT_DEC 4, ebx 
    NEWLINE
    
    ; loop [라벨]
    ; -ecs에 반복 횟수
    ; -loop 할 때마다 ecx 1 감소. 0이면 빠져나감. 아니면 라벨로 이동
    
    mov ecx, 100
LABEL_LOOP_SUM:
    add ebx, ecx
    loop LABEL_LOOP_SUM
    
    PRINT_DEC 4, ebx 
    NEWLINE
    
    xor rax, rax
    ret
    
    ; 초기화 되지 않은 데이터
    ;[변수이름] [크기] [개수]`
    ;[크기] resb(1) resw(2) resd(4) resq(8)
 
 section .data
    msg db 'Hello World'0x00
    ; 초기화 되지 않은 데이터
    ;[변수이름] [크기] [개수]`
    ;[크기] resb(1) resw(2) resd(4) resq(8)
 
 section .bss
    e resb 10
    
cs