微处理器内部探秘

首先一张图来概括一下本章的内容结构。

一、CPU内部结构

8088/8086CPU内部都是由执行单元EU和总线接口单元BIU两大部分构成,如下图所示:

1、EU部分
EU主要功能包括分析指令执行指令暂存中间运算结果并保留运算结果的特征四部分。下面是EU包含的各个模块:

(1)通用寄存器
EU部分包含了8个通用寄存器,可分为数据寄存器(AX、BX、CX、DX)、地址指针寄存器(SP、BP)和变址寄存器(DI、SI)三类。

数据寄存器一般用于存放参与运算的数据或运算结果。既可以用作4个16位寄存器,也可以将高8位与低8位分开,形成相互独立的8个8位寄存器。另外,数据寄存器除了作为通用寄存器使用外,还有各自的习惯用法,如下表所示:

数据寄存器习惯用法
AX累加器,存放算数逻辑运算中的操作数,及用作所有I/O指令与外设接口信息传送的地方
BX基址寄存器,常用来存放访问内存时的基址
CX计数寄存器,在循环和串指令操作中用作计数器
DX数据寄存器,可用于存放I/O端口的地址,且可以和AX组合起来存放32位数据,DX为高位

地址指针寄存器有两个。BP是基址指针寄存器,常用于存放所访问内存的基地址,更常用于与堆栈段寄存器SS一起配合使用(下文图解)。SP是堆栈指针寄存器,它在堆栈操作中用于存放栈顶偏移地址,永远指向堆栈的栈顶。作为通用寄存器,这哥俩也可以存放数据,但一般不这么用。

变址寄存器也有两个。SI(Source Index)为源变址寄存器,DI(Destination Index)为目的变址寄存器,这哥俩常用于变址寻址方式中的索引指针。

(2)运算数暂存器可将存放从通用寄存器过来的运算数,并送到ALU。

(3)ALU(Arithmetic Logical Unit),算数逻辑单元,即常说的运算器。
运算器对数据的加工处理包括:数值数据的算数运算,主要是加减乘除等;逻辑数据的逻辑操作,主要有与、或、非、异或等运算。此外,它还能暂存参加运算的数据和中间结果,即其内部会集成一些寄存器、选择器、译码电路等。

(4)标志寄存器,该寄存器保留运算结果的一些特征。
该寄存器有16位,保留7位(*),共使用了9位。这9位中有6个状态标志和3个控制标志,如下:

****OFDFIFTFSFZF*AF*PF*CF
D 15 D_{15} D15 D 14 D_{14} D14 D 13 D_{13} D13 D 12 D_{12} D12 D 11 D_{11} D11 D 10 D_{10} D10 D 9 D_9 D9 D 8 D_8 D8 D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1 D 0 D_0 D0
状态标志位说明
CF进位标志位,当进行加(减)法运算时,若最高位向前有进(借)位时,CF=1,否则CF=0
PF奇偶标志位,当运算结果的低8位中1的个数为偶数时PF=1,为奇数时PF=0
AF辅助进位标志位 ,在加(减)法操作中, D 3 D_3 D3 D 4 D_4 D4有进位(借位)发生时AF=1,否则AF=0
ZF零标志位,当运算结果为0时,ZF=1,否则ZF=0
SF符号标志位,当运算结果的最高位为1时,SF=1,否则SF=0
OF溢出标志位,当算数运算的结果超出了带符号数的范围,即溢出时OF=1,否则OF=0

此处应该说明,进位标志CF与溢出标志OF是两个意义不同的标志,不要混淆了。CF=1表示无符号数运算结果超出了范围,运算结果仍然正确。OF=1表示有符号数的运算结果超出了范围,运算结果已经不正确

控制标志位说明
TF陷阱标志位,当TF=1时,CPU处于单步执行指令的工作方式。每执行一条指令后,自动产生一次单步中断,从而能够逐条指令地检查程序
IF中断允许标志位,IF=1使CPU可以相应可屏蔽中断请求。IF=0使CPU无法相应可屏蔽中断请求。IF的状态对不不可屏蔽中断及内部中断没有影响
DF方向标志位,方向标志位在执行串指令操作时控制操作的方向。DF=1时,按减地址方式进行;DF=0时,按增地址方向进行

