Computer/CPU

Intel 8086 [Intel / 1978]

AICAT 2024. 9. 25. 18:07
반응형

Intel C8086

 

8086 (또는 iAPX 86)은 인텔이 1976년 초부터 1978년 6월 8일에 출시한 16비트 마이크로프로세서 칩이다. 1979년 7월 1일에 출시된 인텔 8088은 외부 8비트 데이터 버스를 가진 약간 수정된 칩으로, 저렴하고 적은 수의 지원 IC를 사용할 수 있게 해준다. 원래 IBM PC 설계에 사용된 프로세서로 유명하다. 8086은 x86 아키텍처의 기초가 되었으며, 이는 결국 인텔의 가장 성공적인 프로세서 라인이 되었다. 2018년 6월 5일, 인텔은 8086의 40주년을 기념하는 한정판 CPU인 인텔 코어 i7-8086K를 출시했다.

1972년, 인텔은 최초의 8비트 마이크로프로세서인 8008을 출시했다. 이는 Datapoint Corporation이 설계한 명령어 세트를 구현했으며, 프로그래머블 CRT 단말기를 염두에 두고 설계되었고, 일반적인 용도로도 사용되었다. 이 장치는 기능적인 컴퓨터를 만들기 위해 여러 추가 IC가 필요했으며, 이는 작은 18핀 "메모리 패키지"에 포장되어 별도의 주소 버스를 사용할 수 없었기 때문이다(인텔은 당시 DRAM 제조업체였다). 2년 후, 인텔은 8080을 출시했으며, 이는 계산기 IC를 위해 처음 개발된 새로운 40핀 DIL 패키지를 사용하여 별도의 주소 버스를 가능하게 했다. 8080은 8008과 소스 호환성이 있는 확장된 명령어 세트를 가지고 있으며, 프로그래밍을 쉽게 하기 위해 일부 16비트 명령어도 포함되어 있다. 8080 장치는 결국 단일 +5V 전원 공급 장치로 충분한 8085(1977)로 대체되었으며, 이는 이전 칩의 세 가지 다른 작동 전압을 필요로 하지 않았다. 이 시기에 등장한 다른 잘 알려진 8비트 마이크로프로세서로는 모토로라 6800(1974), 제너럴 인스트루먼트 PIC16X(1975), MOS 테크놀로지 6502(1975), 지로그 Z80(1976), 모토로라 6809(1978)가 있다.

8086 프로젝트는 1976년 5월에 시작되었으며, 원래는 야심차고 지연된 iAPX 432 프로젝트의 임시 대체품으로 의도되었다. 이는 모토로라, 지로그, 내셔널 세미컨덕터의 16비트 및 32비트 프로세서에 대한 관심을 끌기 위한 시도였다. 8086은 16비트 마이크로프로세서였지만, 인텔의 8비트 마이크로프로세서(8008, 8080, 8085)와 동일한 마이크로아키텍처를 사용했다. 이는 8비트로 작성된 어셈블리 언어 프로그램이 원활하게 이식될 수 있게 해주었다. 새로운 명령어와 기능이 추가되었으며, 부호 있는 정수, 기본+오프셋 주소 지정 및 자기 반복 작업 등이 포함되었다. ALGOL 계열 언어(파스칼 및 PL/M 포함)의 중첩 함수의 소스 코드 컴파일을 지원하기 위해 명령어가 추가되었다. 주요 설계자인 스티븐 P. 모스에 따르면, 이는 보다 소프트웨어 중심의 접근 방식의 결과였다. 다른 개선 사항으로는 곱셈 및 나눗셈 어셈블리 언어 명령어를 위한 마이크로코드 명령어가 포함되었다. 설계자들은 8087 및 8089와 같은 코프로세서를 예상했기 때문에 버스 구조는 유연하게 설계되었다.

