Intel 8086
The
8086 is a 16-
bit microprocessor chip designed by
Intel in
1978, which gave rise to the
x86 architecture. 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
[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.]. That
8088 processor is notable as the processor used in the original
IBM PC.
The processors were based on the
8080 and
8085 designs with a similar register set — 8086 and 8088 weren't directly
source-compatible to the 8085, but they were 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. The Bus Interface Unit fed the instruction stream to the Execution Unit through a 6 byte prefetch queue, so fetch and execution were concurrent – a form of loosely coupled
pipelining (8086 instructions varied from 1 to 6 bytes).
Buses:
* Address Bus - 20-bit address bus. Can access 2
20 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.
It featured four 16-bit general
registers, which could also be accessed as eight 8-bit registers, and four 16-bit index registers (including the
stack pointer). The data registers were often used implicitly by instructions, complicating register allocation for temporary values. It featured 64K 8-bit I/O (or 32K 16 bit) ports and fixed vectored interrupts. Most instructions could only access one memory location, so one operand had to be a register. The result was stored in one of the operands.
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.
The processor runs at clock speeds between 4.77 (as with the 8088 version used in the original IBM PC) and 10 MHz.
=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.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.
NEC launched the
NEC V20, V25 and V30 more efficiently implemented 8086 compatible processors.
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.