(5)EU控制电路,该部分负责从BIU的指令队列中取指令,并对指令译码,根据指令要求向EU内部各部件发出控制命令以实现各条指令的功能。

2、BIU部分
总线接口单元BIU负责CPU与存储器、I/O接口之间的信息传送。各个子模块介绍如下:

(1)地址加法器。
地址加法器是用来产生20位物理地址的。生成示意图如下:

8088/8086的寻址能力是1MB( 2 20 2^{20} 220),即有20条地址线。在访问内存时,很多情况都要通过寄存器来间接寻址,但每个寄存器都只有16位,于是将1MB的地址空间分为若该个64KB( 2 16 2^{16} 216)的段。用两个段来表示一个物理地址:
物理地址 = 段基址×16 + 段内偏址。×16表示段基址向左移了4个二进制位, 仔细观察会发现不同的逻辑地址可能是同一物理地址。系统约定的逻辑地址来源如下表所示:

(2)段寄存器
有了通用寄存器,为什么会需要段寄存器?段寄存器的设立不仅使8088/8086的di地址存储空间扩大到1MB,而且为信息按特征分类存储提供了方便。BIU部分包含了4个16位的段寄存器,分别是代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES,它们用来存放对应段的“段基址”。更改段寄存器的内容意味着内存段的移动,CS寄存器里的内容不能通过程序设计,DS、SS和ES寄存器的内容可以由程序设置。此外,存储器也可对应划分为段:程序段—用于存放程序的指令代码;数据段及附加数据段—用于存放数据和运行结果;堆栈段—用于传递参数、保存数据和状态信息。此外,段寄存器常常和其他寄存器一起配合使用,实现固定地址的访问,如下图:

(3)指令指针寄存器IP
该寄存器用于存放要执行的下一条指令的偏移地址。CPU取指令时总是以CS为段基址,IP为段内偏移地址,IP会自动自增,用户不能直接访问IP。
总结一下。8088/8086 CPU内部的寄存器按功能可以分为通用寄存器、段寄存器和控制寄存器三大类,如下图:

(4)指令队列
指令队列用来存储接下来将要执行的好几条指令,它的存在是EU和BIU并行工作的基础。8080指令队列长度为6字节,8088指令队列长度为4字节。只要指令队列出现空字节,且BIU不与I/O设备、存储器进行数据交换时,BIU就会不停地取指令放到指令队列。

(5)总线控制电路
总线控制电路根据收到的物理地址,将存储器中的指令送入指令队列,控制取指令的过程。

二、引脚功能

关于引脚功能只需了解即可,8086 CPU有两种工作模式,下图为8086工作在最小模式(最大模式)下的引脚图。

引脚号引脚名功能
1GND地线
2-16、39 A D 15 − A D 0 AD_{15}-AD_0 AD15AD0地址总线、数据总线分时复用总线的引脚
17NMI非可屏蔽中断请求信号,边沿触发,正跳变有效
18INTR可屏蔽中断请求信号,高电平有效
19CLK时钟输入信号,为CPU和总线控制器提供定时信号
20GND地线
21RESETCPU 复位信号,高电平有效
22READY准备就绪输入信号,高电平有效
23 T E S T ‾ \overline{TEST} TEST测试输入信号,低电平有效
24 I N T A ‾ ( Q S 0 ) \overline{INTA}(QS_{0}) INTA(QS0)CPU输出中断响应信号
25 A L E ( Q S 0 ) ALE(QS_0) ALE(QS0)地址锁存允许信号
26 D E N ‾ ( S 0 ‾ ) \overline{DEN}(\overline{S_0}) DEN(S0)数据允许信号
27 D T / R ‾ ( S 1 ‾ ) DT/\overline{R}(\overline{S_1}) DT/R(S1)数据发送/接收信号
28 M / I O ‾ ( S 2 ‾ ) M/\overline{IO}(\overline{S_2}) M/IO(S2)区分CPU当前访问的是存储器还是I/O
29 W R ‾ ( L O C K ‾ ) \overline{WR}(\overline{LOCK}) WR(LOCK)写信号,低电平时写存储器或写I/O端口
30 H L D A ( R Q ‾ / G T ‾ 1 ) HLDA(\overline{RQ}/\overline{GT}_1) HLDA(RQ/GT1)总线请求响应输出信号,高电平有效
31 H O L D ( R Q ‾ / G T ‾ 0 ) HOLD(\overline{RQ}/\overline{GT}_0) HOLD(RQ/GT0)总线请求输入信号,高电平有效
32 R D ‾ \overline{RD} RD读信号,低电平时读存储器或读I/O端口
33 M N / M X ‾ MN/\overline{MX} MN/MX工作模式选择,低电平最大模式,高电平最小模式
34 B H E ‾ / S 7 \overline{BHE}/S_7 BHE/S7总线高位使能信号,三态输出
35-38 A 16 − A 19 / S 3 − S 6 A_{16}-A_{19}/S_3-S_6 A16A19/S3S6地址、状态复用引脚
40 V C C V_{CC} VCC接电源正极

