mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-10-31 22:53:05

인텔 8086

8086에서 넘어옴
펜티엄 이전의 인텔 CPU
아키텍처 분류 제품
x86 이전 (4비트) 4004 (1971) 4040 (1974)
x86 이전 (8비트) 8008 (1972) 8080 (1974) 8085 (1977)
x86 (16비트) 8086/8088 (1978/1979) 80186/80188 (1982) 80286 (1982)
x86( IA32) (32비트) 80386 (1985) 80486 (1989)
기타 iAPX432(8800) i860 i960
관련 문서 인텔 펜티엄 시리즈 인텔 코어 시리즈 인텔 코어2 시리즈
인텔 코어i 시리즈 인텔 코어 Ultra 시리즈


파일:20200314_220039.jpg

1. 개요2. 상세3. 호환 제품
3.1. 인텔 80883.2. 인텔 80186/801883.3. 세컨드 소스3.4. 기타 호환 제품
3.4.1. NEC V20/V30 시리즈3.4.2. 소련과 동유럽권
4. 여담

1. 개요

1978년에 발표된 인텔의 16비트 CPU. 인텔 8080, 인텔 8085의 후속작이자 최초의 x86 아키텍처로 'x86'이라는 명칭 자체가 이 인텔 8086과 그 후속모델들의 제품명에서 유래한다. 3μm HMOS 공정으로 생산됐으며, 29000개의 트랜지스터로 구성되어 있다.

2. 상세

인텔 8086은 수석 설계자, 스테판 P. 모스(Stephen P. Morse)를 중심으로 16명이 설계했다. 원래 인텔 8086은 당시 개발 중인 차세대 32비트 RISC CPU인 iAPX 432가 나올 때까지 모토로라, 자일로그, 내셔널 세미컨덕터 CPU와의 경쟁에서 버텨줄 과도기적인 CPU로 설계했다. 그렇기 때문에 16비트 마이크로프로세서임에도 불구하고 인텔 8080의 마이크로아키텍처를 그대로 옮겨왔다. 하지만 1981년에 출시한 iAPX 432는 32비트 RISC CPU라는 게 무색할 정도로 성능이 구리면서(이듬해에 나온 16비트 마이크로프로세서, 인텔 80286의 4분의 1에 불과한 성능이었다.) 크게 실패했고 IBM IBM PC의 CPU로 인텔 8088을 선택하면서 대박을 터뜨리는 아이러니한 상황이 펼쳐졌다. 스테판 P. 모스는 훗날 "제가 8086을 설계하지 않았다면 PC가 오늘날 없었을 것이라고 생각하고 싶지만, 현실은 다른 프로세서 제품군에 기반을 두고 있었을 것입니다. 명령어 세트[1]는 근본적으로 다르지만 여전히 PC가 있을 것입니다. 나는 운이 좋게도 적절한 시간에 적절한 장소에 있었습니다."고 인터뷰한 적이 있다. #

새로운 16비트 아키텍처를 설계하면서 인텔은 자사의 기존 히트작이었던 8080 아키텍처를 16비트로 확장하고 곱셈과 나눗셈 등의 연산 명령을 추가했으며[2], 이를 논리 회로가 아닌 인텔 최초로 마이크로코드로 구현했다. 8080과의 바이너리 레벨에서의 호환성은 없지만 어셈블리어 수준에서는 호환되므로 8080 어셈블리어로 작성된 소스 코드를 8086 어셈블러로 다시 어셈블하면 정상적으로 작동했다. 이러한 호환성을 고려한 설계 덕에 아키텍처가 깔끔하지 못한 부분도 있다는 비판이 많아서 당시 8086의 난잡한 프로그래밍 모델은 프로그래머들에게 매우 까였다고 한다.

