x86 아키텍처에서 사용하는 16비트 범용 레지스터는 다음과 같다.
레지스터 | 설명 |
AX | 누산기, 연산 및 함수 호출 반환값을 저장 |
BX | 베이스, 주소 계산 및 메모리 접근 |
CX | 카운터, 루프 반복 횟수를 저장 |
DX | 데이터, 입출력 및 곱셉 / 나눗셈 연산 |
SI | 소스, 문자열 및 배열 연산 |
DI | 목적지, 문자열 및 배열 연산 |
BP | 베이스 포인터, 스택 프레임 관리 |
SP | 스택 포인터, 현재 스택 위치 |
📌 레지스터의 하위 부분
각 16비트 레지스터는 8비트 단위( AH/AL, BH/BL 등 )로 나뉘어 사용 가능하다.
🔹 AX( 16비트 ) 기준 하위 레지스터 구조
AX ( 16비트 ) = [ 상위 8비트( AH ) | 하위 8비트 ( AL ) ]
- AX = 누산기 레지스터 전체
- AH = AX의 상위 8비트
- AL = AX의 하위 8비트
⭐ 예제( AX를 8비트로 조작 )
MOV AX, 0x1234 ( AX = 0x1234 )
MOV AH, 0x56 ( AH만 변경 ▶ AX = 0x5634 )
MOV AL, 0x78 ( AL만 변경 ▶ AX = 0x5678 )
➡️ AX를 8비트 단위로 조작하여 메모리를 절약 가능하다.
📌 16비트 레지스터 설명
🌙 연산 및 데이터 관련 레지스터
🔹 AX ( Accumulator, 누산기 레지스터 )
- 산술 및 논리 연산에서 기본적으로 사용한다
- I/O 연산, 함수 호출 반환 값을 저장한다.
- 곱셈( MUL ), 나눗셈( DIV ) 연산에 사용한다.
⭐ 예제 ( AX를 활용한 덧셈 )
MOV AX, 5
ADD AX, 3 ( AX = 5 + 3 = 8 )
🔹 BX ( Base Register, 베이스 레지스터 )
- 메모리 주소 저장
- 주소 지정에서 베이스 값으로 활용한다.
⭐ 예제 ( 메모리 주소 지정 )
MOV BX, 0x1000 ( 메모리 주소 0x1000을 BX에 저장 )
MOV [BX], AX ( BX가 가리키는 메모리 주소에 AX 값 저장 )
🔹 CX ( Counter Register, 카운터 레지스터 )
- 루프( LOOP ) 및 반복 연산에서 사용한다.
- 비트 시프트( Shift ) 연산에도 사용한다.
⭐ 예제 ( CX를 활용한 루프 연산 )
MOV CX, 10 ( CX = 10 ( 루프 반복 횟수 지정 )
LOOP_START :
DEX CX ( CX = CX - 1 )
JNZ LOOP_START ( CX가 0이 아니면 루프 반복 )
🔹 DX ( Data Register, 베이스 레지스터 )
- 입출력 포트 접근에 사용한다. ( IN / OUT 명령어 )
- 곱셈( MUL), 나눗셈( DIV ) 연산 시 사용한다.
⭐ 예제( DX를 활용한 곱셈 연산 )
MOV AX, 5
MOV DX, 3
MUL DX ( AX = AX * DX ( 5 * 3 = 15 )
🌙 문자열 및 메모리 연산 레지스터
🔹 SI ( Source Index, 소스 인덱스 레지스터 )
- 문자열 복사 및 메모리 접근 시 소스 주소로 사용한다.
🔹 DI ( Destination Index, 목적지 인덱스 레지스터 )
- 문자열 복사 및 메모리 접근 시 목적지 주소로 사용한다.
🌙 스택 관련 레지스터
🔹 BP ( Base Pointer, 베이스 포인터 레지스터 )
- 스택 프레임을 관리 한다.
- 함수 호출 시 지역 변수 및 매개변수 접근에 사용한다.
🔹 SP ( Stack Pointer, 스택 포인터 레지스터 )
- 스택의 현재 위치를 가리킨다.
- PUSH, POP 연산 시 사용한다.
⭐ 예제( 스택 조작 )
PUSH AX ( AX 값을 스택에 저장 ( SP 감소 )
POP BX ( 스택에서 값을 가져와 BX에 저장 ( SP 증가 )
✅ 16비트 레지스터는 과거 x86 프로세스에서 사용되었고, 현재는 32비트 / 64비트 레지스터로 확장되었다.
✅ 부트로더, 운영체제 커널, 레거시 코드에서 사용되기 때문에 알아둘 필요는 있다.
'언어 > 어셈블리어' 카테고리의 다른 글
[어셈블리어] x86-64 (=x64) 아키텍처 ( 64비트 ) 범용 레지스터 (0) | 2025.02.17 |
---|---|
[어셈블리어] MOV 명령어 (0) | 2025.02.16 |
[어셈블리어] x86 아키텍처 ( 32비트 ) 범용 레지스터 (0) | 2025.02.15 |
[어셈블리어] 어셈블리어( Assembly language ) (0) | 2025.02.14 |