명령어 세트 및 고급 아키텍처의 첫 번째 수정은 약 3개월 후에 준비되었으며, 거의 CAD 도구가 사용되지 않았기 때문에 4명의 엔지니어와 12명의 레이아웃 담당자가 동시에 칩 작업을 수행했다. 8086은 아이디어에서 작동 제품까지 2년 이상 걸렸으며, 이는 1970년대의 복잡한 설계로는 상당히 빠른 것으로 여겨졌다. 8086은 무작위 논리와 마이크로코드를 혼합하여 시퀀싱되었으며, 약 20,000개의 활성 트랜지스터(ROM 및 PLA 사이트를 모두 포함하면 29,000개)를 사용하여 고갈 부하 nMOS 회로로 구현되었다. 이는 인텔이 빠른 정적 RAM 제품 제조를 위해 처음 개발한 새로운 정제된 nMOS 제조 공정인 HMOS(고성능 MOS)로 곧 이동되었다. 이는 HMOS-II, HMOS-III 버전과 배터리 전원 장치를 위한 완전 정적 CMOS 버전으로 이어졌으며, 이는 인텔의 CHMOS 공정을 사용하여 제조되었다. 원래 칩의 크기는 33 mm²였으며 최소 특징 크기는 3.2 μm였다. MUL 및 DIV 명령어는 마이크로코드화되어 매우 느렸기 때문에 x86 프로그래머는 일반적으로 곱셈 및 나눗셈을 위해 비트 시프트 명령어를 사용했다.

8086은 1981년에 2 μm로 다이 축소되었으며; 이 버전은 원래 3.5 μm 칩의 스택 레지스터 버그도 수정되었다. 이후 1.5 μm 및 CMOS 변형은 다른 제조업체에 아웃소싱되었으며, 내부에서 개발되지 않았다. 아키텍처는 스티븐 P. 모스에 의해 정의되었으며, 최종 수정 사항을 다듬는 데 브루스 레이브넬(8087의 설계자)이 도움을 주었다. 논리 설계자는 짐 맥케빗과 존 베일리스가 하드웨어 수준 개발 팀의 수석 엔지니어였으며,  빌 폴먼이 프로젝트의 관리자였다. 8086의 유산은 오늘날 개인용 컴퓨터와 서버의 기본 명령어 세트에 지속적으로 남아 있으며; 8086은 또한 인텔 286 및 인텔 386과 같은 설계의 마지막 두 자리를 차용하여, 결국 x86 패밀리로 알려지게 되었다. (또한 인텔 장치의 PCI 공급업체 ID는 8086h이다.)

모든 내부 레지스터와 내부 및 외부 데이터 버스는 16비트 폭을 가지며, 이는 8086의 "16비트 마이크로프로세서" 정체성을 확고히 했다. 20비트 외부 주소 버스는 1 MiB 물리 주소 공간을 제공한다(220 = 1,048,576 x 1 바이트). 이 주소 공간은 내부 메모리 "세분화"를 통해 주소 지정된다. 데이터 버스는 모든 제어 신호를 표준 40핀 듀얼 인라인 패키지에 맞추기 위해 주소 버스와 다중화된다. 16비트 I/O 주소 버스를 제공하며, 64 KB의 별도 I/O 공간을 지원한다. 최대 선형 주소 공간은 내부 주소/인덱스 레지스터가 16비트 폭만 가지기 때문에 64 KB로 제한된다(아래 참조); 이 문제는 80386 아키텍처가 더 넓은(32비트) 레지스터를 도입할 때까지 존재했다(80286의 메모리 관리 하드웨어는 이와 관련하여 도움이 되지 않았다. 왜냐하면 그 레지스터도 여전히 16비트 폭이기 때문이다).

일부 제어 핀은 최소 또는 최대 모드에서 작동할 때 필수 신호를 전달하는 여러 기능을 가진다. 전자는 소형 단일 프로세서 시스템을 위한 것이고, 후자는 두 개 이상의 프로세서를 사용하는 중형 또는 대형 시스템을 위한 것이다(일종의 다중 프로세서 모드). 최대 모드는 8087 또는 8089 코프로세서를 사용할 때 필요하다. 핀 33(MN/MX)의 전압이 모드를 결정한다. 핀 33의 상태를 변경하면 CPU가 (로컬) 버스를 처리하는 방식과 관련된 다른 핀의 기능이 변경된다.  모드는 일반적으로 회로에 하드와이어되어 있으며, 따라서 소프트웨어로 변경할 수 없다. 이러한 모드의 작동은 인텔 데이터시트 및 매뉴얼의 타이밍 다이어그램으로 설명된다. 최소 모드에서는 모든 제어 신호가 8086 자체에 의해 생성된다.