8086은 20비트의 메모리 주소 버스를 가지고 있어 총 1MB(220 Byte)의 물리 메모리를 다룰 수 있다. 그러나 8086은 '세그먼테이션'이라는 방식을 통해 메모리에 접근하도록 되어있다. 16비트 레지스터 2개로 메모리 접근을 지원했는데, 메모리를 16비트 레지스터로 접근할 수 있을 만큼인 64KB의 분량씩을 '세그먼트'라는 단위로 나누고, 또 다른 16비트 레지스터로 해당 세그먼트 내부에서의 위치를 1 word 단위로 '오프셋'으로 지정한 것이다. 이 레지스터를 세그먼트 레지스터와 오프셋 레지스터라 불렀다. 그래서 어셈블리어에서 세그먼트:오프셋으로 표기해 메모리 주소에 접근할 수 있었다. 실제 물리 메모리 주소는 세그먼트 주소×16+오프셋으로 얻을 수 있다. 세그먼트 주소를 4비트 왼쪽으로 시프트하고 오프셋을 더하는 것. 그 덕분에 당시에는 C 프로그래밍을 할때 near 포인터와 far 포인터라는 개념이 있었다. 같은 세그먼트 안에서의 오프셋 주소와 다른 세그먼트의 오프셋 주소를 구분해야 할 필요가 있었기 때문이다. 32비트 이상의 x86 CPU, 운영 체제와 컴파일러에서는 near far 구분이 없어졌다.

이 세그먼테이션 구조는 원래 처음 설계할 때는 메모리 접근 상한이 64KB였던 8080과 호환성이 있는 환경을 만들려고 설계한 것이었다. 당시 64KB 정도면 응용 프로그램 하나 돌리는데 충분한 큰 메모리였기 때문에[3] 메모리를 64KB 단위로 분할하여 여러 개의 응용 프로그램을 메모리에 올리기 위한 구조였다고 한다. 그러나 8086이 오랜 기간 잘나간 덕에 64KB의 크기는 택도 없는 사이즈가 되었고 결국 프로그래밍이 복잡하게 되었다는 공밀레 슬픈 사연이 있다. 구체적인 메모리 맵은 이 문서를 참조.

IBM IBM PC XT까지는 1MB 중에서 기본 메모리 640KB를 제외하고 남은 384KB를 바이오스가 사용하도록 했다. 그러나 이 세그먼테이션 구조에는 문제가 있었는데, 예를 들어 F001:FFF0(세그먼트:오프셋)의 주소로 접근하려고 하면 세그먼테이션 구조 상 메모리 주소는 F001×16(0x10, 10h)+FFF0이었던 관계로 물리 메모리 주소로는 0x100000이라는 1MB가 넘어가는 영역의 주소로 접근할 수 밖에 없었던 것이다. IBM은 회로를 통해 보완했는데, 이런 경우 다시 0x00000부터 접근하도록 만들었다. 이후 24비트 메모리 주소를 지원했던 80286에서는 다른 문제를 야기했는데, 80286부터 1MB에서 대략 64KB(정확히는 65,520바이트) 정도의 영역을 고위 메모리 영역이라(HMA, High Memory Area)라 불렀다. 상세한 내용은 80286 문서와 RAM/주소할당 문제 항목을 참조.

이 세그먼테이션 기법은 80386 이후 32비트 보호 모드가 등장하면서 선형 메모리 모델(Flat Memory Model)을 지원했음에도 불구하고 하위 호환을 위해 오랫동안 지원했다. 지금도 CS, SS, DS, ES 등의 세그먼트 레지스터들로 흔적이 남아 있으나 현대 x86-64 프로세서들의 롱 모드(64비트)에서는 더 이상 쓰이지 않으며 선형 메모리 모델만 쓰인다.

부동 소수점 연산 기능은 내장하고 있지 않았기 때문에 원하는 사람에 한해 별도의 부동 소수점 연산 보조 프로세서였던 8087을 함께 사용하도록 했다. 당시만 해도 CPU에 부동 소수점 연산 기능을 넣기에는 미숙했던 반도체 공정 기술 문제로 너무 비쌌을 뿐더러, 당시엔 과학 기술 같은 전문 분야에서만 사용하고 있어 중요하게 여겨지지 않았기 때문이다. 그 이전 세대의 8080 등에도 부동 소수점 연산 명령은 CPU에 내장되어 있지 않았다. 반드시 필요한 사용자만 보조 프로세서를 구입하고 그 이외의 경우에는 소프트웨어로 벌충해 처리하는 방식이었다. 이는 컴퓨터를 저렴한 가격으로 구성하려는 것이 목적이었다. 이 구조는 80386까지 이어지다가 80486에 가서야 부동 소수점 연산 장치를 CPU 안에 내장하게 되었다. 그 밖에 8089라는 I/O 전담 보조 프로세서도 있기는 있었지만 거의 사용되지 않아 잘 알려지지 않았다.

