Intel 8086

背景

1972年，Intel发布了8008微处理器——世界上第一款8位微处理器。 8008微处理器有18个引脚，其中地址总线使用了14个引脚，并且与8位数据总线复用引脚。指令集源自是Datapoint公司为计算机的CRT-键盘终端设计的但相当通用的指令集。当时英特尔还是一家生产DRAM为主业的公司，缺乏这方面的技术储备。
1974年，Intel发布了8080微处理器， 被公认是第一款真正可用的微处理器。8080的芯片封装采用40个引脚，其中8个数据总线引脚、16个地址总线引脚都是专用的，因此数据总线与地址总线可以并行工作。8080的扩展后的指令集在源代码级别上向前兼容8008指令集。
1975年，Intel发布了第三款8位微处理器——8085。采用了新的制造工艺，简化了输入电压引脚的数量。同一时期还有Motorola 6800（1974）、Microchip PIC16X（1975）、MOS Technology 6502（1975）、Zilog Z80（1976）及Motorola 6809（1978）等8位微处理器。在8位微处理器市场竞争中Z80最为成功。

第一种x86设计

8086项目起始于1976年5月，是英特尔公司当时更为看重的16位的iAPX 432微处理器的备份项目。8086一方面要与Motorola, Zilog, National Semiconductor等公司的16位、32位微处理器竞争市场份额，另一方面也是对Zilog Z80在8位微处理器市场上的成功的回击。由于采用了与8085微处理器近似的微体系结构与物理实现工艺，8086项目进展相当快。
8086微处理器被设计为在汇编源程序上向前兼容8008, 8080, 8085等微处理器。指令集与编程模式是基于8080微处理器，但指令集做了扩展以完全支持16位计算。
新增加的指令包括：完全支持有符号整数、段基址+偏移量寻址、类似于Z80的自重复操作、直接支持嵌套的ALGOL类语言如Pascal或PL/M、微码实现的乘法除法指令、以及更好支持与协处理器（8087或8089）和多处理器系统的总线结构.
第一版的指令集与高层的体系结构的设计仅用了3个月。 在没有CAD工具的时代，4名工程师与12名布线绘图员平行工作， 用了2年多的时间才把8086的高层设计实现为可运行测试的产品。这在当时算是很快的研发速度。
8086是随机逻辑与微码的混合实现，使用了大约20,000个晶体管（算上所有的ROM与可编程逻辑阵列为29,000个晶体管）。芯片面积为33 mm²，制造工艺为3.2 μm.
8086体系结构由Stephen P. Morse设计，并在最后定案时得到Bruce Ravenel（8087体系结构设计者）的帮助。逻辑设计者是以Jim McKevitt与John Bayliss为首的硬件开发工程师团队。项目经理William Pohlman。迄今8086的指令集仍然是PC机与服务器的基本指令集。

总线与操作

所有的内部寄存器、内部及外部数据总线都是16位宽，因此是完全的16位微处理器。20位外部地址总线，因此物理定址空间为1MiB (即2²⁰ = 1,048,576).由于内部寄存器都是16位，对1M地址空间寻址时采取了段寻址方式。8086的封装采用40引脚的双列直插（dual in-line），数据总线与地址总线复用了前16个引脚。16位的I/O地址，因此独立的I/O寻址空间为64KiB的虚拟定址空间 (即2¹⁶ = 65,536).由于8086内部的地址寄存器是16 位宽，因而最大线性寻址空间为64 KiB.使用超过64 KiB内存空间的程序设计时，需要调整段寄存器（segment registers）。直到32位的80386出现之前，8086的这种段寻址相当不便.
8086芯片封装的8个控制引脚在min或max下有不同功能。"min"模式是使用单处理器的小型计算机系统，"max"模式是使用多处理器的中到大型计算机系统。

寄存器与指令

