Intel 8086
General information | |
---|---|
Launched | 1978 |
Discontinued | Present |
Common manufacturer |
|
Performance | |
Max. CPU clock rate | 4.77 Mhz to 10 Mhz |
Architecture and classification | |
Instruction set | x86 |
Physical specifications | |
Socket |
|
It has been suggested that Microprocessor 8086 be merged into this article. (Discuss) Proposed since September 2006. |
Overview
The 8086 is a 16-bit microprocessor chip designed by Intel in 1976, which gave rise to the x86 architecture. It has 29,000 transistors. The Intel 8088 (released shortly afterwards) was essentially the same chip, but with an external 8-bit data bus, allowing the use of cheaper and fewer supporting logic chips[1]. That 8088 processor is notable as the processor used in the original IBM PC.
Background
The processors were based on the 8080 and 8085 designs with a similar register set. Although 8086 wasn't directly source-compatible to the 8085, it was designed so that assembly language source code for the 8085 could be automatically converted into (sub-optimal) 8086 assembly source, usually with little or no hand-editing. However, the 8086 design was expanded to support full 16-bit processing instead of the fairly basic 16-bit capabilities of the 8080/8085.
Buses and operation
- Address Bus - 20-bit address bus. Can access 220 memory locations i.e 1 MB of memory.
- Data Bus - 16 bit data bus. Can access 16 bit data in one operation. Hence called 16-bit microprocessor.
- Control buses - Carries the essential signals for various operations.
8086 instructions varied from 1 to 6 bytes. However, fetch and execution were concurrent; the Bus Interface Unit fed the instruction stream to the Execution Unit through a 6 byte prefetch queue, a form of loosely coupled pipelining.
Registers and instructions
The processor featured eight 16-bit registers including the stack pointer. Four of them could also be accessed as eight 8-bit registers.
Due to a compact encoding inspired by 8085 and other 8-bit processors, most instructions were one- or two-address operations which means that the result were stored in one of the operands. A single memory location could also often be used as both source and destination operand which, among other factors, could furter contribute to a rather small executable code foot-print.
Although the degree of orthogonality between registers and operations were greater than in 8085, it is still low, and data registers were also sometimes used implicitly by instructions; while perfectly sensible for the assembly programmer, this complicates register allocation for compilers.
8086 also featured 64K 8-bit I/O ports (or 32K 16 bit), and fixed vectored interrupts.
Segmentation
There were also four segment registers that could be set from index registers. The segment registers allowed the CPU to access one megabyte + 64 KB - 16 bytes of memory in an odd way. Rather than just supplying missing bytes, as in most segmented processors, the 8086 shifted the segment register left 4 bits and added it to the address. As a result segments overlapped, which most people consider to have been poor design. Although this was largely acceptable (and even useful) for assembly language, where control of the segments was complete, it caused confusion in languages which make heavy use of pointers (such as C). It made efficient representation of pointers difficult, and made it possible to have up to 4096 pointers with different values pointing to the same location. Worse, this scheme made expanding the address space to more than one megabyte + 64 KB - 16 bytes difficult. Effectively, it was expanded by changing the addressing scheme in the 80286's protected mode, although those chips, and the later 80386 models were often used in real mode, remaining compatible with older OSes.
One advantage of this unconventional memory scheme is that programs could ignore the segments, and just use plain 16-bit addressing, which allowed 8-bit software to be easily ported to the 8086. The authors of MS-DOS took advantage of this by providing an API very similar to CP/M. This was important when the 8086 was new, because it allowed many existing CP/M applications to be quickly made available on the new platform. This greatly eased the transition from 8-bit to 16-bit computers.
Chip versions
The clock frequency was originally limited to 5 MHz (IBM PC used 4.77MHz), but the last versions in HMOS were specified for 10 MHz. CMOS-versions were manufactured for a long time (at least a while into the 1990s) for embedded systems although it's successor, the 80186/80188, has been more popular for embedded use.
Compatible and, in many cases, enhanced versions were manufactured by Fujitsu, Harris/Intersil, OKI, Siemens AG, Texas Instruments, NEC, and AMD. For example, NEC's series of efficiently implemented 8086 compatible processors (NEC V20, V25, V30, etc) are still used in embedded systems, as are Intel 80186.
The 8086/8088 could be connected to a mathematical coprocessor to add floating point capability. The Intel 8087 was the standard math-coprocessor, operating on 80-bit numbers, but manufacturers like Weitek soon offered higher performance alternatives.
Notable bugs
8086 CPUs produced prior to 1982 had a severe interrupt bug. IBM provided a free of charge upgrade to affected PCs. Processors remaining with original 1979 markings are quite rare, some people consider them collector's items.
Execution times for typical instructions (in clock cycles)
Timings are best case, depending on prefetch status, instruction alignment, and other factors.
MOV reg,reg: 2, reg,im: 4, reg,mem: 8+EA, mem,reg: 9+EA, mem,im: 10+EA cycles ALU reg,reg: 3, reg,im: 4, reg,mem: 9+EA, mem,reg: 16+EA, mem,im: 17+EA cycles
JMP reg: 11, JMP label: 15, Jcc label: 16 (cc = condition code)
MUL reg: 70..118 cycles
EA: time to compute effective address, ranging from 5 to 12 cycles. fee
Microcomputers using the 8086
The first commercial microcomputer built on the basis of the 8086 was the Mycron 2000.
The IBM Displaywriter word processing machine and Wang Professional Computer also used the 8086. The most influential microcomputer of all, the IBM PC, used the Intel 8088, a version of the 8086 with a narrower memory bus.
Notes and references
- ^ It also allowed using earlier 8080-family chips such as 8254 CTC, 8255 PIO, and 8259 PIC which were subsequently used in the IBM PC design.