8086은 원조 x86이기 때문에 이후에 나온 모든 인텔의 x86(x86-64를 포함해서) CPU와 그 호환 CPU(AMD, VIA 등의)는 8086과 하위 호환성을 유지하고 있다. 80286에서는 8086처럼 동작하는 '실제 모드'(real mode)와 80286의 모든 성능을 낼 수 있는 '보호 모드'(protected mode)로 CPU의 모드를 나누고 있고 80386에서는 여러 개의 8086 응용 프로그램을 동시에 구동하기 위한 '가상 8086 모드'(Virtual 8086 Mode)을 추가했는데 이 설계는 오늘날까지도 그대로 이어져 내려오고 있다. 다만 오늘날의 x86-64에서는 64비트 모드인 '롱 모드'(long mode)로 동작할 때는 가상 8086 모드를 사용할 수 없다. 어쨌거나 8086의 설계는 40년이 넘은 지금까지도 영향을 미치고 있어서 오늘날 CPU로도 여전히 MS-DOS를 구동할 수 있다.[4] 다만 2020년대에 들어오면서 이것도 점차 옛이야기가 되어가고 있는데, UEFI가 Class 3에서 CSM을 통한 레거시 BIOS 지원을 이미 다 날려버렸으니 MS-DOS를 비롯한 UEFI 미지원 레거시 OS는 구동할 수 없게 되었고 2023년 인텔이 제안한 X86S 아키텍처는 16비트 실제모드와 16/32비트 보호모드 같은 레거시를 제거하고 현행 X86-64 체계만 남겨놓는 방향을 제시하고 있는데 이 제안이 현실화 되면 x86 아키텍처는 40여년간을 한구석에 유지해온 8086의 흔적을 완전히 지워버리게 되는 셈이다.

3. 호환 제품

3.1. 인텔 8088

8086이 나온 이듬해인 1979년에 발표된 자매품이다. 8086과 거의 동일한 성능을 지니고 있지만 외부 데이터 버스폭을 16비트에서 8비트로 줄인 일종의 다운 그레이드 버전. 8086과 8088의 관계는 인텔 80386DX와 SX의 관계와 거의 동일하다. 당시에 시장에 나와있던 8비트 주변 기기에 대한 호환성 때문에 이렇게 되었다. 그래서 8비트 컴퓨터 애드온 개발사는 간단한 포팅을 거쳐 IBM PC용으로도 애드온을 제공할 수 있었다. 이 때문에 IBM PC XT까지의 확장 슬롯은 8비트 버스로 연결되어 있다.

1981년 IBM PC의 CPU로 채용됨으로써 장대한 x86 아키텍처의 막을 연 모델이기도 하다. 일부 8086이나 8086/8088 호환칩을 사용한 호환 기종도 있었지만 IBM PC XT까지의 대부분의 IBM PC 호환기종은 8088을 사용했다고 보면 된다. 오리지널 IBM PC IBM PC XT는 5MHz 모델을 채용하고 이를 4.77MhZ로 약 4.5% 언더클럭하여 사용했지만[5], 1980년대 중반 이후에 나온 호환 기종들은 8MHz나 10MHz의 고속 버전을 사용한 모델이 대부분이었다.

메모리 주소 버스는 8086과 동일한 20비트이므로 다룰 수 있는 메모리 양도 마찬가지로 1MB. "그런데 왜 XT는 640KB가 한계였다고 하지?" 라는 의문이 든다면 기본 메모리 문제 항목을 참조.

3.2. 인텔 80186/80188

파일:상세 내용 아이콘.svg   자세한 내용은 인텔 80186 문서
번 문단을
부분을
참고하십시오.

3.3. 세컨드 소스

인텔에게 라이선스를 받아 세컨드 소스로 8086 CPU를 생산한 업체는 매우 많다. AMD, 텍사스 인스트루먼트 같은 유수의 반도체 회사들은 물론이고 NEC, 후지츠, 파나소닉 같은 일본 기업들도 당시에 인텔 8086을 세컨드 소스로 만들어 제품화했다.

