IT공부

[ETC] 꼭 알아야 하는 어셈블리 명령어

shine94 2024. 12. 5. 22:48

1. 데이터 이동 명령어

mov

데이터를 한 레지스터에서 다른 레지스터, 혹은 메모리 간에 복사

MOV EAX, EBX       ; EBX 값을 EAX로 복사
MOV EAX, [ADDR]    ; 메모리 주소 ADDR의 값을 EAX로 복사
MOV [ADDR], EAX    ; EAX 값을 메모리 주소 ADDR에 저장

 

xchg

두 레지스터(또는 레지스터와 메모리) 값 교환

XCHG EAX, EBX      ; EAX와 EBX 값 교환

 

2. 산술 연산 명령어

add / sub

더하기, 빼기

ADD EAX, EBX       ; EAX = EAX + EBX
SUB EAX, 5         ; EAX = EAX - 5

 

mul / imul

곱셈(부호 없는 곱셈 : mul, 부호 있는 곱셈 : imul)

MUL ECX            ; EAX = EAX * ECX
IMUL EBX, 5        ; EBX = EBX * 5 (부호 있는 곱셈)

 

div / idiv

나눗셈(부호 없는 나눗셈 : div, 부호 있는 나눗셈 : idiv)

DIV ECX            ; EAX:EDX ÷ ECX, 몫 = EAX, 나머지 = EDX

 

inc / dec

값 1 증가, 값 1 감소

INC EAX            ; EAX = EAX + 1
DEC EBX            ; EBX = EBX - 1

 

3. 논리 연산 명령어

and / or / xor

비트 단위 AND 연산, 비트 단위 OR 연산, 비트 단위 XOR 연산

AND EAX, 0xF       ; EAX의 하위 4비트를 유지, 나머지 비트는 0
OR EBX, EAX        ; EBX와 EAX의 비트를 OR 연산
XOR EAX, EAX       ; EAX를 0으로 초기화

 

not

비트 반전

NOT EAX            ; EAX의 모든 비트를 반전

 

cmp

두 값을 비교하여 플래그 설정

CMP EAX, EBX       ; EAX와 EBX를 비교

 

test

비트 단위 AND 연산 후 플래그 설정

TEST EAX, EAX      ; EAX가 0인지 확인 (ZF 플래그 설정)

 

4. 점프 및 흐름 제어

jmp

무조건 점프

JMP LABEL          ; LABEL로 점프

 

je / jne

조건부 점프(ZF 플래그의 값에 따라)

je는     ZF = 1일 때, 점프

jne는   ZF = 0일 때, 점프

JE LABEL           ; ZF = 1일 때 LABEL로 점프 (EAX == EBX)
JNE LABEL          ; ZF = 0일 때 LABEL로 점프 (EAX != EBX)

 

call / ret

함수 호출, 함수 반환

CALL FUNC          ; FUNC 함수 호출
RET                ; 함수 반환 - 1
RET 8              ; 함수 반환 - 2

 

5. 스택 작업

push / pop

값을 스택에 저장, 스택에서 값을 가져옴

PUSH EAX           ; EAX 값을 스택에 저장
POP EBX            ; 스택에서 값을 꺼내 EBX에 저장

 

6. 시프트 및 회전

shl / shr

비트 왼쪽/오른쪽 시프트

SHL EAX, 1         ; EAX를 2배로 증가
SHR EAX, 1         ; EAX를 1/2로 감소

 

rol / ror

비트 왼쪽/오른쪽 순환 이동

ROL EAX, 1         ; EAX 비트를 왼쪽으로 순환 이동
ROR EBX, 1         ; EBX 비트를 오른쪽으로 순환 이동

 

7. 기타 명령어

lea

메모리 주소를 계산

LEA EAX, [EBX+4]   ; EBX + 4의 주소를 EAX에 저장

 

int

인터럽트 호출 (시스템 호출, 디버깅)

INT 0x80           ; 리눅스 시스템 호출

 

nop

아무 작업을 하지 않음 (디버깅 또는 최적화 방지)

NOP                ; No Operation