8086

a [|16-bit] [|microprocessor] designed by Intel since 1976, released in 1978. Its principal architect was [|Stephen P. Morse]. Marketed as [|source compatible], the 8086 was designed so that assembly language for the 8-bit 8080 could be automatically converted into equivalent (sub-optimal) 8086 source code. The [|Intel 8088] variant had an 8-bit external [|data bus] and was used in the original IBM PC. 8086 was the forerunner of Intel's x86 32-bit architecture, starting with the [|80386] in 1985.
 * Home * Hardware * 8086**
 * [[image:8086_5x_top.jpg link="http://visual6502.org/images/pages/Intel_8086_die_shots.html"]] ||~  || **8086**,

Despite the huge distribution of 8086/8088 based PCs, the 8086 was rarely found in Dedicated Chess Computers. || toc =Registers= The eight 8080 registers A, B, C, D, E, H, L, SP, with BC, DE and HL as possible 16 bit registers, were extended to eight (more or less general) 16-bit registers including the stack pointer. Four general purpose (GP) registers may treated as 16-bit Word as well as high and low Byte:
 * Intel 8086 [|die] ||~  ||^   ||
 * ~ 16 bit ||~ 8 high ||~ 8 low ||~ Purpose ||
 * AX || AH || AL || GP, Accumulator ||
 * BX || BH || BL || GP, Base, Index Register ||
 * CX || CH || CL || GP, Counter, variable shift, rotate via CL ||
 * DX || DH || DL || GP, high Accumulator mul/div ||
 * SI || - || - || GP, Source Index ||
 * DI || - || - || GP, Destination Index ||
 * SP || - || - || Stack Pointer ||
 * BP || - || - || GP, Base Pointer ||
 * Segment Registers ||
 * CS || - || - || Code Segment ||
 * DS || - || - || Data Segment ||
 * ES || - || - || Extra Segment ||
 * SS || - || - || Stack Segment ||

=Segmentation= The 8086 was able to address one MByte of physical memory and its external [|address bus] was 20 bit wide (the first 16 [|multiplexed] with the data bus). The [|physical address] translation was done by shifting a segment register 4 bits left and adding an 16 bit offset.

code effective or physical address := 16 * segment + offset code

As a result, each external address could be referred to by 2 12 different segment:offset pairs. Considered complicated and cumbersome by many (chess) programmers, this scheme had the advantage in porting programs less than 64 kilobytes from 8-bit 8080 avoiding the need for [|relocation].

Pointer
Compilers for the 8086 supported two or even three types of pointers, **near**, **far** and **huge**. Near pointers were 16-bit offsets implicitly associated with the program's code and/or data/stack segment and could only used within parts of a program small enough to fit in one 64 kilobyte segment. Far pointers were 32-bit segment:offset pairs. Huge pointers, which were like far pointers except that pointer arithmetic on a huge pointer treated it as a linear 20-bit pointer, while pointer arithmetic on a far pointer wrapped around within its 16-bit offset without touching the segment part of the address.

Memory models
To avoid the need to specify near and far on pointers, data structures, and functions, compilers supported "memory models" which specified default pointer sizes. The **tiny** (max 64K), **small** (max 128K), **compact** (data > 64K), **medium** (code > 64K), **large** (code,data > 64K), and **huge** (individual arrays > 64K) models covered practical combinations of near, far, and huge pointers for code and data. The tiny model with code and data in a single segment, just as in most 8-bit based processors, could be used to build [|.com-files]. Precompiled libraries often came in several versions compiled for different memory models.

=Clones=
 * [|NEC V20 from Wikipedia]
 * [|K1810BM86]

=Publications=
 * [|Steve Ciarcia] (**1979**). //[|The Intel 8086]//. BYTE, Vol. 4, No. 11, pp. 14-24

=External Links=
 * [|Intel 8086 from Wikipedia]
 * [|Intel 8087 floating point coprocessor from Wikipedia]
 * [|Intel 80186 from Wikipedia]
 * [|Intel 8086 microprocessor family] from [|CPU-World]
 * [|Index of /Intel/x86/808x/datashts/8086]
 * [|x86 instruction listings from Wikipedia]

=References= =What links here?= include component="backlinks" page="8086" limit="100"
 * Up one Level**