세컨드 소스란 원본 제품 회사에 라이선스를 받아 원본과 똑같은 설계로 생산하는 제품을 말한다. 인텔의 고객층인 대기업에는 가격 경쟁력 확보를 위해 특정 부품을 하나의 기업에서만 구매하는 것을 금지하는 규정이 있었기 때문에, 인텔의 입장에서는 자사의 CPU를 팔기 위해 동일한 CPU를 생산하는 다른 기업이 필요했다. 인텔이 80386 부터 세컨드 소스 정책을 중단했기 때문에 이후 현재까지의 모든 x86 호환 CPU는 x86 명령어 집합만을 라이선스 받아 자체적으로 설계하고 있지만 80286까지는 인텔 제품과 똑같은 다른 회사 제품이 시장에 판매되고 있었다.

3.4. 기타 호환 제품

3.4.1. NEC V20/V30 시리즈

1976년부터 인텔 마이크로프로세서의 호환 CPU였던 μCOM-8 시리즈를 내놓던 NEC는 1982년 인텔 8088 호환 제품인 V20을 발매했다. 인텔 8088과 같이 외부 데이터 버스폭이 8비트이다. PC-9801 시리즈에는 사용되지 않아 V30에 비해 지명도는 살짝 떨어지지만 이쪽도 인텔 정품 대비 저렴한 가격을 무기로 여기저기 꽤 쓰였다. 한국에 유통되었던 일부 IBM PC XT 호환 기종에 인텔 8088 대신 탑재되기도 했으며, Tandy 1110 HD, HP 95LX 같은 랩톱에도 들어갔다. 당시 NEC V20 CPU가 탑재된 IBM PC XT 호환 기종을 사용했던 이들의 말을 빌리자면 인텔 8088보다 가성비면에서 좋았다고 한다.

1984년에는 인텔 8086 호환 CPU인 V30(μPD70116)을 개발했다. V30은 인텔 8086과 핀이 호환되며 명령어 집합은 인텔 80186과 호환성이 있었다. 거기에 NEC의 독자적인 명령어 집합을 추가하고 인텔 8080 에뮬레이션 기능까지 추가한 호환 CPU이다. 요컨대 인텔 8086 - NEC V30의 관계는 인텔 8080 - 자일로그 Z80의 관계랑 비슷하다고 보면 된다. 다만 리버스 엔지니어링으로 만들어 100% 호환하지 못해 일부 명령어가 인텔 CPU와 약간 다르게 동작하는 문제가 있었고 NEC가 독자적으로 추가한 명령어 집합을 사용한 코드는 인텔 80286, 80386에서 오동작하는 문제가 있었다. NEC도 인텔 80286을 탑재하기 시작한 PC-9801VX부터 이 문제를 겪었다. 원래 NEC의 방침은 PC-9801에서 초기 9801은 8086 클론인 µCOM-86을 사용했으니만큼 호환성 확보를 위해서라도 V30 탑재기에서도 V30의 독자적인 확장 기능은 사용하지 않는 것이었다고 하는데 일부 소프트웨어가 이 방침을 무시하고 V30의 확장 기능을 사용했다고 한다. 특히 게임 쪽. [6]

V30 탑재 기기로는 1980~90년대 일본의 국민 컴퓨터였던 PC-9801이 가장 유명하다. 초창기에는 NEC µCOM-86(μPD8088)을 썼지만 1985년 발매된 PC-9801VM부터 V30을 탑재하기 시작했다. 위에 서술했듯 CPU가 약간 다르게 동작했던데다가, 운영 체제도 NEC가 MS-DOS를 PC-9801에 맞게 이식해 썼을 뿐만 아니라, I/O 체계도 IBM PC 호환 기종과 서로 달라, 기본적으로 IBM PC 호환 기종과 소프트웨어 호환성은 없었다. 그러나 운영 체제와 CPU가 서로 비슷했던 관계로 단순한 코드라면 IBM PC 호환 기종과 호환되는 경우도 있었다. 후에 DOS/V가 나오면서 IBM PC 호환 기종으로 수많은 게임들이 이식된 데엔 비슷한 CPU와 운영 체제를 사용해 이식이 쉽기 때문이었다. 그 밖에도 최초의 스마트폰으로 알려진 IBM 사이먼이나 휴대용 게임기인 원더스완에도 들어간 적이 있고, 아이렘 세이부 개발의 몇몇 오락실 게임 기판에 쓰였으며, IBM PC 호환기 중에서는 대한민국에도 정식으로 출시된 적이 있는 미니 노트북인 올리베티 쿼더노 PT-XT-20이 16MHz V30HL을 사용한 것으로 알려져 있다.