8086有8个16比特的寄存器，包括栈寄存器SP与BP，但不包括指令寄存器IP、控制寄存器FLAGS以及四个段寄存器。AX, BX, CX, DX,这四个寄存器可以按照字节访问；但BP, SI, DI, SP,这四个地址寄存器只能按照16位宽访问。 
8086以8080和8085（它与8080有汇编语言上的源代码兼容性）的设计为基础，拥有类似的寄存器集合，但是扩展为16位。总线接口单元（Bus Interface Unit）透过6字节预存（prefetch）的贮列（queue）将指令送给运行单元（Execution Unit），所以取指令和运行是同步的－一种流水线的原始形式（8086指令长度变化从1到6字节）。
8086有四个完全一样的16位寄存器，但也能够当作八个8位寄存器来访问；以及四个16位变址寄存器（包含堆栈索引）。数据寄存器通常由指令隐含地使用，针对暂存值需要复杂的寄存器配置。它提供64K 8位的输出输入（或32K 16位）端口，以及固定的向量中断。大部分的指令只能够访问一个存储器地址，所以其中一个运算符必须是一个寄存器。运算结果会存储在运算符中的一个。
8086有4个存储器区块（segment）寄存器，可以通过变址寄存器来设置。区块寄存器可以让CPU一种当时是全新的方式访问多达1MB之存储器。在现今有区块的处理器中，8086把区块寄存器左移4位然后把它加上去寻址。这通常被认为是一个不太好的设计，因为这么做会让各区块有重叠。尽管这样对于汇编语言而言会显得有用——因为可以充分控制区块，但同时却使高级语言中的指针（像是C编程语言）使用变得困难。它降低了指针的高效率，且有可能产生两个指向同一个地方的指针拥有不同的地址。更坏的是，这种方式产生要让存储器扩展到大于1MB的困难。而80286的寻址方式改变让存储器扩展较有效率。
由于8位机（如Intel 8008）时代沿袭下来的紧凑编码，大多数指令虽然有两个源操作数（operands）及一个输出结果，但单条指令至多使用两个地址，因此运算结果被存入一个源操作数中。且最多只能有一个内存操作数，另外的操作数是寄存器或立即数。内存操作数也可以用于存储指令的输出结果。8位微处理器的指令集不能把输出结果直接保存在内存操作数中，因此8086指令集的如此设计大大提高了代码密度（code density）。
相比与8080或8085，8086有更强的寄存器通用性，但比起典型的小型计算机来说仍有很大不如。8086的某些指令隐式使用某些寄存器。比起更为规则的16- 或32-位处理器如PDP-11, VAX, 68000,等等，8086的寄存器分配特性使得编译器的工作更为复杂;另一方面，比起半现代化的但广为使用的8位微处理器如6502, 6809,或8085,编译器生成代码就容易太多了.
8086有64 KiB的字宽为8位的（或32K个宽度为16位的）I/O寻址空间. 
栈的长度最大为64 KB（一个段） ，8086硬件支持栈顶由高地址向低地址生长。入栈、弹栈的数据单元长度为2字节。栈顶位置由寄存器的组合SS:SP给出. 
共有256 个中断,包括硬件中断与软中断。中断可以嵌套，使用栈来保存中断返回地址。
8086增加了一些8080与8085所没有的新指令，用于更好地支持Pascal与PL/M的高级程序设计特性;如push mem-op, ret size,  (其它一些指令如push immed and enter,在随后的80186, 80286, and 80386中陆续增加.)

标志寄存器

8086有一个16位宽的标志寄存器FLAGS.其中9个比特是被使用的，另外7个比特保留未用。具体是：进位标志CF、奇偶标志PF、辅助标志AF、为零标志ZF、符号标志SF、追踪标志TF、中断允许标志IF、方向标志DF、溢出标志OF。

移植老的程序

8位机上的程序可以不考虑段地址直接以.com可执行文件以“微模式”在8086上运行。这是当时8086与MS-DOS作为新平台获取市场成功的关键原因——大量已存的CP/M应用程序能很快得到利用。

浮点

8086/8088可以连接上专用的数学协处理器以增加浮点计算性能。标准的数学协处理是Intel 8087，执行80位浮点数运算。

使用8086的微计算机

第一个以8086为基础的商业微计算机是Mycron2000。
IBM Displaywriter文字处理机也使用8086。在大部分显要的所有微处理器中，IBM PC使用了更窄的存储器总线版本的8086，也就是Intel 8088。
8086CPU结构上的一个重要特点是分为二大部分，即总线接口单元BIU和运行单元EU，其中BIU负责外部信息交换，EU负责指令运行，二者合理分工、并发工作，工作效率比此前的CPU明显提高，常称之为流水线结构。

硬件模式

8086和8088支持两种硬件模式：最大模式和最小模式。最大模式是用在大型应用中的多重处理，并且也是支持8087处理器的必需。该模式通常硬件化在电路中，不能由软件改变。具体来说，#33引脚（MN/MX）是连载高电压还是接地决定了模式。改变引脚#33的状态就改变了其他特定引脚的功能，这些引脚中大多数是CPU处理（局部）总线的。IBM PC和PC/XT使用工作在最大模式的Intel 8088，让CPU与PC或PC/XT主办上安装在数学协同处理器插口的可选8087协同处理器。（PC和PC/XT可能因为其他原因而要求用最大模式，比如要支持DMA控制器。）

纪念

2018年6月8日，英特尔在官网上开启了限量抽奖活动，奖品为i7-8086k，限量生产8086个。