Intel 8086是一个由Intel于1978年所设计的16位微处理器芯片,是x86架构的鼻祖。不久之后,Intel 就推出了 Intel 8088 (一个拥有8根外部数据总线的微处理器)。它是以8080和8085的设计为基础,拥有类似的寄存器组,但是数据总线扩充为16位。总线接口单元(Bus Interface Unit)透过6字节预存(prefecth) 的队列(queue)位指令给执行单元(Execution Unit),所以取指令和执行是同步的,8086 CPU有20条地址线,可直接寻址1MB的存储空间,每一个存储单元可以存放一个字节(8位)二进制信息。

外文名

Intel 8086

出品公司

Intel

字长

16位

基本介绍

Intel 8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64K 8 位元的输出输入(或32K 16 位元),以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个寄存器。

Intel 8086有四个 内存区段(segment)寄存器,可以从索引寄存器来设定。区段寄存器可以让 CPU 利用特殊的方式存取1 MB内存。8086 把段地址左移 4 位然后把它加上偏移地址。大部分的人都认为这是一个很不好的设计,因为这样的结果是会让各分段有重叠。尽管这样对组合语言而言大部分被接受(也甚至有用),可以完全地控制分段,使在编程中使用指针(如C编程语言)变得困难。它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。更坏的是,这种方式产生要让内存扩充到大于 1 MB 的困难。而 8086 的寻址方式改变让内存扩充较有效率。

8086处理器的时钟频率介于4.77MHz(在原先的IBM PC频率)和10 MHz之间。8086 没有包含浮点指令部分(FPU),但是可以通过外接数学辅助处理器来增强浮点计算能力。Intel 8087 是标准版本。

微处理器

i8086处理器

8086是Intel系列的16位微处理器,芯片上有4万个晶体管,采用 HMOS工艺制造,用单一的+5V电源,时钟频率为4.77MHz~10MHz。

8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。可寻址的内存空间为1MB。

在取得IBM个人电脑部门敲定的重要销售合约之后,Intel 8088处理器不仅成为了IBM个人电脑的大脑,而且还让IBM个人电脑成为新款畅销产品。为此,Intel 8088处理器的成功,也将英特尔进入“财富杂志500大企业排行榜”,《财富》杂志将英特尔评为“70年代最成功的企业”之一。Intel 8088晶体管数目约为2.9万颗。

1978年英特尔公司生产的8086是第一个16位的微处理器。很快Zilog公司和摩托罗拉公司也宣布计划生产Z8000和68000。这就是第三代微处理器的起点。

8086微处理器最高主频速度为8MHz,具有16位数据通道,内存寻址能力为1MB。同时,英特尔还生产出与之相配合的数学协处理器i8087,这两种芯片使用相互兼容的指令集,但intel8087指令集中增加了一些专门用于对数、指数和三角函数等数学计算的指令。人们将这些指令集统一称之为 x86指令集。虽然以后英特尔又陆续生产出第二代、第三代等更先进和更快的新型CPU,但都仍然兼容原来的x86指令,而且英特尔在后续CPU的命名上沿用了原先的x86序列,直到后来因商标注册问题,才放弃了继续用阿拉伯数字命名。

1979年,英特尔公司又开发出了8088。8086和8088在芯片内部均采用16位数据传输,所以都称为16位微处理器,但8086每周期能传送或接收16位数据,而8088每周期只能传输8位。因为最初的大部分设备和芯片是8位的,而8088的外部8位的数据传送、接收能与这些设备相兼容。8088采用40针的DIP封装,工作频率为6.66MHz、7.16MHz或8MHz,微处理器集成了大约29000个晶体管。

8086和8088问世后不久,英特尔公司就开始对他们进行改进。他们将更多功能集成在芯片上,这样就诞生了80186和80188。这两款微处理器内部均以16位工作,在外部输入输出上80186采用16位,而80188和8088一样是采用8位工作。

1981年,IBM公司将8088芯片用于其研制的PC机中,从而开创了全新的微机时代。也正是从8088开始,个人电脑(PC)的概念开始在全世界范围内发展起来。从8088应用到IBM PC机上开始,个人电脑真正走进了人们的工作和生活之中,它也标志着一个新时代的开始

结构

总线接口单元 (BIU bus interface unit)

总线接口单元BIU

总线接口部件由下列各部分组成

⑴4个段地址寄存器:

CS(code segment)——16位的代码段寄存器;

DS(data segment)——16位的数据段寄存器;