인텔은 1982년에 NEC의 µCOM-86(μPD8086)과 µCOM-88(μPD8088)이 인텔의 허가 없이 8086, 8088을 베껴 판매했다며 NEC에 소송을 걸었으며, NEC는 인텔에 합의금을 주며 소송을 마무리 지었다. 1984년에는 인텔이 NEC의 V20, V30이 자신들의 8086, 8088 마이크로코드 저작권을 침해했다며 NEC에 다시 소송을 걸었다. 5년에 걸친 소송전 끝에 1989년 이 사건의 재판을 맡은 캘리포니아 북부 지방 법원은 인텔의 주장에 따라 마이크로코드에도 저작권이 있음을 인정했지만, V30은 인텔의 마이크로코드 저작권을 침해하지 않았다는 NEC의 주장을 인정해 NEC가 승소했다. NEC는 이 소송 때문에 승소가 확정되기 전인 1988년 하드 와이어드(hard wired) 방식으로 설계를 변경한 V33(μPD70136)을 내놓기도 했다.

NEC는 그 뒤로도 V20과 V30을 마이크로컨트롤러로 개량한 V40과 V50을 제작하다가 1986년 V60부터는 자체적인 32비트 CISC 아키텍처로 CPU를 만들었으나 2000년대까지 V20~V50 시리즈를 생산해 판매했다. 여담으로 제품명의 'V'는 'VLSI'의 V임과 동시에 'Victory'의 V라고 한다.

3.4.2. 소련과 동유럽권

1979년 소련은 인텔 8080을 리버스 엔지니어링해 호환 CPU인 КР580ВМ80А를, 1985년에는 인텔 8086을 같은 방법으로 호환 CPU인 К1810ВМ86를 생산해 소련이나 동유럽에서 사용했다.

4. 여담



[1] 인텔의 x86 라이센스는 40년. [2] 8080이나 그 개량 버전인 Z80의 사칙 연산 명령은 내부적으로는 덧셈(ADD)과 뺄셈(SUB) 밖에 없다. 곱셈과 나눗셈은 덧셈과 뺄셈 반복 연산이나 비트 시프트 연산 등을 이용해서 수행하게 되어있다. [3] 애플 II를 위시한 당시의 8비트 PC들은 대부분 64KB가 메모리의 한계였을 정도다. 참고로 MS-DOS용 실행파일 중에 확장자가 .com인것과 .exe인 것이 있는데 .com인 것이 바로 이 세그먼트 하나(64KB)에 들어가도록 만들어질 것을 고려한 구조의 실행 파일이다. [4] CPU만 하위호환성이 있다고 해서 DOS를 돌릴 수 있는 것은 아니다. 메인보드 칩셋에서도 DOS 지원을 위한 레거시를 아직도 남겨두고 있기 때문에 DOS를 돌릴 수 있는 것이다. 예컨대 DOS를 돌리는 데 필요한 Intel의 8237(DMA 컨트롤러), 8253(타이머 컨트롤러), 8259(인터럽트 컨트롤러) 등 칩이 메인보드 칩셋에서 에뮬레이션된다. [5] 언더클럭을 한 이유는 그래픽 동기화 문제와 클럭을 생성하는 클럭 발진기의 단가 문제 때문이었다. 4% 정도의 성능을 손해 보는 대가로 설계를 단순화하고 생산 단가를 낮출 수 있었다. [6] 이 때문에 해결책으로 PC-9801VX, EX 같은 80286/80386 탑재 모델은 아예 V30을 함께 탑재하고 딥스위치로 x86 모드와 V30 모드를 전환할 수 있도록 설계하는 것으로 대응했다. 어느 정도 시간이 지나 80286급 이상의 소프트웨어가 정착된 후에 나온 모델들은 V30을 제외하고 V30 호환 모드를 넣는 것으로 대처했다고 한다. [7] 호환환계인 V20이 들어갔다. 다만 흑백 LCD에 성능도 다소 차이가 난다.