8086
8086은 1978년 인텔에서 제작한 개인용 컴퓨터를 위한 16비트 마이크로프로세서이다.
목차
개요
8086은 20비트의 메모리 주소 버스를 가지고 있어, 총 2^20바이트의 물리 메모리를 다룰 수 있다. 세그먼테이션 방식을 사용하여 메모리에 접근한다. 16비트 레지스터 2개로 메모리 접근을 지원하는데, 메모리를 16비트 레지스터로 접근할 수 있을 만큼인 640KB의 분량씩을 세그먼트 단위로 나누고, 다른 16비트 레지스터로 해당 세그먼트 내부에서의 위치를 1 워드(word) 단위로 오프셋으로 지정한다. 이 레지스터를 세그먼트 레지스터와 오프셋 레지스터라 불린다.[1] 외부의 메모리 또는 입출력 장치와 실행 장치 사이의 명령어 또는 자료를 전달한다. 16비트 유효 주소를 물리 주소로 변환하고, 명령어의 선인출 기능을 한다.[2] 4.7MHz부터 10MHz까지 제품에 따라 다양한 클록 속도를 가지고 있고, 부동 소수점 계산 기능이 없어, 보조 프로세서를 장착해야만 부동 소수점 계산이 가능했다.[3]
구조
8086의 프로세서는 버스 연결 장치와 실행 장치가 독립적으로 수행한다. 버스 연결 장치는 16비트 세그먼트 레지스터, 프로그램 카운터, 명령어 선취 큐 등으로 구성되어 있다.[2] 또한, 버스 인터페이스 유닛(Bus Interface Unit)과 실행 유닛(Excution Unit)으로 나눌 수 있다. 버스 인터페이스 유닛(BIU)은 프로세서와 외부 장치 간의 데이터 전송을 담당하고, 실행 유닛(EU)은 버스 인터페이스 유닛으로부터 받아들인 데이터와 명령을 수행한다.[3]
메모리 구조
8086의 32비트 시스템은 커널 영역과 오프리밋(Off-Limit) 영역, 유저 영역, 널 포인터(Null Pointer) 할당 영역으로 구성되어 있다. 커널은 운영체제 시스템 코드가 로드(load)되는 부분이다. 커널 영역은 시스템 내의 모든 프로세스에 공유된 메모리를 말하고, 사용자는 이 영역에 직접적인 접근을 할 수 없다. 오프리밋(Off-Limit) 영역은 사용자가 커널 영역에 접근하지 못하도록 할당해둔 공간이다. 유저 영역은 사용자가 실제로 사용할 수 있는 공간으로, 스택, 힙, 코드 영역이 포함된다. 널 포인터(Null Pointer) 할당 영역은 모두 0이고, 변경 불가능한 영역으로 시스템 보호 차원에서 만들어둔 영역이다. 전에는 하나의 프로세스를 사용했지만, 현재는 멀티태스킹이 가능해져 메모리에 여러 개의 프로세스가 저장되어 병렬적으로 작업이 가능해졌다.[4]
레지스터
범용 레지스터
이 레지스터에는 AX, BX, CX, DX가 있다. AX는 누산기의 기능을 한다. mul, div와 같은 연산을 할 경우, 피연산자 중 하나는 AX를 이용한다. BX는 베이스 레지스터이다. 간접적인 주소 방식을 위해 사용하는 유일한 레지스터이다. CX는 카운트 레지스터이다. 반복 명령, 이동(Shift), 로테이트(Rotate) 명령, 스트링(String) 명령 등에서 몇 번 반복했는지 세기 위해 사용한다. DX는 데이터 레지스터이다. 워드(word) 크기의 mul, div 연산을 할 때 AX와 함께 사용된다. 또한, In, Out 명령에서 포트 번호를 가질 수 있지만, 주로 데이터를 저장하기 위해 간편한 장소로써 이용된다.[5]
인덱스 레지스터
SI, DI, IP가 있다. 포인터로 자주 쓰이지만, 범용 레지스터와 같은 용도로도 쓰인다. SI(Source Index)는 문자열 명령에서 현재 읽고 있는 문자를 나타내기 위한 포인터로써 이용된다. 간접 주소 방식에서 오프셋(offset)으로도 이용된다. DI(Destination Index)는 문자열 명령에서 쓰이고 있는 문자를 나타내기 위해 포인터로써 이용된다. SI와 마찬가지로 오프셋(offset)으로도 이용된다. IP(Instruction Pointer)는 다음 실행할 명령이 있는 주소를 가리킨다. 코드 세그먼트(CS)를 참조하여 물리적인 메모리 주소를 만든다.[5]
포인터 레지스터
SP와 BP가 있다. SP는 Stack Pointer의 약자로, 스택 내의 번지 지정을 위한 레지스터이다. BP는 Base Pointer의 약자로, 스택 세그먼트(SS)에 있는 데이터를 액세스 할 때 사용하고, 다른 영역의 데이터를 간접번지 지정으로 액세스할 때 사용한다. CS, DS, ES, SS는 세그먼트 레지스터이다. 프로그램의 각 부분에서 메모리의 어떤 부분이 사용되는지 가리킨다. CS는 코드 세그먼트(Code Segment)이고, 시스템이 알아들을 수 있는 명령어들이 있다. 명령어를 실행하면서 분기와 점프, 시스템 호출과 같은 행동을 할 때, 주소를 지정해줘야 하는데, 세그먼트는 메모리 내에서 어디에 위치하는지 정확하게 지정할 수가 없다. 그래서 논리주소(logical address)를 사용하여 실제 메모리상의 주소인 물리주소(physical address)를 구하는데 중요한 역할을 한다. DS는 데이터 세그먼트(Data Segment)로, 프로그램이 실행될 때 사용되는 데이터, 전역 변수가 담기는 부분이다. 현재 모듈의 데이터 구조(Data Structure), 상위 레벨로부터 받아들이는 데이터 모듈, 동적 생성 데이터, 다른 프로그램과 공유하는 공유 데이터로 구성된다. ES는 보조 세그먼트(Extra Segment), SS는 스택 세그먼트(Stack Segment)이다. 스택 세그먼트는 현재 수행되고 있는 핸들러(Handler), 태스크(Task), 프로그램(Program)이 저장되는 데이터 영역으로, 사용하고 있는 버퍼가 스택 세그먼트에 저장된다. 스택에 데이터를 저장하고 읽는 과정은 푸쉬(PUSH)와 POP 명령어에 의해 수행된다. 보조 세그먼트(ES)는 임시적인 세그먼트 레지스터로 사용된다.[5][6]
플래그 레지스터
이전에 실행된 명령들의 중요한 결과값들을 저장한다. 상태 플래그와 컨트롤 플래그로 나뉜다. 상태 플래그는 총 6개로, 산술적 연산에 근거해서 값을 셋팅한다. CF(Carry Flag)는 연산 수행 중 캐리(carry)나 바로우(borrow)가 발생하면 1이 된다. PF(Parity Flag)는 연산 결과 최하위 바이트 값이 짝수일 경우 1이 된다. AF(Adjust Flag)는 연산 결과 캐리(carry)나 바로우(borrow)가 3비트 이상 발생하면 1이 된다. ZF(Zero Flag)는 결과가 0(Zero)임을 가리킨다. 조건문이 만족되면 셋팅된다. SF(Sign Flag)는 연산 결과 최상위 비트의 값과 같고, signed 변수의 경우, 양수이면 0, 음수이면 1이 된다. OF(Overflw Flag)는 정수형 결과값이 너무 크거나 작아서 피연산자의 데이터 타입에 모두 들어가지 않을 경우 1이 된다.[7] 컨트롤 플래그는 중앙처리장치(CPU)의 동작 상태를 제어하는 플래그이다.[5][8]
동작 모드
초기에는 플래그 레지스터, 세그먼트 레지스터와 IP 값을 0으로 설정한다. 코드 세그먼트(CS) 레지스터의 값은 "FFFFh"로 설정한다.[2] 프로그램들이 분리, 격리된 메모리 공간 내 국한하게 하는 보호 모드(Protected mode), 리얼-주소 모드(Real-address Mode), 시스템 관리 모드(System Management Mode)는 전력 관리, 시스템 안정성 제고 등을 위한다. 롱 모드(long mode)는 기존 모델의 호환성 없이 단지 x64에서만 가능하다. 리얼 모드(Real Mode)는 부팅 시 일단 리얼 모드로 동작을 시작한다. 20비트 메모리 주소 공간을 가지고 있고, 직접 바이오스(BIOS), 주변 장치까지도 접근이 가능하다. 단, 메모리 페이징, 리얼타임 멀티태스킹을 위한 하드웨어는 지원이 불가능하다.[9]
i7-8086K
인텔은 8086 프로세서 출시 40주년을 기념하여 8세대 인텔 코어 i7-8086K 한정판 프로세서를 발표했다. 이 제품은 인텔 최초 내장 그래픽을 탑재한 6코어 12개의 스레드 프로세서로, 64비트 명령어 세트를 지원하고, 1151 핀 패키지의 형태로 제공된다.[10] 최고 5.0GHz의 싱글 코어 터보 주파수를 기록하고, 오버클럭킹을 지원한다. 더 높아진 주파수는 싱글 스레드 성능의 향상으로 최고 사양 게임의 실행, 지속적으로 높은 프레임 속도를 요구하는 게임 및 콘텐츠 제작 애플리케이션 작업의 처리, 연결을 가능하게 한다.[11]
각주
- ↑ 〈인텔 8086〉, 《나무위키》
- ↑ 2.0 2.1 2.2 〈11장. 마이크로 프로세서 내부 구조〉, 《다음》
- ↑ 3.0 3.1 〈인텔 CPU, 8086부터 80286까지〉, 《복군》
- ↑ 까망눈공대생, 〈인텔 8086 메모리 구조〉, 《티스토리》
- ↑ 5.0 5.1 5.2 5.3 나의피는파랗다 –파란피-, 〈인텔 8086 레지스터 종류 및 기능인텔 8086 레지스터 종류 및 기능|작성자 투더리[출처 인텔 8086 레지스터 종류 및 기능|작성자 투더리]〉, 《티스토리》, 2008-11-27
- ↑ 〈어셈블리어(Assembly)의 기초와 8086 프로세서〉, 《티스토리》, 2018-11-27
- ↑ 〈(Buffer Overflow) 8086 CPU 레지스터 구조〉, 《티스토리》, 2020-03-18
- ↑ 〈레지스터의 종류들〉, 《티스토리》, 2012-09-24
- ↑ 〈인텔 프로세서〉, 《정보통신기술용어해설》
- ↑ 신윤오 기자, 〈인텔, 8086 프로세서 출시 40주년 기념해 한정판 프로세서 발표〉, 《일렉포》, 2018-06-07
- ↑ 신윤오 기자, 〈40년의 기술 혁신 - 인텔 8086 프로세서〉, 《인텔 뉴스룸》, 2018-06-05
참고자료
- 〈인텔 8086〉, 《나무위키》
- 〈11장. 마이크로 프로세서 내부 구조〉, 《다음》
- 〈인텔 CPU, 8086부터 80286까지〉, 《복군》
- 까망눈공대생, 〈인텔 8086 메모리 구조〉, 《티스토리》
- 나의피는파랗다 –파란피-, 〈인텔 8086 레지스터 종류 및 기능인텔 8086 레지스터 종류 및 기능|작성자 투더리[출처 인텔 8086 레지스터 종류 및 기능|작성자 투더리]〉, 《티스토리》, 2008-11-27
- 〈어셈블리어(Assembly)의 기초와 8086 프로세서〉, 《티스토리》, 2018-11-27
- 〈(Buffer Overflow) 8086 CPU 레지스터 구조〉, 《티스토리》, 2020-03-18
- 〈레지스터의 종류들〉, 《티스토리》, 2012-09-24
- 〈인텔 프로세서〉, 《정보통신기술용어해설》
- 신윤오 기자, 〈인텔, 8086 프로세서 출시 40주년 기념해 한정판 프로세서 발표〉, 《일렉포》, 2018-06-07
- 〈40년의 기술 혁신 - 인텔 8086 프로세서〉, 《인텔 뉴스룸》, 2018-06-05
같이 보기