ES(extra segment)——16位的扩展段寄存器;

SS(stack segment)——16位的堆栈段寄存器;

⑵16位的指令指针寄存器IP;

⑶20位的地址加法器;

⑷6字节的指令队列缓冲器。

执行单元

执行部件由下列几个部分组成:

⑴8个通用寄存器:即AX、BX、CX、DX,BP,SP,SI,DI ;

其中,4个数据寄存器:AX、BX、CX、DX;

2个地址指针寄存器:BP(base pointer),SP(stack pointer);

2个变址寄存器:SI(source index),DI(destination index);

⑵标志寄存器FR(flags register);

⑶算术逻辑单元ALU(arithmetic logic unit)。

EU负责全部指令的执行,同时向BIU输出数据(操作结果),并对寄存器和标志寄存器进行管理。在ALU中进行16位运算,数据传送和处理均在EU控制下执行。

BIU和EU的管理

8086cpu结构图

⑴BIU和EU可以并行工作,提高CPU效率。BIU监视着指令队列。当指令队列中有2个空字节时,就自动把指令取到队列中。

⑵ EU执行指令时,从指令队列头部取指令,然后执行。如需访问存储器,则EU向BIU发出请求,由BIU访问存储器。

⑶ 在执行转移、调用、返回指令时,需改变队列中的指令,要等新指令装入队列中后,EU才继续执行指令。

引脚

概念

8086CPU引脚图

在学习8086 CPU的引脚信号前,必须弄清CPU最小模式和最大模式的概念。所谓最小模式,就是在系统中只有一个8086微处理器,所有的总线控制信号都直接由8086 CPU产生,因此,系统中的总线控制电路被减到最少。最大模式是相对最小模式而言的。在最大模式系统中,总是包含两个或多个微处理器,其中一个主处理器就是8086,其他的处理器称为协处理器,它们是协助主处理器工作的。如数学运算协处理器8087,输入/输出协处理器8089。8086 CPU到底工作在最大模式还是最小模式,完全由硬件决定。

当CPU处于不同工作模式时,其部分引脚的功能是不同的。

与之功能相同的

⑴AD15 ~AD0(address data bus):地址/数据总线,双向,三态。

这是一组采用分时的方法传送地址或数据的复用引脚。根据不同时钟周期的要求,决定当前是传送要访问的存储单元或I/O端口的低16位地址,还是传送16位数据,或是处于高阻状态。

⑵A19/S6~A16/S3(address/status):地址/状态信号,输出,三态。

这是采用分时的方法传送地址或状态的复用引脚。其中A19~A16为20位地址总线的高4位地址,S6~S3是状态信号。S6表示CPU与总线连接的情况,S5指示当前中断允许标志IF的状态。S4,S3的代码组合用来指明当前正在使用的段寄存器。S4,S3的代码组合及对应段寄存器的情况。

⑶BHE(低)/S7(bus high enable/status):允许总线高8位数据传送/状态信号,输出,三态。

为总线高8位数据允许信号,当低电平有效时,表明在高8位数据总线D15 ~D8上传送1个字节的数据。S7为设备的状态信号。

⑷RD/(read):读信号,输出,三态,低电平有效。

信号低电平有效时,表示CPU正在进行读存储器或读I/O端口的操作。

⑸READY(ready):准备就绪信号,输入,高电平有效。

READY信号用来实现CPU与存储器或I/O端口之间的时序匹配。当READY信号高电平有效时,表示CPU要访问的存储器或I/O端口已经作好了输入/输出数据的准备工作,CPU可以进行读/写操作。当READY信号为低电平时,则表示存储器或I/O端口还未准备就绪,CPU需要插入若干个“TW状态”进行等待。

⑹INTR(interrupt request):可屏蔽中断请求信号,输入,高电平有效。

8086 CPU在每条指令执行到最后一个时钟周期时,都要检测INTR引脚信号。INTR为高电平时,表明有I/O设备向CPU申请中断,若IF=1,CPU则会响应中断,停止当前的操作,为申请中断的I/O设备服务。

⑺TEST/(test):等待测试控制信号,输入,低电平有效。

信号用来支持构成多处理器系统,实现8086 CPU与协处理器之间同步协调的功能,只有当CPU执行WAIT指令时才使用。

⑻NMI(non-maskable interrupt):非屏蔽中断请求信号,输入,高电平有效。

