범용 레지스터(EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP)

2026. 1. 23. 23:53·IT Dictionary/Computer Science
반응형

1. EAX(Accumulator Register)

  • 덧셈, 뺄셈 등과 같은 산술 및 논리 연산 결과를 저장
mov eax, 5     ; eax = 5
add eax, 3      ; eax = eax + 3
  • 함수의 반환 값도 저장해줌
  • 예를 들어 다음과 같은 코드에 각 매개변수에 10, 20의 argument을 주고 결과 값을 반환한다면
int add(int a, int b){
	return a+b;
}
  • 어셈블리 내부에서는 다음과 같이 표현되며 함수의 실행 결과를 eax에 저장
mov eax, [ebp+8]   ; eax = a
add eax, [ebp+12]  ; eax = a + b
ret
  • 다음과 같이 EAX의 계층 구조를 표로 정의
이름 크기 설명
EAX 32-bit 전체 데이터 (예: 숫자 4,294,967,295까지)
AX 16-bit EAX의 절반
AH 8-bit AX의 왼쪽 절반 (High)
AL 8-bit AX의 오른쪽 절반 (Low), 주로 문자 1개 저장

 

2. EBX(Base Register)

  • 메모리 주소의 기준(base), 즉 어떤 메모리 영역의 시작 주소를 의미함
  • 기준점 역할을 하며, ebx + offset의 조합으로 정의
mov ebx, array      ; array의 base point를 ebx에 저장
mov eax, [ebx+4]    ; array[1] 
mov ecx, [ebx+8]    ; array[2]
  • 한 번 정해두고 여러 번 참조하는 기준 주소나 상태값(상수)을 담는 데 사용

 

3. ECX(Count Register)

  • 반복을 수행할 때 사용되는 반복 횟수 따위를 저장
mov ecx, 5          ; ECX 레지스터에 반복 횟수 5를 저장

L1:                      ; 루프의 시작 지점(라벨)
    --                     ; 여기에 반복 실행할 코드를 작성
    loop L1           ; 1. ECX 값을 1 감소시킴 (ECX = ECX - 1)
                           ; 2. ECX가 0이 아니면 L1으로 점프
                           ; 3. ECX가 0이면 루프 종료 후 다음 줄 실행
  • 많은 양의 데이터를 복사하거나 비교할 때도 사용,   ex) 복사할 바이트와 크기
mov ecx, 10         ; 10번 반복하겠다고 설정
lea esi, [Source]   ; 복사할 원본 데이터 주소
lea edi, [Dest]     ; 복사될 목적지 주소

rep movsb           ; ECX가 0이 될 때까지 원본(ESI)에서 목적지(EDI)로 바이트씩 복사하고 ECX를 자동으로 감소                                          시킴

 

4. EDX(Data Register)

  • 데이터 처리를 보조하는 역할을 수행, EAX와 같이 사용됨
  • EDX는 나눗셈 연산에서 다음과 같이 나머지 값을 저장함, 나눗셈을 나누기 전에는 EDX를 0으로 초기화해야함
mov eax, 10         ; 피제수(나눌 수)의 하위 32비트 설정
mov edx, 0          ; 피제수의 상위 32비트(EDX)를 0으로 초기화 (매우 중요!)
mov ebx, 3          ; 제수(나누는 수)를 EBX에 저장

div ebx             ; EAX를 EBX로 나눔 (10 / 3)

; [결과]
; EAX = 3 (몫)
; EDX = 1 (나머지) -> EDX에 나머지가 저장됨!

 

5. ESI(Source Index), EDI(Destination Index)

  • 각각 데이터를 옮기거나 비교할 때 데이터의 시작 지점을 가르키는 용도와 데이터의 목적 지점을 가르키는 용도로 사용
  • 문자열 처리 명령어(MOVS, LODS, CMPS)에서 필수적으로 사용
  • 배열과 같은 연속된 데이터를 다룰 때, 배열의 시작 주소를 ESI에 넣고 인덱스를 더해가며 접근하는 방식
  • 다음은 메모리에 저장된 문자열을 한 글자씩 읽어올 때 사용하는 코드
section .data
    msg db "Hello", 0

section .text
    lea esi, [msg]      ; 'msg'의 시작 주소를 ESI에 저장 (Source)

load_char:
    lodsb              ; ESI가 가리키는 곳에서 1바이트를 읽어 al에 넣음
                           ; ESI는 자동으로 1 증가
    test al, al        ; 문자가 0(NULL)인지 확인
    jz done           ; 0이면 종료
    
    ; (여기서 AL에 담긴 문자를 화면에 출력하는 코드 실행)
    
    jmp load_char       ; 다음 문자 반복
done:

 

6. EBP(Base Pointer), ESP(Stack Pointer)

  • 각각 스택 프레임의 기준점, 스택 프레임의 현재 지점을 가리킴
  • 즉 함수만의 독립적인 메모리 공간을 관리하는 데 필수적인 레지스터들
  • 만약 다음과 같은 함수가 있다고 과정했을 때,
int func(int a, int b)
  • 해당 함수의 지역 변수 a, b는 다음 과정을 통해 저장됨
push ebp            ; 이전 함수의 기준점(EBP)을 스택 메모리에 안전하게 보관
mov ebp, esp     ; 새로운 기준점(EBP)에 현재의 ESP(스택 꼭대기)을 설정
sub esp, 8          ; ESP를 아래로 밀어서 지역 변수 2개(8바이트)를 위한 공간 확보
mov [ebp-4], 10     ; EBP 기준 첫 번째 지역 변수에 10 저장
mov [ebp-8], 20     ; EBP 기준 두 번째 지역 변수에 20 저장
push 100               ; 임시 계산을 위해 값을 스택에 넣음 (ESP가 자동으로 바뀜)
mov esp, ebp     ; ESP를 EBP 위치로 끌어올림 (지역 변수 공간 싹 비우기)
pop ebp             ; 스택에 보관했던 '이전 함수의 EBP'를 복구
ret                      ; 함수 종료 및 복귀

 

 

반응형

'IT Dictionary > Computer Science' 카테고리의 다른 글

레지스터 설명  (0) 2026.02.02
git error: remote unpack failed: unable to create temporary object directory 오류  (0) 2023.05.16
리눅스(Linux) 터미널 필수 명령어 정리  (1) 2023.05.06
리엑트(React) 설명  (2) 2023.05.02
카페24(Cafe24) react, nodejs 빌드, 배포, 호스팅 하기  (10) 2023.05.01
'IT Dictionary/Computer Science' 카테고리의 다른 글
  • 레지스터 설명
  • git error: remote unpack failed: unable to create temporary object directory 오류
  • 리눅스(Linux) 터미널 필수 명령어 정리
  • 리엑트(React) 설명
MutJangE
MutJangE
즐거운 인생
  • MutJangE
    MutJangE
    MutJangE
  • 전체
    오늘
    어제
    • 분류 전체보기 (86) N
      • IT Dictionary (1) N
        • Database (7)
        • Network (9)
        • Computer Science (12) N
        • 정보보안산업기사 (24)
        • CTF & 보안 (3)
      • 일상 (11) N
        • 배포중인 웹 서비스 (1)
        • CERT병 (6)
        • 토익 (3) N
      • 프로그래밍 (19)
        • Java (1)
        • C# (6)
        • Unity (7)
        • React (4)
        • React native (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.5
    MutJangE
    범용 레지스터(EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP)
    상단으로

    티스토리툴바