8086은 여덟 개의 일반 16비트 레지스터를 가지고 있으며(스택 포인터를 포함하되, 명령어 포인터, 플래그 레지스터 및 세그먼트 레지스터는 제외), 그 중 네 개인 AX, BX, CX, DX는 8비트 레지스터 쌍으로도 접근할 수 있다. 나머지 네 개인 SI, DI, BP, SP는 16비트 전용이다. 8비트 프로세서에서 영감을 받은 컴팩트 인코딩 덕분에 대부분의 명령어는 단일 주소 또는 이중 주소 작업으로, 이는 결과가 피연산자 중 하나에 저장됨을 의미한다. 피연산자 중 하나는 메모리에 있을 수 있지만, 이 메모리 피연산자는 또한 목적지가 될 수 있으며, 다른 피연산자(소스)는 레지스터 또는 즉시 값일 수 있다. 단일 메모리 위치는 종종 소스와 목적지로 모두 사용될 수 있으며, 이는 여러 요인 중 하나로, 당시 대부분의 8비트 기계보다 코드 밀도가 비교 가능하거나 더 나은 기여를 한다.

대부분의 레지스터의 일반성 정도는 8080 또는 8085보다 훨씬 크다. 그러나 8086 레지스터는 대부분의 동시대 미니컴퓨터보다 더 전문화되어 있으며, 일부 명령어에 의해 암묵적으로 사용된다. 이는 어셈블리 프로그래머에게는 완벽하게 합리적이지만, 컴파일러의 레지스터 할당을 더 복잡하게 만든다. 반면, 8086은 6502, 6800, 6809, 8085, MCS-48, 8051 및 기타 동시대 누산기 기반 기계와 같은 매우 최소한의 8비트 마이크로프로세서보다 더 규칙적이기 때문에, 8086 아키텍처에 대한 효율적인 코드 생성기를 구축하는 것이 훨씬 더 쉬워졌다.

이와 관련하여 8086은 또한 파스칼 및 PL/M과 같은 스택 기반 고급 프로그래밍 언어를 더 잘 지원하기 위해 새로운 명령어(8080 및 8085에는 없는)를 도입했다. 더 유용한 명령어로는 메모리 작업을 푸시하고 크기를 반환하는 ret가 있으며, 이는 "파스칼 호출 규약"을 직접 지원한다. (여러 다른 명령어는 이후 80186, 80286 및 80386 프로세서에서 추가되었다.) 하드웨어에서 지원되는 64 KB(하나의 세그먼트) 스택은 낮은 주소로 성장하며, 16비트 단어가 스택에 푸시되고, 스택의 최상단은 SS:SP로 가리킨다. 256개의 인터럽트가 있으며, 하드웨어 및 소프트웨어 모두에 의해 호출될 수 있다. 인터럽트는 스택을 사용하여 반환 주소를 저장하면서 연쇄적으로 발생할 수 있다. 8086은 8비트(또는 대안으로 16비트 단어의 32K) I/O 포트 공간을 가진다.

이 칩의 특정 설계 선택에 의해 부분적으로 그림자가 드리워졌지만, 다중화된 주소 및 데이터 버스는 성능을 약간 제한한다. 16비트 또는 8비트 수량의 전송은 4클록 메모리 접근 주기에서 이루어지며, 이는 16비트에서는 더 빠르지만, 8비트 수량에서는 많은 동시대 8비트 기반 CPU에 비해 느리다. 명령어는 1바이트에서 6바이트까지 다양하므로, 가져오기 및 실행이 동시에 이루어지며 별도의 단위로 분리된다(오늘날의 x86 프로세서에서도 여전히 유지됨): 버스 인터페이스 유닛은 실행 유닛에 명령어 스트림을 공급하며, 6바이트의 사전 가져오기 큐를 통해 명령어를 대기한다. 큐에 최소 2바이트의 공간이 있을 때마다 BIU는 단어 가져오기 메모리 사이클을 시도한다. 큐가 비어 있으면(예를 들어 분기 명령어 후), 큐에 첫 번째 바이트가 들어오면 즉시 EU에 사용 가능해진다.