当NMI引脚上有一个上升沿有效的触发信号时,表明CPU内部或I/O设备提出了非屏蔽的中断请求,CPU会在结束当前所执行的指令后,立即响应中断请求。

⑼RESET(reset):复位信号,输入,高电平有效。

RESET信号有效时,CPU立即结束现行操作,处于复位状态,初始化所有的内部寄存器。复位后各内部寄存器的状态,当RESET信号由高电平变为低电平时,CPU从FFFF0H地址开始重新启动执行程序。

⑽CLK(clock):时钟信号,输入。

CLK为CPU提供基本的定时脉冲信号。8086 CPU一般使用时钟发生器8284A来产生时钟信号,时钟频率为5MHz~8MHz,占空比为1:3。

⑾VCC电源输入引脚。

8086 CPU采用单一+5V电源供电。

⑿GND:接地引脚。

⒀MN/MX/(minimum/maximum):最小/最大模式输入控制信号。

引脚用来设置8086 CPU的工作模式。当为高电平(接+5V)时,CPU工作在最小模式;当为低电平(接地)时,CPU工作在最大模式。

CPU工作于最小模式时使用的引脚信号

当引脚接高电平时,CPU工作于最小模式。此时,引脚信号24~31的含义及其功能如下。

⑴M/IO/(memory I/O select):存储器、I/O端口选择控制信号。

信号指明当前CPU是选择访问存储器还是访问I/O端口。为高电平时,访问存储器,表示当前要进行CPU与存储器之间的数据传送。为低电平时,访问I/O端口,表示当前要进行CPU与I/O端口之间的数据传送。

⑵WR/(write):写信号,输出,低电平有效。

信号有效时,表明CPU正在执行写总线周期,同时由信号决定是对存储器还是对I/O端口执行写操作。

⑶INTA/(interrupt acknowledge):可屏蔽中断响应信号,输出,低电平有效。

CPU通过信号对外设提出的可屏蔽中断请求做出响应。为低电平时,表示CPU已经响应外设的中断请求,即将执行中断服务程序。

⑷ALE(address lock enable):地址锁存允许信号,输出,高电平有效。

CPU利用ALE信号可以把AD15 ~AD0地址/数据、A19/S6~A16/S3地址/状态线上的地址信息锁存在地址锁存器中。

⑸DT/(data transmit or receive):数据发送/接收信号,输出,三态。

DT/信号用来控制数据传送的方向。DT/为高电平时,CPU发送数据到存储器或I/O端口;DT/为低电平时,CPU接收来自存储器或I/O端口的数据。

⑹DEN/(data enable):数据允许控制信号,输出,三态,低电平有效。

信号用作总线收发器的选通控制信号。当为低电平时,表明CPU进行数据的读/写操作。

⑺HOLD(bus hold request):总线保持请求信号,输入,高电平有效。

在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。

⑻HLDA(hold acknowledge):总线保持响应信号,输出,高电平有效。

HLDA是与HOLD配合使用的联络信号。在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。

CPU工作于最大模式时使用的引脚信号

当引脚接低电平时,CPU工作于最大模式。此时,引脚信号24~31的含义及其功能如下。

⑴S2,S1,S0(status signals):总线周期状态信号,输出,低电平有效。

它们表明当前总线周期所进行的操作类型。,,代码组合及其对应操作见表2.3。

表2.3,,代码组合及对应操作表

⑵RQ/,GT/ (request/grant):总线请求允许信号输入/总线请求允许输出信号,双向,低电平有效。

该信号用以取代最小模式时的HOLD/HLDA两个信号的功能,是特意为多处理器系统而设计的。当系统中某一部件要求获得总线控制权时,就通过此信号线向8086 CPU发出总线请求信号,若CPU响应总线请求,就通过同一引脚发回响应信号,允许总线请求,表明8086 CPU已放弃对总线的控制权,将总线控制权交给提出总线请求的部件使用。RQ/GT0优先级高于RQ/GT1。

⑶LOCK/(lock)总线封锁信号,输出,低电平有效。

信号有效时,表示此时8086 CPU不允许其他总线部件占用总线。

⑷QS1,QS0(queue status):指令队列状态信号,输出。

QS1和QS0信号的组合可以指示总线接口部件BIU中指令队列的状态,以便其他处理器监视、跟踪指令队列的状态。

指令集

数据传送指令

MOV

功能:把源操作数送给目的操作数

语法: MOV 目的操作数,源操作数

格式: MOV r1,r2

MOV r,m

MOV m,r

MOV r,data

