📂 전체 예제 코드 및 설명

%include "io64.inc"
  • SASM에서 제공하는 입출력 및 편의 매크로 포함
  • 이 안에 PRINT_HEX, NEWLINE 등이 정의되어 있음

🔔 기본 섹션 및 진입점 설정

section .text
global main
main:
    mov rbp, rsp ; 스택 프레임 설정 (디버깅 용이)
  • .text: 실행 코드 섹션
  • global main: 링커가 진입점으로 인식하게 지정
  • mov rbp, rsp: 현재 스택 상태 저장 (디버깅 편리)

📌 시프트 연산 - Shift Operation

초기값 설정

mov eax, 0x12345678
PRINT_HEX 4, eax
NEWLINE
  • eax에 16진수 값 저장
  • 현재 값 출력
  • 줄바꿈 출력

좌측 시프트 (shl)

shl eax, 8
PRINT_HEX 4, eax
  • eax를 왼쪽으로 8비트 이동 (값은 256배가 됨)
  • 이동 후 값 출력 (왼쪽 8비트 날아가고, 하위 8비트 0으로 채워짐)

우측 시프트 (shr)

shr eax, 8
PRINT_HEX 4, eax
NEWLINE
  • eax를 오른쪽으로 8비트 이동 (값은 1/256배)
  • 이동 후 값 출력 (오른쪽 8비트 날아가고, 상위 8비트는 0으로 채워짐)

💡 시프트 연산 요점 정리

명령어의미효과
shl reg, n좌측 시프트2^n 곱셈 효과
shr reg, n우측 시프트2^n 나눗셈 효과

📌 논리 연산 - Logical Operation

논리연산 개념 정리 (A, B를 조건으로 가정)

연산설명진리표
NOT반전1→0, 0→1
AND둘 다 1이어야 11 and 1 = 1
OR하나만 1이어도 11 or 0 = 1
XOR서로 다를 때만 11 xor 0 = 1

예제: 논리연산 실제 코드

mov al, 0b10010101
mov bl, 0b01111100
  • al에 10010101 저장
  • bl에 01111100 저장

AND 연산

and al, bl
PRINT_HEX 1, al
NEWLINE
  • al = al AND bl
  • 두 비트가 모두 1일 때만 1
  • 결과 출력
  • 줄바꿈 출력

NOT 연산

not al
PRINT_HEX 1, al
NEWLINE
  • al을 반전 (1↔0, 0↔1)
  • 결과 출력
  • 줄바꿈 출력

논리연산 정리 표

명령어동작비트 계산 결과
and al, blal과 bl ANDal = al & bl
or al, blal과 bl ORal = al | bl
xor al, blal과 bl XORal = al ⊕ bl
not alal 반전al = ~al

📌 비트플래그 응용 예제

mov al, 0b10010101
mov bl, 0b01111100
  • al에 비트플래그 세팅 (10010101)
  • bl에 다른 비트플래그 세팅 (01111100)

현재 값 출력

NEWLINE
PRINT_HEX 1, al
NEWLINE
  • 현재 al 값 확인

XOR 연산으로 상태 반전

xor al, bl
PRINT_HEX 1, al
NEWLINE
  • al의 각 비트를 bl의 비트와 XOR
  • XOR은 다르면 1, 같으면 0
  • 결과 출력

XOR 재적용 (원복)

xor al, bl
PRINT_HEX 1, al
NEWLINE
  • 동일한 값과 XOR 두 번 하면 원래 값 복원
  • 결과 출력

💡 XOR의 특징 정리

상황결과
a xor b원래 값과 다른 값으로 변환
a xor b xor b원래 값으로 복원
a xor a결과는 무조건 0

자기 자신 XOR = 0

xor al, al
PRINT_HEX 1, al
NEWLINE
  • al을 자기 자신과 XOR → 결과는 0
  • 출력 확인

마무리

xor rax, rax
ret
  • rax 초기화 (반환값 0)
  • 프로그램 종료

✅ 전체 요점 정리표

연산 종류의미특징
shl좌측 시프트곱하기 효과
shr우측 시프트나누기 효과
and논리 AND둘 다 1일 때만 1
or논리 OR둘 중 하나라도 1이면 1
xor논리 XOR서로 다를 때만 1
not비트 반전0 ↔ 1

🌟 비트플래그 활용 예시

비트플래그의미
0b00000001옵션 1 ON/OFF
0b00000010옵션 2 ON/OFF
0b00000100옵션 3 ON/OFF
......
  • 특정 기능 ON/OFF 플래그 관리에 매우 유용
  • and, or, xor로 비트 조작 가능
  • 게임 서버의 상태 관리에 자주 사용

💡 XOR을 사용하는 이유

상황설명
암호화data xor key로 간단한 암호화 가능
상태 토글특정 플래그를 반전시킬 때 유용
원복 처리같은 값 XOR 두 번으로 원래 값 복원

profile
李家네_공부방

0개의 댓글