만약 A가 B라면, C를 실행하고 아니면 D를 실행한다.
1. 조건 체크
CMP(Compare) dst(Destination), src(Source)
비교를 한 결과물은 Flag Register에 저장됨.
(1) JMP [label] 시리즈
JMP ; 무조건 Label 위치로 이동
JE ; Jump Equals, 같으면 Label 위치로 이동
JNE ; Jump Not Equals, 다르면 Label 위치로 이동
JG ; Jimp Greater, 크면 Label 위치로 이동
JGE ; Jump Greater Equals, 크거나 같으면 Label 위치로 이동
mov rax, 10 mov rbx, 20 cmp rax, rbx je LABEL_EQUAL ; rax와 rbx가 같으면 LABEL_EQUAL로 이동 mov rcx, 0 ; rax와 rbx가 같지 않으면 rcx에 0을 저장함 jmp LABEL_EQUAL_END ; LABEL_EQUAL_END로 이동 LABEL_EQUAL: mov rcx,1 ; rax와 rbx가 같으면 rcx에 1을 저장하고 출력함 PRINT_HEX 1, rcx ; rcx를 출력함 LABEL_EQUAL_END: PRINT_HEX 1, rcx ; rcx를 출력함 |
(2) eflags(Flag Register)
ZF ; 두 수의 차이가 0일 때
연습문제 : 어떤 숫자(0~100)가 짝수면 1, 홀수면 0을 출력함
div bl => ax(몫) bl(나머지)
main: mov rbp, rsp ; for correct debugging mov rax, 0 ; 레지스터 초기화 GET_DEC 1, rax ; input을 rax에 저장 mov bl, 0b10 ; 나누는 수를 2로 지정 div bl cmp ah, 0 ; 나머지가 0인지 감별 je LABEL_EVEN mov rcx,0 PRINT_HEX 1, rcx NEWLINE jmp LABEL_END LABEL_EVEN: mov rcx, 1 PRINT_HEX 1, rcx NEWLINE LABEL_END: xor rax, rax ret |
'어셈블리' 카테고리의 다른 글
0-10. 배열과 주소(Array, Address) (0) | 2023.04.28 |
---|---|
0-9. 반복문(Loop) (0) | 2023.04.28 |
0-7. 시프트 연산과 논리 연산 (0) | 2023.04.28 |
0-6. 사칙연산 (0) | 2023.04.27 |
0-5. 문자와 엔디안 (0) | 2023.04.27 |