XCHG

功能:交换两个操作数的数据

语法: XCHG

格式: XCHG r1,r2 XCHG m,r XCHG r,m

PUSH,POP

功能:把操作数压入或取出堆栈

语法: PUSH操作数POP 操作数

格式: PUSH r PUSH M PUSH data POP r POP m

PUSHF,POPF,PUSHA,POPA

功能:堆栈指令群

格式: PUSHF POPF PUSHA POPA

LEA,LDS,LES

功能:取地址至寄存器

语法: LEA r,m LDS r,m LES r,m

XLAT(XLATB)

功能:查表指令

语法: XLAT XLAT m

算数运算指令

ADD,

ADC

功能:加法指令

语法: ADD OP1,OP2 ADC OP1,OP2

格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data

影响标志: C,P,A,Z,S,O

SUB,SBB

功能:减法指令

语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data

影响标志: C,P,A,Z,S,O

INC,DEC

功能:把OP的值加一或减一

语法: INC OP DEC OP

格式: INC r/m DEC r/m

影响标志: P,A,Z,S,O

MUL,IMUL

功能: 乘法指令

语法: MUL OP IMUL OP

格式: MUL r/m IMUL r/m

影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)

DⅣ,IDⅣ

功能:除法指令

语法: DⅣ OP IDⅣ OP

格式: DⅣ r/m IDⅣ r/m

逻辑运算指令

NEG

功能:将OP的符号反相(取二进制补码)

语法: NEG OP

格式: NEG r/m

影响标志: C,P,A,Z,S,O

CBW,CWD

功能:有符号数扩展指令

语法: CBW CWD

AAA,AAS,AAM,AAD

功能:非压BCD码运算调整指令

语法: AAA AAS AAM AAD

影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)

DAA,DAS

功能:压缩BCD码调整指令

语法: DAA DAS

影响标志: C,P,A,Z,S

位运算集

AND,OR,XOR,NOT,TEST

功能:执行BIT与BIT之间的逻辑运算

语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m

影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位

SHR,

SHL

,

SAR

,SAL

功能:移位指令

语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

影响标志: C,P,Z,S,O

ROR,ROL,RCR,RCL

功能:循环移位指令

语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL

影响标志: C,P,Z,S,O

程序流程控制集

CLC,STC,CMC

功能:设定进位标志

语法: CLC STC CMC

标志位: C

CLD,STD

功能:设定方向标志

语法: CLD STD

标志位: D

CLI,STI

功能:设定中断标志

语法: CLI STI

标志位: I

CMP

功能:比较OP1与OP2的值

语法: CMP r/m,r/m/data

标志位: C,P,A,Z,O

JMP

功能:跳往指定地址执行

语法: JMP 地址

JXX

功能:当特定条件成立则跳往指定地址执行

语法: JXX 地址

注:

A: ABOVE,当C=0,Z=0时成立

B: BELOW,当C=1时成立

C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立

E: EQUAL,当Z=1时成立

G: GREATER(大于),当Z=0且S=0时成立

L: LESS(小于),当S不为零时成立

N: NOT(相反条件),需和其它符号配合使用

O: OVERFLOW,O=1时成立

P: PARITY,P=1时成立

PE: PARITY EVEN,P=1时成立

PO: PARITY ODD,P=0时成立

S: SIGN,S=1时成立

Z: ZERO,Z=1时成立

LOOP

功能:循环指令集

语法: LOOP 地址

LOOPE(Z)

地址 LOOPNE(Z) 地址

标志位:无

CALL,RET

功能:子程序调用,返回指令

语法: CALL 地址 RET RET n

标志位:无

INT,IRET

功能:中断调用及返回指令

语法: INT n IRET

标志位:在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器

串操作集

MOVSB

,MOVSW,MOVSD

功能:字符串传送指令

语法: MOVSB MOVSW MOVSD

标志位:无

CMPSB,CMPSW,CMPSD

功能:字符串比较指令

语法: CMPSB CMPSW CMPSD

标志位: C,P,Z,S,O

SCASB,SCASW

功能:字符串搜索指令

语法:SCASBSCASW

标志位: C,P,Z,S,O

LODSB,LODSW,

STOSB

,STOSW

功能:字符串载入或存贮指令

语法:LODSBLODSWSTOSBSTOSW

标志位:无

REP

,REPE,REPNE

功能:重复前缀指令集

语法: REP 指令S REPE 指令S REPNE 指令S

标志位:依指令S而定