어셈블리

어셈블리 분기문

우대비 2022. 8. 11. 15:16
반응형

분기문 (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