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비트 레지스터로 확장되었다.

✅ 부트로더, 운영체제 커널, 레거시 코드에서 사용되기 때문에 알아둘 필요는 있다.

+ Recent posts