C++ Rookiss Part1 C++ 프로그래밍 입문 : 분기문과 반복문
🙇♀️분기문과 반복문
🪐분기문
- 분기문 (if)
- 특정 조건에 따라서 코드 흐름을 제어하는 것
- ex) 스킬 버튼을 눌렀는가? YES -> 스킬사용
- ex) 제한 시간 내에 던전 입장 수락 버튼을 눌렀는가? YES -> 입장, NO -> 던전 취소
CMP dst, src (dst가 기준)
-
비교를 한 결과물은 Flag Register 저장
- JMP [label] 시리즈
- JMP : 무조건 jump
- JE : JumpEquals 같으면 jump
- JNE : JumpNotEquals 다르면 jump
- JG : JumpGreater 크면 jump
- JGE : JumpGreaterEquals 크거나 작으면 jump
-
JL, JLE …
- 두 숫자가 같으면 1, 아니면 0을 출력하는 프로그램
mov rax, 10
mov rbx, 20
cmp rax, rbx
je LABEL_EQUAL
; je에 의해 점프를 안했다면, 같지 않다는 의미
mov rcx, 0
jmp LABEL_EQUAL_END
LABEL_EQUAL:
mov rcx, 1
LABEL_EQUAL_END:
PRINT_HEX 1, rcx
NEWLINE
- 연습 문제 : 어떤 숫자(1~100)가 짝수면 1, 홀수면 0을 출력하는 프로그램
mov ax, 100
cf) 나누기 연산
div reg
div bl => ax / bl (al몫 ah나머지)
- 풀이
mov bl, 2
div bl
cmp ah, 0
je L1
mov rcx, 0
jmp L2
L1:
mov rcx, 1
L2:
PRINT_HEX 1, rcx
NEWLINE
🪐반복문
- 반복문 (while for)
- 특정 조건을 만족 할 때까지 반복해서 실행
- ex) Hello World를 10번 출력해야 한다면?
mov ecx, 10 LABEL_LOOP: PRINT_STRING msg NEWLINE dec ecx ; sub ecx, 1과 동일 cmp ecx, 0 jne LABEL_LOOP
- 연습 문제) 1에서 100까지의 합을 구하는 프로그램 1+2+3+4…100 = ?
mov eax, 100 ; 최종 목적지
xor ebx, ebx ; mov ebx, 0 ebx: 결과물
xor ecx, ecx
LABEL_SUM:
inc ecx ; add ecx, 1과 동일
add ebx, ecx ;
cmp ecx, eax
jne LABEL_SUM
PRINT_DEC 4, ebx
NEWLINE
- loop [라벨]
- ecx에 반복 횟수
- loop 할때마다 ecx 1 감소. 0이면 빠져나감. 아니면 라벨로 이동
mov ecx, 100
xor ebx, ebx ; mov ebx, 0 ebx: 결과물
LABEL_LOOP_SUM:
add ebx, ecx
loop LABEL_LOOP_SUM