작은 프로그램은 세분화를 무시하고 단순한 16비트 주소 지정만 사용할 수 있다. 이는 8비트 소프트웨어가 8086으로 쉽게 이식될 수 있게 해준다. 대부분의 DOS 구현의 저자들은 CP/M과 매우 유사한 응용 프로그래밍 인터페이스를 제공하고, 간단한 .com 실행 파일 형식을 포함시킴으로써 이를 활용했다. 이는 8086과 MS-DOS가 새로웠을 때 중요했으며, 많은 기존 CP/M(및 기타) 응용 프로그램을 신속하게 제공할 수 있게 하여 새로운 플랫폼의 수용을 크게 용이하게 했다.


 

 

 


The 8086 (or iAPX 86) is a 16bit microprocessor chip released by Intel from early 1976 until June 8, 1978. The Intel 8088, released on July 1, 1979, is a slightly modified chip with an external 8-bit data bus, making it cheaper and requiring fewer supporting ICs. It is famous for being used in the original IBM PC design. The 8086 laid the foundation for the x86 architecture, which eventually became Intel's most successful processor line. On June 5, 2018, Intel released a limited edition CPU, the Intel Core i7-8086K, to commemorate the 40th anniversary of the 8086.

In 1972, Intel released the first 8bit microprocessor, the 8008, which implemented an instruction set designed by Datapoint Corporation, intended for programmable CRT terminals and general use. This device required several additional ICs to create a functional computer, as it was packaged in a small 18-pin "memory package" that could not use a separate address bus (Intel was a DRAM manufacturer at the time). Two years later, Intel released the 8080, which used a new 40-pin DIL package developed initially for calculator ICs, allowing for a separate address bus. The 8080 had an extended instruction set that was source-compatible with the 8008 and included some 16-bit instructions for ease of programming. The 8080 device was eventually replaced by the 8085 (1977), which required only a single +5V power supply instead of the three different operating voltages of the previous chips. Other well-known 8-bit microprocessors that emerged during this period include the Motorola 6800 (1974), General Instrument PIC16X (1975), MOS Technology 6502 (1975), Zilog Z80 (1976), and Motorola 6809 (1978).

The 8086 project began in May 1976 and was originally intended as a temporary substitute for the ambitious and delayed iAPX 432 project, aimed at attracting interest in 16-bit and 32-bit processors from Motorola, Zilog, and National Semiconductor. Although the 8086 was a 16-bit microprocessor, it used the same microarchitecture as Intel's 8-bit microprocessors (8008, 8080, 8085), allowing assembly language programs written for 8-bit processors to be smoothly ported. New instructions and features were added, including signed integers, base + offset addressing, and self-repeating operations. Instructions were added to support the compilation of source code for nested functions in ALGOL family languages (including Pascal and PL/M). According to chief designer Steven P. Morse, this was a result of a more software centric approach. Other improvements included microcode instructions for multiplication and division assembly language instructions. The designers anticipated coprocessors like the 8087 and 8089, so the bus architecture was designed to be flexible.

The first modifications to the instruction set and advanced architecture were prepared about three months later, and since almost no CAD tools were used, four engineers and twelve layout personnel worked on the chip simultaneously. The 8086 took over two years from idea to working product, which was considered quite fast for the complex designs of the 1970s. The 8086 was sequenced by mixing random logic and microcode, using about 20,000 active transistors (29,000 if including ROM and PLA sites) implemented with depletion-load nMOS circuits. This soon transitioned to a new refined nMOS manufacturing process called HMOS (High-Performance MOS) that Intel had developed for fast static RAM product manufacturing. This led to HMOS-II, HMOS-III versions, and a fully static CMOS version for battery powered devices, manufactured using Intel's CHMOS process. The original chip size was 33 mm², with a minimum feature size of 3.2 μm. The MUL and DIV instructions were microcoded and very slow, so x86 programmers generally used bit shift instructions for multiplication and division.

