📂 예제 코드와 한 줄 한 줄 설명

%include "io64.inc"
  • SASM 환경에서 제공하는 매크로 파일
  • PRINT_HEX, NEWLINE 등 편의 기능 포함

🔔 코드 섹션 및 진입점 설정

section .text
global main
main:
    mov rbp, rsp ; for correct debugging
  • .text: 실행 코드 영역 지정
  • global main: 링커가 진입점으로 사용할 수 있도록 선언
  • mov rbp, rsp: 스택 프레임 설정 (디버깅 시 유용)

📌 분기문 (조건문) 개념 요약

분기문의 의미

  • 특정 조건에 따라 코드 흐름을 바꾸는 것
  • 대표적인 예:
    • 스킬 버튼 눌렀는가? YES → 스킬 사용 / NO → 무시
    • 던전 입장 시간 내 수락했는가? YES → 입장 / NO → 취소

CMP 명령어

명령어의미
CMP dst, srcdst - src 비교 (결과는 플래그 레지스터에 저장)

플래그 레지스터란?

  • 연산 결과나 상태를 저장하는 특수 레지스터
  • CMP 결과도 여기에 기록되어 이후 조건 판단에 사용

조건부 점프 (JMP 시리즈)

명령어의미
JMP무조건 점프
JE두 값이 같으면 점프 (Zero Flag = 1)
JNE다르면 점프
JGdst > src이면 점프
JGEdst >= src이면 점프
JLdst < src이면 점프
JLEdst <= src이면 점프

📌 예제 1 - 두 숫자 비교하여 같으면 1, 아니면 0 출력

mov rax, 10
mov rbx, 10
  • rax에 10 저장
  • rbx에 10 저장 (비교 대상)

cmp rax, rbx
  • 두 값 비교 (rax - rbx)
  • 결과는 플래그 레지스터에 저장

je LABEL_EQUAL
  • 같으면 LABEL_EQUAL로 점프

mov rcx, 0
jmp LABEL_EQUAL_END
  • 다르면 rcx = 0
  • 이후 LABEL_EQUAL_END로 강제 점프 (1 설정 회피)

LABEL_EQUAL:
    mov rcx, 1
  • 같으면 점프해서 여기로 오고 rcx = 1

LABEL_EQUAL_END:
    PRINT_HEX 1, rcx
    NEWLINE
  • 결과 출력 (1이면 같음, 0이면 다름)
  • 줄바꿈

📌 예제 2 - 1~100 숫자 중 짝수면 1, 홀수면 0 출력

mov ax, 91
  • 테스트용 값 (91) 설정 (홀수)

mov bl, 2
div bl
  • 91을 2로 나눔
  • al = 몫, ah = 나머지 (여기서 나머지로 홀짝 판별)

cmp ah, 0
  • 나머지가 0인지 확인 (0이면 짝수)

je L1
mov rcx, 0
jmp L2
  • 0이면 짝수 → L1으로 점프
  • 아니면 홀수 → rcx = 0
  • 결과 출력 위치로 점프

L1:
    mov rcx, 1
  • 짝수일 때 도달 (짝수면 rcx = 1)

L2:
    PRINT_HEX 1, rcx
    NEWLINE
  • 결과 출력 (1=짝수, 0=홀수)

xor rax, rax
ret
  • 프로그램 종료 (정상 종료 위해 반환값 0 설정)

✅ 정리표 - 플래그 레지스터에 따른 분기 흐름

명령어설명조건
je두 값이 같을 때 점프ZF = 1
jne두 값이 다를 때 점프ZF = 0
jgdst > src일 때 점프ZF=0, SF=OF
jgedst >= src일 때 점프SF=OF
jldst < src일 때 점프SF≠OF
jledst <= src일 때 점프ZF=1 or SF≠OF

📌 CMP의 동작 흐름

단계설명
cmp a, b내부적으로 a - b 수행
결과플래그 레지스터에 결과 저장
다음 명령je 등 조건부 점프 명령으로 흐름 제어

🌱 분기문을 if로 표현하면?

if (rax == rbx) {
    rcx = 1;
} else {
    rcx = 0;
}

📌 나머지 연산으로 홀짝 판별

연산의미
mov ax, nn 설정
mov bl, 22로 나눔
div bl몫(al), 나머지(ah)
cmp ah, 0나머지가 0인지 비교
je짝수 처리
jne홀수 처리

profile
李家네_공부방

0개의 댓글