어셈블리어 조건코드 CMP TEST 조건부 점프 [Kraken Jungle 19일차]
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

어셈블리 제어문 [크래프톤 정글 19일차] 요약

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • *소프트웨어 개발자, 저수준 프로그래밍 학습자**
  • 난이도: 중급 (어셈블리 언어 기초 지식 필요)

핵심 요약

  • 조건코드(ZF, SF, OF, CF)는 연산 결과를 기반으로 플래그 레지스터에 저장되어 조건 실행을 결정함
  • CMP는 값 비교, TEST는 비트 마스크 검사를 위한 명령어로, 연산 결과는 저장되지 않음
  • SET, JMP, CMOVE 명령어는 조건코드를 활용해 조건부 실행/데이터 이동을 구현함

섹션별 세부 요약

1. 조건코드 이해

  • ZF(Zero Flag): 연산 결과가 0인지 판단
  • SF(Sign Flag): 결과가 음수인지 판단
  • OF(Overflow Flag): 2의 보수 표현 오버플로우 여부 확인
  • CF(Carry Flag): 비부호형 오버플로우 여부 확인
  • ADD, SUB, CMP 등 연산 명령어 실행 시 플래그 레지스터에 저장됨

2. CMP와 TEST 명령어 비교

  • CMP: a - b 연산 후 플래그 설정 (크기 비교에 주로 사용)
  • TEST: a & b 연산 후 플래그 설정 (값 0 여부 또는 비트 마스크 검사)
  • 예시: cmp %rax, %rbxrbx - rax 비교, test %rax, %rax%rax == 0 검사

3. 조건코드 활용 예제

  • SET 명령어: 조건에 따라 0 또는 1을 레지스터에 저장

- 예: sete %cl → ZF == 1일 때 cl = 1

  • JMP 명령어: 조건에 따라 프로그램 흐름 제어

- 예: jl less_labelrax < rbx일 때 less_label로 이동

  • CMOVE 명령어: 조건 충족 시 데이터 이동

- 예: cmove %rdx, %rax → ZF == 1일 때 rax = rdx

4. 조건부 접미사 의미

  • e/z: ZF == 1 (값이 같을 때)
  • g/ge: SF == OF 조건 (signed 비교)
  • a/ae: CF == 0 조건 (unsigned 비교)
  • s/ns: SF == 1 또는 0 (결과의 부호 판단)

5. 실사용 예제

  • cmp %rbx, %rax → ZF == 1일 때 sete %clcl = 1
  • test %rdi, %rdirdi == 0일 때 cmove %rdx, %raxrax = 0
  • 예제 결과: 두 값이 같으면 1, 다르면 0 반환

결론

  • 조건코드와 CMP, TEST 명령어를 통해 조건부 실행을 구현하고, SET, JMP, CMOVE를 활용해 효율적인 어셈블리 코드를 작성할 수 있음
  • 플래그 레지스터를 이해하고, 조건부 접미사의 조합을 활용해 복잡한 논리 처리 가능
  • 실무 예제에서 cmp, test, cmove 사용법을 직접 적용해보며 익히기 권장