The 8086 was shrunk to 2 μm in 1981; this version also fixed the stack register bug of the original 3.5 μm chip. Subsequent 1.5 μm and CMOS variants were outsourced to other manufacturers and were not developed internally. The architecture was defined by Steven P. Morse, with Bruce Ravenel (designer of the 8087) assisting in refining the final modifications. Logic designers Jim McKeown and John Bayliss were the lead engineers of the hardware level development team, and Bill Pullman was the project manager. The legacy of the 8086 continues to persist in the basic instruction set of personal computers and servers today; the 8086 also borrowed the last two digits of designs like the Intel 286 and Intel 386, eventually becoming known as the x86 family. (Additionally, the PCI vendor ID for Intel devices is 8086h.)

All internal registers and internal and external data buses have a 16-bit width, solidifying the 8086's identity as a "16-bit microprocessor." The 20-bit external address bus provides 1 MiB of physical address space (220 = 1,048,576 x 1 byte). This address space is addressed through internal memory "segmentation." The data bus is multiplexed with the address bus to fit all control signals into a standard 40-pin dual in-line package. It provides a 16-bit I/O address bus and supports 64 KB of separate I/O space. The maximum linear address space is limited to 64 KB because the internal address/index registers only have a 16bit width (as noted below); this issue persisted until the 80386 architecture introduced wider (32-bit) registers (the memory management hardware of the 80286 did not help in this regard, as those registers were still 16-bit wide).

Some control pins have multiple functions that convey essential signals when operating in minimum or maximum mode. The former is for small single processor systems, while the latter is for medium or large systems using two or more processors (a kind of multiprocessor mode). Maximum mode is required when using the 8087 or 8089 coprocessors. The voltage on pin 33 (MN/MX) determines the mode. Changing the state of pin 33 alters the functions of other pins related to how the CPU handles the (local) bus. The mode is generally hardwired into the circuit and cannot be changed by software. The operation of these modes is described in timing diagrams in Intel's datasheets and manuals. In minimum mode, all control signals are generated by the 8086 itself.

The 8086 has eight general 16bit registers (excluding the instruction pointer, flag register, and segment registers, but including the stack pointer), four of which (AX, BX, CX, DX) can also be accessed as 8-bit register pairs. The remaining four (SI, DI, BP, SP) are 16-bit only. Thanks to compact encoding inspired by 8-bit processors, most instructions are single-address or double-address operations, meaning the result is stored in one of the operands. One operand may be in memory, but this memory operand can also be a destination, while the other operand (source) can be a register or an immediate value. A single memory location can often be used as both source and destination, contributing to comparable or better code density than most 8-bit machines of the time.

The generality of most registers is much greater than that of the 8080 or 8085. However, the 8086 registers are more specialized than most contemporary minicomputers and are implicitly used by some instructions. This is perfectly reasonable for assembly programmers but complicates register allocation for compilers. In contrast, the 8086 is much more regular than very minimal 8-bit microprocessors like the 6502, 6800, 6809, 8085, MCS48, 8051, and others of the same era, making it much easier to build efficient code generators for the 8086 architecture.

In this regard, the 8086 also introduced new instructions (not present in the 8080 and 8085) to better support stack-based high-level programming languages like Pascal and PL/M. More useful instructions include pushing memory operations and returning sizes with ret, directly supporting the "Pascal calling convention." (Several other instructions were added in later processors like the 80186, 80286, and 80386.) The hardware-supported 64 KB (one segment) stack grows downwards from low addresses, with 16bit words pushed onto the stack, and the top of the stack is pointed to by SS:SP. There are 256 interrupts, which can be invoked by both hardware and software. Interrupts can occur in a chain while using the stack to store return addresses. The 8086 has an 8-bit (or alternatively, 32K of 16-bit words) I/O port space.

