第二章 8086体系结构与 80x86CPU
? 8086CPU结构
? 8086系统的结构和配置
? 8086CPU内部时序
? 80x86典型微处理器介绍
2.1 8086CPU结构
? 8086CPU的内部结构
? 8086CPU的寄存器结构
? 8086CPU的管脚及功能
? 8086CPU的内部结构组成
8086CPU由两部分组成:
指令执行部件 (EU,Execution Unit)
总线接口部件 (BIU,Bus Interface Unit)
一,8086CPU的内部结构
8086CPU的内部结构
指令执行部件( EU)主要由算术逻辑运
算单元 (ALU)、标志寄存器 FR、通用寄存器
组和 EU控制器等 4个部件组成,其主要功能
是执行指令。
总线接口部件 (BIU)主要由地址加法器、
专用寄存器组、指令队列和总线控制电路等
4个部件组成,其主要功能是形成访问存储
器的物理地址、访问存储器并取指令暂存到
指令队列中等待执行,访问存储器或 I/ O端
口读取操作数参加 EU运算或存放运算结果
等。
EU和 BIU的操作原则
l BIU中的指令队列有 2个或 2个以上字节为空时,
BIU自动启动总线周期, 取指填充指令队列 。 直至
队列满, 进入空闲状态 。
l EU每执行完一条指令, 从指令队列队首取指 。
系统初始化后, 指令队列为空, EU等待 BIU从内存
取指, 填充指令队列 。
l EU取得指令, 译码并执行指令 。 若指令需要取
操作数或存操作结果, 需访问存储器或 I/O,EU向
BIU发出访问总线请求 。
l 当 BIU接到 EU的总线请求, 若正忙 ( 正在执行
取指总线周期 ), 则必须等待 BIU执行完当前的
总线周期, 方能响应 EU请求;若 BIU空闲, 则立
即执行 EU申请总线的请求 。
l EU执行转移, 调用和返回指令时, 若下一条
指令不在指令队列中, 则队列被自动清除, BIU
根据本条指令执行情况重新取指和填充指令队列 。
? 通用寄存器
? 段寄存器
? 标志寄存器 FR
? 指令指针寄存器 IP
二,8086CPU的寄存器结构
?1,通用寄存器
指令执行部件( EU)设有 8个通用寄存器
AX BX CX DX
SP BP SI DI
?通用寄存器
? AX( Accumulator Register)
累加器一般用来存放参加运算的数据和结果,
在乘、除法运算,I/O操作,BCD数运算中有不
可替代的作用。
? BX( Base Register)
基址寄存器除可作数据寄存器外,还可放内存
的逻辑偏移地址,而 AX,CX,DX则不能。
? CX( Counter)
将它称作计数寄存器,是因为它既可作
数据寄存器,又可在串指令和移位指令中
作计数用。
? DX( Data Register)
DX除可作通用数据寄存器外,还在乘、
除法运算、带符号数的扩展指令中有特殊
用途。
? SI( Source Index)
源变址寄存器多用于存放内存的逻辑偏
移地址,隐含的逻辑段地址在 DS寄存器
中,也可放数据。
? DI( Destination Index)
目标变址寄存器多用于存放内存的逻辑
偏移地址,隐含的逻辑段地址在 DS寄存
器中也可放数据。
? BP( Base Pointer)
基址指针用于存放内存的逻辑偏移地址,
隐含的逻辑段地址在 SS寄存器中。
? SP( Stack Pointer )
堆栈指针用于存放栈顶的逻辑偏移地址,
隐含的逻辑段地址在 SS寄存器中。
?寄存器的特殊用途和隐含性质
在指令中没有明显的标出,而这些寄存器参加
操作,称之为“隐含寻址”。
具体的:在某类指令中,某些通用寄存器有指
定的特殊用法,编程时需遵循这些规定,将某些
特殊数据放在特定的寄存器中,这样才能正确的
执行这些指令。采用“隐含”的方式,能有效地
缩短指令代码的长度。
寄存器名 特殊用途 隐含性质
在输入输出指令中作数据寄存器用 不能隐含
A X,A L
在乘法指令中存放被乘数或乘积,在除法指令中存放被除数或商 隐 含
AH 在 L A H F 指令中,作目标寄存器用 隐 含
在十进制运算指令中作累加器用 隐 含
AL
在 X L A T 指令中作累加器用 隐 含
在间接寻址中作基址寄存器用 不能隐含
BX
在 X L A T 指令中作基址寄存器用 隐 含
CX 在串操作指令和 L O O P 指令中作计数器用 隐 含
CL 在移位 / 循环移位指令中作移位次数计数器用 不能隐含
在字乘法 / 除法指令中存放乘积高位或被除数高位或余数 隐 含
DX
在间接寻址的输入输出指令中作地址寄存器用 不能隐含
在字符串运算指令中作源变址寄存器用 隐 含
SI
在间接寻址中作变址寄存器用 不能隐含
在字符串运算指令中作目标变址寄存器用 隐 含
DI
在间接寻址中作变址寄存器用 不能隐含
BP 在间接寻址中作基址指针用 不能隐含
SP 在堆栈操作中作堆栈指针用 隐 含
2、段寄存器
总线接口部件 BIU设有 4个 16位段寄存器
? CS( Code Segment),代码段寄存器中存放程序
代码段起始地址的高 16位。
? DS( Data Segment),数据段寄存器中存放数据
段起始地址的高 16位。
? SS( Stack Segment),堆栈段寄存器中存放堆栈
段起始地址的高 16位。
? ES( Extended Segment),扩展段寄存器中存放
扩展数据段起始地址的高 16位。
?3、标志寄存器 FR
标志寄存器 FR中共有 9个标志位,可分成
两类:
?状态标志 表示运算结果的特征,它们是
CF,PF,AF,ZF,SF和 OF
?控制标志 控制 CPU的操作,它们是 IF、
DF和 TF。
? 标志寄存器 FR
?FR中的状态标志
?CF(Carry Flag),进位标志位
CF= l,表示本次运算中最高位 (D15或 D7)有进位
(加法运算时 )或有借位 (减法运算时 )。 CF标志可通过
STC指令置位,通过 CLC指令复位 (清除进位标志 ),
还可通过 CMC指令将当前 CF标志取反。
?PF(Parity Flag),奇偶校验标志位
PF= 1,表示本次运算结果中有偶数个,l”,PF= 0,
表示本次运算结果中有奇数个,1”。
?AF(Auxiliary Carry Flag),辅助进位标志位。 AF
= l,表示运算结果的 8位数据中,低 4位向高 4位有
进位 (加法运算时 )或有借位 (减法运算时 ),这个标
志位只在十进制运算中有用。
?ZF(Zero Flag):零标志位
ZF= 1,表示本次运算结果为零,否则即运算结
果非零时,ZF= 0。
? SF(Sign Flag),符号标志
SF= 1,表示本次运算结果的最高位 (第 7位
或第 15位 )为,l”,否则 SF= 0。
? OF(Overflow F1ag):溢出标志
?FR寄存器的控制标志
?IF(Interrupt Flag),中断标志位
IF= 1,表示允许 CPU响应可屏蔽中断。 IF标志可
通过 STI指令置位,也可通过 CLI指令复位。
?DF(Direction Flag):方向标志位
在串操作指令中,若 DF= 0,表示串操作指令地
址指针自动增量; DF= 1,表示地址指针自动减量。
DF标志位可通过 STD指令置位,也可通过 CLD指令
复位。
?TF(Trap Flag),单步标志位
?4、指令指针寄存器 IP
IP 始终存有相对于当前指令段起点偏移
量的下一条指令,即 IP总是指向下一条待执
行的指令 。
IP中内容可由 BIU自动修改。
三, 8086CPU的管脚及功能
8086是 16位 CPU。它采用高性能的 N—
沟道,耗尽型负载的硅栅工艺 (HMOS)制
造。由于受当时制造工艺的限制,部分管
脚采用了分时复用的方式,构成了 40条管
脚的双列直插式封装
1,8086的两种工作方式
最小模式,系统中只有 8086一个处理器,所有的控制信号都
是由 8086CPU产生。
最大模式,系统中可包含一个以上的处理器,比如包含协处
理器 8087。在系统规模比较大的情况下,系统控
制信号不是由 8086直接产生,而是通过与 8086配
套的总线控制器等形成。
? 最小模式下的引脚说明
( 1) AD15~ AD0 (Address Data Bus):
地址 /数据复用信号, 双向, 三态 。 在 T1状态
( 地址周期 ) AD15~ AD0上为地址信号的低
16位 A15~ A0;在 T2 ~ T3状态 ( 数据周期 )
AD15~ AD0 上是数据信号 D15~ D0。
( 2) A19/S6~ A16/S3 (Address/Status):
地址 /状态复用信号, 输出 。 在总周期的 T1状态
A19/S6~ A16/S3上是地址的高 4位 。 在 T2~ T4状
态, A19/S6~ A16/S3上输出状态信息 。
BHE
S4 S3 当前正在使用的段寄存器
0 0 ES
0 1 SS
1 0 CS或未使用任何段寄存器
1 1 DS
( 3) BHE# /S7 (Bus High Enable/Status):
数据总线高 8位使能和状态复用信号,输出。在
总线周期 T1状态,BHE#有效,表示数据线上高 8
位数据有效。在 T2~ T4状态 BHE # /S7 输出状态
信息 S7。 S7在 8086中未定义。
BHE
( 4) RD# (Read)
读信号,三态输出,低电平有效,表示当前 CPU正在
读存储器或 I/ O端口。
( 5) WR# (Write)
写信号,三态输出,低电平有效,表示当前 CPU正在写
存储器或 I/ O端口。
( 6) M/ IO# (Memory/ IO )
存储器或 I/ O端口访问信号。三态输出,M/ IO#为高
电平时,表示当前 CPU正在访问存储器,M/ IO# 为低电
平时,表示当前 CPU正在访问 I/ O端口。
( 7) READY
准备就绪信号。由外部输入,高电平有效,表示 CPU
访问的存储器或 I/ O端口己准备好传送数据。当 READY
无效时,要求 CPU插入一个或多个等待周期 Tw,直到
READY信号有效为止。
BHE
( 8) INTR( Interrupt Request)
中断请求信号,由外部输入,电平触发,高电
平有效。 INTR有效时,表示外部设备向 CPU发出
中断请求,CPU在每条指令的最后一个时钟周期
对 INTR进行测试,一旦测试到有中断请求,并且
当中断允许标志 IF= 1时,则暂停执行下条指令转
入中断响应周期。
( 9) INTA# (Interrupt Acknowledge)
中断响应信号。向外部输出,低电平有效,表示 CPU响应
了外部发来的 INTR信号。
( 10) NMI( Non— Maskable Interrupt Request)
不可屏蔽中断请求信号。由外部输入,边沿触发,正跳沿
有效。 CPU一旦测试到 NMI请求信号,待当前指令执行完就
自动从中断入口地址表中找到类型 2中断服务程序的入口地址,
并转去执行。
( 11) TEST#
测试信号。由外部输入,低电平有效。当 CPU执
行 WAIT指令时 (WAIT指令是用来使处理器与外部硬
件同步 ),每隔 5个时钟周期对 TEST进行一次测试,
若测试到该信号无效,则 CPU继续执行 WAIT指令,
即处于空闲等待状态;当 CPU测到 TEST输入为低电
平时,则转而执行 WAIT的下一条指令。由此可见,
TEST对 WAIT指令起到了监视的作用。
( 12) RESET
复位信号。由外部输入,高电平有效。 RESET信
号至少要保持 4个时钟周期,CPU接收到该信号后,
停止进行操作,并对标志寄存器 (FR),IP,DS,SS、
ES及指令队列清零,而将 CS设置为 FFFFH。当复
位信号变为低电平时,CPU从 FFFF0H开始执行程
序,由此可见,采用 8086CPU计算机系统的启动程
序就保持在开始的存储器中。
( 13) ALE(Address Latch Enable)
地址锁存使能信号,输出,高电平有效。用来作
为地址锁存器的锁存控制信号。
( 14) DEN# (Data Enable)
数据使能信号,输出,三态,低电平有效。用于
数据总线驱动器的控制信号。
( 15) DT/R#(Data Transmit/Receive):
数据驱动器数据流向控制信号,输出,三态。在
8086系统中,通常采用 8286或 8287作为数据总线的
驱动器,用 DT/R#信号来控制数据驱动器的数据传
送方向。当 DT/R#= 1时,进行数据发送; DT/R#= 0
时,进行数据接收。
( 16) HOLD(Hold Request)
总线请求信号。由外部输入,高电平有效器向
CPU请求使用总线。
( 17) HLDA(Hold Acknowledge)
共享总线的处理总线请求响应信号。向外部输出,
高电平有效。
( 18) MN/MX# (Minimum/Maximum Mode Control):
最大最小模式控制信号,输入。 MN/MX#= 1
(+ 5V),CPU工作在最小模式。 MN/MX#= 0
(接地),CPU则工作在最大模式。
( 19) GND 地。
( 20) VCC 电源,接+ 5V。
? 最大模式下的引脚说明
当 8086CPU工作在最大模式系统时,有 8个管脚
重新定义 。
( 1) S2#,S1#,S0#( Bus Cycle Status,最小模式为
M/IO#,D/TR#,DEN#),
总线周期状态信号,输出。这三个信号的组合表示当前
总线周期的类型。在最大模式下,由这三个信号输入给总
线控制器 8288,用来产生存储器,I/O的读写等相关控制信
号。如下表:
S2# S1# S0# CPU状态 8288命令
0 0 0 中断响应 INTA#
0 0 1 读 I/O端口 IORC#
0 1 0 写 I/O端口 IOWC# AIOWC#
0 1 1 暂停 无
1 0 0 取指令 MRDC#
1 0 1 读存储器 MRDC#
1 1 0 写存储器 MWTC# AMWC#
1 1 1 无作用 无
( 2) LOCK# 封锁信号 。
三态输出,低电平有效。 LOCK有效时表示 CPU
不允许其它总线主控者占用总线。这个信号由软件
设置。当在指令前加上 LOCK前缀时,则在执行这
条指令期间 LOCK保持有效,即在此指令执行期间,
CPU封锁其它主控者使用总线。
( 3) QS1,QS0(Instruction Queue Status,最小
模式为 ALE,INTA#):
指令队列状态信号,输出。 QS1,QS0组合起来表
示前一个时钟周期中指令队列的状态,以便从外部
对芯片的测试。
( 4) RQ#/GT0#, RQ#/GT1# (Request/ Grant)
总线请求信号请求/同意信号。双向,低电平有
效,当该信号为输入时表示其它主控者向 CPU请求
使用总线;当为输出时表示 CPU对总线请求的响应
信号。两条线可同时与两个主控者相连,同
时,RQ#/GT0#优先级高于 RQ#/GT1#。
( 5) QS1,QS0(Instruction Queue Status):
指令队列状态信号,输出。 QS1,QS0组合起来
表示前一个时钟周期中指令队列的状态,以便从
外部对芯片的测试。
QS1 QS0 编码含义
0 0 无操作
0 1 从队列中取第一个字节
1 0 队列已空
1 1 从队列中取后续字节
2.2 8086系统的结构和配置
一,8086存储器结构和配置
8086系统中的存储器是一个最多 1M个 8位数量
的字节序列,即可寻址的存储空间为 1M字节,系
统为每个字节分配一个 20位的物理地址 (对应 16进
制的地址范围从 00000H~ FFFFFH)。
在存储器中任何两个相邻的字节被定义为一
个字。在一个字中的每一个字节有一个地址,并
且这两个地址中的较小的一个被用来作为该字的
地址。
1、存储器的组成
8086系统中,存储器是分体结构,1M字节
的存储空间分成两个 512K字节的存储体。
一个是偶数地址存储体,一个是奇数地址存
储体,两个存储体采用字节交叉编址方式
( 1)奇偶地址体示意图
( 2) BHE#, AD0的代码组合和对应的操作
BHE# AD0 对应的操作 所用的管脚
0 0 从偶地址开始读 /写一个字 AD15~ AD0
0 1 从奇地址单元读 /写一个字节 AD15~ AD8
1 0 从偶地址单元读 /写一个字节 AD7~ AD0
0
1
1
0
从奇地址开始读 /写一个字 ( 在第
一个总线周期, 传送低 8位数据到
AD15~ AD8;第二个总线周期传
送高 8位数据到 AD7~ AD0)
AD15~ AD8
AD7~ AD0
( 3)偶地址字读写
(3)偶地址字节读写 (续)
( 3)奇地址字节读写(续)
奇地址字读
写(续)
2、存储器的分段
8086可寻址空间是 lM字节,对整个空间寻址
需要 20位长的地址码,8086CPU内所有寄存器都
是 16位的寄存器,而一个 16位的寄存器,就只能
寻址 64K字节。要达到对 1M字节存储器的寻址,
8086系统采用分段并附以地址偏移量办法形成 20
位的物理地址,来得到对 1M内存空间的寻址。
?存储器中的逻辑地址和物理地址
采用分段结构的存储器中,任何一个逻辑地
址都由段基址和偏移地址两部分构成,都是 16
位二进制数。
物理地址:存储器的绝对地址,从 00000H~
FFFFFH,是 CPU访问存储器的实际寻址地址
(也称为绝对地址)
16位的段基址左移 4位 (相当于在段基址最低
位后添 4个,0”),然后与偏移地址相加获得物理
地址,这相当于完成如下的地址运算:
物理地址=段基址 × 16+偏移地址
CS
16 位
20 位
CS 左移 4 位
+
IP
地 址加 法器
20 位
物理地 址
3、堆栈段的使用
所谓堆栈是在存储器中开辟一个区域,用
来存放需要暂时保存的数据,其工作方式是
“先进后出”或“后进先出”的方式。
8086系统中的堆栈段是由段定义语句在存
储器中定义的一个段,堆栈段容量小于等于 64K
字节。段基址由堆栈寄存器 SS指定,栈顶由堆
栈指针 SP指定,堆栈地址由高向低增长,栈底
设在存储器的高地址区。
二, 8086输入/输出结构与配置
8086系统与外部设备的输入 /输出是通过接口
完成的。
1) 单独编址
系统要为 I/O芯片的每个端口分配一个地址, 各
个端口号不能重复, 是单独编址的 。
2) 寻址范围
8086CPU设计了 65535个 8位的 I/O端口, 即寻址
范围是 0~ 64K。 两个编号相邻的 8位端口可以组合
成一个 16位端口 。
3) 访问指令
执行 IN,OUT指令, RD#信号或 WR#信号与
M/IO#信号同时为低电平 。
三,8086的最小和最大模式系统配置
8086CPU可工作在最小模式和最大模式两种配
置。
最小模式是单机系统。系统中所需要的控制信
号全部由 8086CPU本身直接提供
最大模式可构成多处理机系统,系统中所需要
的控制信号由总线控制器 8288提供。
CPU工作模式的选择是由硬件决定的,当 CPU
的管脚 MN/接高电平 (十 5V)时,构成最小模式;
当 MN/接低电平 (地 )时,构成最大模式。
1、最小模式系统配置
以 8086CPU构成的最小模式的基本配置。除了
存储器,I/ O芯片和基本时钟发生器外、还有用
于地址的锁存器 8282(或 8283)以及用于数据的缓冲
器 8286(或 8287)。
最小模式系统
2、最大模式系统配置
与最小模式系统相比较,主要区别是最大模式
系统中增设了一个总线控制器 8288和一个总线仲
裁器 8289。 8086CPU输出的状态信号 S2~ S0同时
送给 8288和 8289,由 8288输出 8086CPU系统所需要
的控制信号,而 8289总线仲裁器对系统中多个处
理器提出共享总线资源的要求作出裁决。因此,
8086的最大模式系统由于 8288和 8289的存在,可
以构成一个多处理器系统。
最大模式系统
2.3 8086CPU内部时序
1、时序基本概念
? 时钟周期或状态周期, 8086CPU内部的逻辑操作以及
与外部存储器和 I/O交换数据进行的总线操作全部由
CPU的时钟来定时的。 CPU的基本定时单位称为时钟
周期或者状态周期。假设 8086的主频为 10MHz,一个
时钟周期为 100ns。
? 总线周期, CPU为了读取指令或传送数据,需要通过
总线接口部件 BIU与存储器或 I/O接口进行信息交互,
执行对总线的操作。进行一次数据传送的总线操作定
义为一个总线周期。
? 指令周期,完成一条指令所需要的时间,是由一个或
多个总线周期组成。
典型总线周期示意图
2、典型时序图
读总线周期示意图(最小模式)
读总线周期示意图(最大模式)
2.4 80x86典型微处理器介绍
一,80486微处理机
80486微处理机是在 80386微处理机的基础上
改进并发展起来的 32位机。内部寄存器和数据总
线宽度都是 32位,地址总线也是 32位,使得可寻
址的内存空间达到 4GB。虚拟内存空间达到
64TB。 80486CPU将浮点运算部件( FPU)、
8KB高速缓冲( Cache)存储器等集成在一块芯
片内。
80486微处理机采用了一些新技术,如:
RISC---Reduced Instruction Set Computer(精
减指令集计算机)技术、突发式总线技术等,使
微处理机的性能大大提高。
1,80486内部结构框图
80486内部功能结构框图
2,80486微处理机的特点
? 增强型 80487协处理器
? 存储器管理部件 MMU
( Memory Menagement Unit)
? 8KB数据和指令 Cache
? 采用 RISC技术
? 内部数据总线宽度为 64位
3,80486微处理机的寄存器
80486CPU的寄存器可分为四类
?基本结构寄存器
?系统级寄存器
?浮点寄存器
?调试和测试寄存器
二,Pentium系列微处理机
1,Pentium系列微处理机特点
? Pentium微处理机内部采用超标量双流水线结构,
每条流水线包含 5个步级。( u流水线和 v流水线 )
? 浮点部件拥有专用的加法和乘 /除法单元使得复杂而
精确的运算速度大大提高
? 在指令预处理中增加了分支预测逻辑,使分支指令
不停顿流水线的执行。
? Pentium内部采用 2个彼此独立的 8KB代码高速缓存和
8KB数据高速缓存
? Pentium内部数据总线为 32位,CPU和内存进行数据
交换的外部数据总线为 64位 。
? 对存储器的管理也采用分段和分页。
2、
Pentium
结构框图
3,Pentium
系列微处理机