8086

KANOTYPE WIKI
둘러보기로 이동 검색으로 이동

8086은 Intel이 개발한 16비트 CPU이다. x86시리즈의 가장 최초의 CPU이기도 하다. x86 아키텍처 중에서 16비트 CPU는 IA-16으로 구분하기도 한다.

사양

  • 레지스터 크기 : 16비트
  • 어드레스 버스 : 20비트
  • 데이터 버스 : 16비트 (한번에 최대 2바이트씩 처리 가능)
  • I/O 포트 : 최대 65535개 (0000h~FFFFh)
  • 메모리 공간 : 00000h~FFFFFh 까지 최대 1MB. 세그먼트방식 메모리 관리 (한 세그먼트는 최대 64KB)

전원 ON시의 동작

  • 메모리의 FFFF0h의 주소부터 프로그램을 실행한다. 이때문에 FFFFFh주변(상위)을 ROM, 하위 주소를 RAM으로 하는 시스템이 일반적이다. (예:MS-DOS)

메모리

주소 내용
00000h ~ 003FFh 인터럽트 벡터 테이블
00400h ~ RAM 영역. MS-DOS 시스템이나 사용자 프로그램, 그 외의 작업영역 등에 사용된다. 또한 후반부가 ROM영역으로 설정되어있다.
FFFF0h ~ FFFFFh 전원이 켜지거나 시스템이 재시작되면 우선 이곳부터 프로그램이 실행된다. 보통 이곳은 ROM으로 설정되어있다.

메모리 주소 지정 방법

8086은 두종류의 물리 주소 방식과 세그먼트 방식으로 메모리 주소를 지정할 수 있다. 하지만 기계어로된 프로그램에서는 물리 주소 방식으로 메모리를 지정하는것은 불가능하다.

  • 물리 주소 방식 : 1MB의 메모리를 00000h 부터 FFFFFh까지 직접 지정하는 방법.
  • 세그먼트 방식 : 세그먼트 주소 : 오프셋 주소로 나타내는 방법. 세그먼트 주소에 0을 붙인(또는 16을 곱한) 주소에 오프셋주소를 더하면 물리 주소가 된다. 오프셋 주소는 최대 FFFFh까지 지정할 수 있으므로, 하나의 세그먼트는 최대크기가 64KB가 된다. 세그먼트 주소에는 세그먼트 레지스터의 값이 사용된다.
    • 예: XXXXh:YYYYh -> XXXX0h + YYYYh

레지스터

이 부분의 본문은 x86 레지스터 입니다

x86시리즈는 모두 상위 호환이기 때문에, 레지스터 구조 또한 동일하다. 32비트 레지스터에서 32비트를 제외한 16비트 이하의 레지스터들이 8086의 레지스터이다.

스택

8086이 스택을 다루는 메카니즘은 다음과 같다.

  • 스택의 최상위 데이터(가장 마지막에 넣은 데이터)의 주소는 SP 레지스터에 저장됨.
  • 스택에 데이터를 삽입할수록 SP는 감소함. 즉 스택은 메모리의 상위에서 하위로 쌓여감.
  • 스택에 데이터를 넣거나 빼낼때는 2바이트 단위로 처리가 이루어짐.

x86 관련 문서