Partially overshadowed by specific design choices of this chip, the multiplexed address and data buses slightly limit performance. Transfers of 16-bit or 8-bit quantities occur over four clock memory access cycles, which is faster for 16-bit but slower for 8-bit quantities compared to many contemporary 8-bit-based CPUs. Instructions vary from 1 byte to 6 bytes, allowing fetching and execution to occur simultaneously and separated into distinct units (still maintained in today's x86 processors): the bus interface unit supplies the instruction stream to the execution unit, waiting through a 6byte prefetch queue. Whenever there is at least 2 bytes of space in the queue, the BIU attempts a word fetch memory cycle. If the queue is empty (for example, after a branch instruction), the first byte entering the queue becomes immediately available to the EU.

Small programs can ignore segmentation and use simple 16-bit addressing. This allows 8-bit software to be easily ported to the 8086. The authors of most DOS implementations provided an application programming interface very similar to CP/M, facilitating this by including a simple .com executable file format. This was significant when the 8086 and MS DOS were new, allowing many existing CP/M (and other) applications to be quickly provided, greatly facilitating the acceptance of the new platform.



8086(またはiAPX 86)は、インテルが1976年初頭から1978年6月8日までに発売した16ビットマイクロプロセッサチップです。1979年7月1日に発売されたインテル8088は、外部8ビットデータバスを持つわずかに修正されたチップで、安価で少ないサポートICを必要とします。これは、元のIBM PC設計に使用されたことで有名です。8086はx86アーキテクチャの基礎を築き、最終的にはインテルの最も成功したプロセッサラインとなりました。2018年6月5日、インテルは8086の40周年を記念して、限定版CPUであるインテルコアi7-8086Kを発売しました。

1972年、インテルは最初の8ビットマイクロプロセッサである8008を発売しました。これは、Datapoint Corporationが設計した命令セットを実装しており、プログラマブルCRT端末を念頭に置いて設計され、一般的な用途にも使用されました。このデバイスは機能的なコンピュータを作成するためにいくつかの追加ICを必要とし、小さな18ピンの「メモリパッケージ」にパッケージ化されていたため、別のアドレスバスを使用できませんでした(インテルは当時DRAMメーカーでした)。2年後、インテルは8080を発売し、これは計算機ICのために最初に開発された新しい40ピンDILパッケージを使用して、別のアドレスバスを可能にしました。8080は8008とソース互換性のある拡張命令セットを持ち、プログラミングを容易にするためにいくつかの16ビット命令も含まれています。8080デバイスは、以前のチップの3つの異なる動作電圧を必要とせず、単一の+5V電源で十分な8085(1977)に最終的に置き換えられました。この時期に登場した他のよく知られた8ビットマイクロプロセッサには、モトローラ6800(1974)、ゼロログZ80(1976)、モトローラ6809(1978)などがあります。

8086プロジェクトは1976年5月に始まり、元々は野心的で遅延したiAPX 432プロジェクトの一時的な代替品として意図されていました。これは、モトローラ、ゼロログ、ナショナルセミコンダクターの16ビットおよび32ビットプロセッサへの関心を引くための試みでした。8086は16ビットマイクロプロセッサでしたが、インテルの8ビットマイクロプロセッサ(8008、8080、8085)と同じマイクロアーキテクチャを使用しており、8ビットで書かれたアセンブリ言語プログラムがスムーズに移植できるようになっています。新しい命令と機能が追加され、符号付き整数、基本+オフセットアドレッシング、および自己繰り返し操作などが含まれました。ALGOL系言語(パスカルおよびPL/Mを含む)のネストされた関数のソースコードコンパイルをサポートするために命令が追加されました。主要設計者のスティーブンP.モースによれば、これはよりソフトウェア中心のアプローチの結果でした。他の改善点には、乗算および除算アセンブリ言語命令のためのマイクロコード命令が含まれています。設計者たちは8087および8089のようなコプロセッサを予想していたため、バス構造は柔軟に設計されました。

命令セットおよび高度なアーキテクチャの最初の修正は約3か月後に準備され、ほとんどCADツールが使用されなかったため、4人のエンジニアと12人のレイアウト担当者が同時にチップ作業を行いました。8086はアイデアから動作製品まで2年以上かかり、1970年代の複雑な設計としてはかなり早いと見なされました。8086はランダムロジックとマイクロコードを混合してシーケンスされ、約20,000個のアクティブトランジスタ(ROMおよびPLAサイトを含めると29,000個)を使用して枯渇負荷nMOS回路で実装されました。これは、インテルが高速静的RAM製品製造のために最初に開発した新しい精製nMOS製造プロセスであるHMOS(高性能MOS)にすぐに移行されました。これはHMOS-II、HMOS-IIIバージョンおよびバッテリー駆動デバイス用の完全静的CMOSバージョンにつながり、インテルのCHMOSプロセスを使用して製造されました。元のチップのサイズは33 mm²で、最小特徴サイズは3.2 μmでした。MULおよびDIV命令はマイクロコード化されて非常に遅いため、x86プログラマーは一般的に乗算および除算のためにビットシフト命令を使用しました。

8086は1981年に2 μmにダイ縮小され、このバージョンは元の3.5 μmチップのスタックレジスタバグも修正されました。その後の1.5 μmおよびCMOS変種は他の製造業者にアウトソーシングされ、内部で開発されませんでした。アーキテクチャはスティーブンP.モースによって定義され、最終修正を洗練するのにブライス・レイヴネル(8087の設計者)が助けました。論理設計者のジム・マッケイとジョン・ベイリスはハードウェアレベル開発チームの主任エンジニアであり、ビル・ポールマンがプロジェクトのマネージャーでした。8086の遺産は、今日のパーソナルコンピュータやサーバーの基本命令セットに持続的に残っており、8086はまたインテル286およびインテル386のような設計の最後の2桁を借用し、最終的にはx86ファミリーとして知られるようになりました。(また、インテルデバイスのPCIベンダーIDは8086hです。)

すべての内部レジスタと内部および外部データバスは16ビット幅を持ち、これにより8086の「16ビットマイクロプロセッサ」としてのアイデンティティが確立されました。20ビット外部アドレスバスは1 MiBの物理アドレス空間を提供します(220 = 1,048,576 x 1バイト)。このアドレス空間は内部メモリ「セグメンテーション」を通じてアドレッシングされます。データバスはすべての制御信号を標準の40ピンデュアルインラインパッケージに合わせるためにアドレスバスと多重化されます。16ビットI/Oアドレスバスを提供し、64 KBの別のI/Oスペースをサポートします。最大線形アドレス空間は、内部アドレス/インデックスレジスタが16ビット幅しか持たないため64 KBに制限されています(下記参照)。この問題は、80386アーキテクチャがより広い(32ビット)レジスタを導入するまで存在しました(80286のメモリ管理ハードウェアはこの点で役立ちませんでした。なぜなら、そのレジスタも依然として16ビット幅だからです)。

いくつかの制御ピンは、最小または最大モードで動作する際に必須信号を伝達する複数の機能を持っています。前者は小型の単一プロセッサシステム用であり、後者は2つ以上のプロセッサを使用する中型または大型システム用です(いわゆるマルチプロセッサモード)。最大モードは8087または8089コプロセッサを使用する際に必要です。ピン33(MN/MX)の電圧がモードを決定します。ピン33の状態を変更すると、CPUが(ローカル)バスを処理する方法に関連する他のピンの機能が変更されます。モードは一般的に回路にハードワイヤされており、したがってソフトウェアで変更することはできません。これらのモードの動作は、インテルのデータシートおよびマニュアルのタイミングダイアグラムで説明されています。最小モードでは、すべての制御信号は8086自体によって生成されます。

8086は8つの一般的な16ビットレジスタを持っており(命令ポインタ、フラグレジスタ、セグメントレジスタを除くが、スタックポインタを含む)、そのうち4つ(AX、BX、CX、DX)は8ビットレジスタペアとしてもアクセスできます。残りの4つ(SI、DI、BP、SP)は16ビット専用です。8ビットプロセッサからインスパイアを受けたコンパクトエンコーディングのおかげで、ほとんどの命令は単一アドレスまたは二重アドレス操作であり、これは結果がオペランドの1つに保存されることを意味します。オペランドの1つはメモリに存在する可能性がありますが、このメモリオペランドも宛先となる可能性があり、他のオペランド(ソース)はレジスタまたは即値である可能性があります。単一のメモリ位置はしばしばソースと宛先の両方として使用され、これは当時のほとんどの8ビット機械よりもコード密度が比較可能またはそれ以上の貢献をする要因の1つです。

ほとんどのレジスタの一般性の程度は8080または8085よりもはるかに大きいです。しかし、8086レジスタはほとんどの同時代のミニコンピュータよりも専門化されており、一部の命令によって暗黙的に使用されます。これはアセンブリプログラマーには完全に合理的ですが、コンパイラのレジスタ割り当てをより複雑にします。一方、8086は6502、6800、6809、8085、MCS-48、8051およびその他の同時代の蓄積器ベースの機械よりもはるかに規則的であるため、8086アーキテクチャに対する効率的なコード生成器を構築することがはるかに容易になりました。

この点において、8086はまた、パスカルやPL/Mのようなスタックベースの高級プログラミング言語をよりよくサポートするために新しい命令(8080および8085にはない)を導入しました。より便利な命令には、メモリ操作をプッシュし、サイズを返すretが含まれ、これは「パスカル呼び出し規約」を直接サポートします。(いくつかの他の命令は、後に80186、80286および80386プロセッサで追加されました。)ハードウェアでサポートされる64 KB(1セグメント)スタックは低アドレスから成長し、16ビットワードがスタックにプッシュされ、スタックの最上部はSS:SPによって指し示されます。256の割り込みがあり、ハードウェアおよびソフトウェアの両方によって呼び出される可能性があります。割り込みは、スタックを使用して戻りアドレスを保存しながら連鎖的に発生する可能性があります。8086は8ビット(または代わりに16ビットワードの32K)のI/Oポートスペースを持っています。

このチップの特定の設計選択によって部分的に影がかけられていますが、多重化されたアドレスおよびデータバスは性能をわずかに制限します。16ビットまたは8ビットの数量の転送は、4クロックメモリアクセスサイクルで行われ、16ビットではより速いですが、8ビットの数量では多くの同時代の8ビットベースのCPUに比べて遅くなります。命令は1バイトから6バイトまで多様であり、取得と実行が同時に行われ、別のユニットに分離されます(今日のx86プロセッサでもまだ維持されています):バスインターフェースユニットは実行ユニットに命令ストリームを供給し、6バイトの事前取得キューを通じて命令を待機します。キューに最小2バイトのスペースがあるたびに、BIUは単語取得メモリサイクルを試みます。キューが空である場合(たとえば、分岐命令の後)、キューに最初のバイトが入るとすぐにEUで使用可能になります。

小さなプログラムはセグメンテーションを無視し、単純な16ビットアドレッシングのみを使用できます。これにより、8ビットソフトウェアが8086に簡単に移植できるようになります。ほとんどのDOS実装の著者は、CP/Mと非常に似たアプリケーションプログラミングインターフェースを提供し、シンプルな.com実行ファイル形式を含めることでこれを活用しました。これは8086とMS-DOSが新しかったときに重要であり、多くの既存のCP/M(および他の)アプリケーションを迅速に提供できるようにし、新しいプラットフォームの受け入れを大いに容易にしました。

반응형

'Computer > CPU' 카테고리의 다른 글

Intel 80186 [Intel / January 1982]  (0) 2024.09.27
Intel 8088 [Intel / 1979]  (0) 2024.09.26
Intel MCS-96 [Intel / 1982]  (0) 2024.09.24
Intel MCS-51 [Intel / 1980]  (0) 2024.09.23
Intel MCS-48 [Intel / 1976]  (0) 2024.09.22