更详细说明请翻书。

三、CPU工作时序

1、时钟周期与总线周期
说到工作时序,不得不谈谈时钟。刚开始学习时,我对时钟的很是困惑,到底什么是时钟?它对CPU的工作有什么作用?根据百度百科,时钟是一种度量和显示时间的仪器。在我们日常生活中的基本时间单位有,秒、分、时等等,而在CPU的世界里时间单位是一个脉冲周期,称为时钟周期,它的时间长短由CPU的工作频率决定。
我们说CPU是个“傻子”,一辈子只认得二进制数,在它生命的大部分时间都在读取指令和执行指令,也就是通过总线实现对存储器或I/O端口的访问。为了描述CPU的工作时长,人们定义CPU通过总线对存储器或I/O端口访问一次的时间称为总线周期。时钟周期由频率决定,频率确定了,时钟周期便是一个确定值;而总线周期对于不同指令所花费的时钟周期一般不同。总线周期可以拆分为好几个时钟周期,一个总线周期至少包含4个时钟周期。典型的总线周期如下图:

T 1 T_1 T1 状态:总线周期的开始,地址/数据总线上输出要访问存储单元或 I/O端口的地址信号。

T 2 T_2 T2 状态:CPU从地址/数据总线上撤销地址信号,使地址高4位输出状态信息,低16位变成高阻态。 以便下面CPU使用该地址/数据线进行数据的传送。

T 3 − T 4 T_3-T_4 T3T4 状态:数据在 CPU与存储器或I/O端口之间进行传送。这时低16位地址/数据复用总线作为数据线使用。 T 4 T_4 T4状态还标志着总线周期结束。另外,当存储器或外设速度慢时,可通过READY 线,在 T 3 T_3 T3 T 4 T_4 T4之间插入 一个或多个等待周期 T W T_W TW来延长总线周期时间,以便与慢速设备同步操作。

下图为8086最小模式下读操作总线周期时序图。

8086最小模式下写操作总线周期时序图。

四、总线结构

所谓总线,就是各模块之间传递信息的通道。可以将系统中的总线分为三类:
①芯片级总线:芯片内部的总线,如CPU芯片内的总线。
②板级总线:连接印刷电路板中各个部件的总线。
③系统级总线:连接系统中各个电路板的总线。在多处理机系统中,常把连接各个处理机的总线称为系统总线,而处理机内部的总线称为内部总线。

另外还值得说的就是总线系统的一些性能指标:
(1)总线宽度
总线宽度是指数据总线的数目,也是一次能同时传输的数据位数,用位表示,如总线宽度8位、16位、32位、64位等。
(2)总线传输率
在总线上每秒传输的最大的字节数,称为总线传输速率,用MB/s表示。总线传输率 Q = f ∗ w / n ( M B / s ) Q=f*w/n(MB/s) Q=fw/n(MB/s),其中f是总线工作频率,单位为MHz; w为总线宽度,单位为字节,如32位总线时w=4; n是每传送一次数据所需的时钟周期个数。
(3)总线工作频率
总线工作的频率,它不同于CPU的主频。
(4)时钟同步/异步
总线上的数据传输与时钟同步工作的总线称为同步总线;与时钟不同步工作的总线称为异步总线。
(5)数据总线/地址总线的多路复用与非多路复用。
地址总线与数据总线分开的总线是非多路复用总线。地址和数据共用一条总线称为多路复用总线。
(6)信号线数
信号线数是地址总线数、数据总线数和控制总线数的总和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值