반응형
분기문 (if)
특정 조건에 따라서 코드 흐름을 제어하는 것
ex) 스킬 버튼 눌렀는가? YES -> 스킬 사용
조건체크 -> 흐름
CMP dst, src (dst가 기준) CMP = Compare
x,% 는 지정된 레지스터에 저장
CMP또한 결과물은 Flag Register에 저장
JUMP [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에 의해 점프를 안했다면, 같지 않다는 의미
; rax와 rbx의 값이 같다면 [ LABEL_EQUAL: ]로 JUMP!
mov rcx, 0
jmp LABEL_EQUAL_END
LABEL_EQUAL:
mov rcx, 1
LABEL_EQUAL_END:
PRINT_HEX 1, rcx
NEWLINE
;연습문제 : 어떤 숫자 (1~100)가 짝수면 1, 홀수면 0을 출력하는 프로그램
GET_DEC 1, ax
mov bl, 2
div bl
cmp ah, 0
; LABEL 이름은 자유롭게~
je LABEL_EQUAL // ah랑 0이 같은 값이면 13줄로 점프!
mov rcx, 0
JMP LABEL_JUMP // 14줄로 가면 안되니까 16줄로 점프!
LABEL_EQUAL:
mov rcx, 1
LABEL_JUMP:
PRINT_DEC 1, rcx
NEWLINE
반응형
LIST
'어셈블리' 카테고리의 다른 글
어셈블리 배열과 주소 (0) | 2022.08.11 |
---|---|
어셈블리 반복문 (0) | 2022.08.11 |
어셈블리 논리연산 (0) | 2022.08.10 |
어셈블리 시프트연산 (0) | 2022.08.10 |
어셈블리 사칙연산 (0) | 2022.08.10 |