第二周 微处理器与总线
大家好,又是我,沉迷学习无法自拔的小笨蛋康sir。 这个文集将会同步更新我观看吴宁老师的《微机原理与接口技术》教学视频写的笔记,学习笔记,大概每周一章。 有问题大家可以在评论下面留言讨论,欢迎纠错! 欢迎收藏阅读,动动小手给个硬币点个赞。 ——@正能量的康sir
也可移步我的博客(https://blog.csdn.net/qq_33956508)获得更好的阅读体验,也会更新一些其它技术类文章。

第9讲 8088微处理器
8088/8086属于第三代处理器的典型代表。内部都是16位(二代8位)
8086对外总线16位。8088对外总线8位以兼容以前的设备。
关注点:
8088/8086CPU能够实现指令并行流水工作的原因
实地址模式下的存储器地址变换原理
如何知道CPU当前工作状态及指令运算结果的特征
8088/8086CPU的特点(相对于以前):
采用并行流水线工作方式(通过设置指令领取队列实现)(CPU内部结构)
对内存空间实行分段管理(将内存分为4个逻辑段并设置地址段寄存器,以实现对1MB空间的寻址)(实模式存储器寻址)
支持协处理器(工作模式)
8088/8086CPU的两种工作模式
最小模式:为单处理器模式,所有控制信号由微处理器产生
最大模式:为多处理器模式,部分控制信号由外部总线控制器产生。用于包含协处理器的情况下。
最小模式下的总线连接示意图

地址信息——>控制信息——>数据信息
ALE把地址信息锁到地址锁存器中
最大模式下的总线连接示意图

两种工作模式的选择方式
8088是工作在最小还是最大模式由MN/MX引线的状态决定。
(上横杠表示这条引线上低电平时为最大模式)
MN/MX-0:工作于最大模式
MN/MX-1:工作于最小模式
第10讲 8088 CPU主要引线和内部结构
一、8088CPU主要引线
总体分为4组
完成一次访问内存或接口所需要的主要信号
与外部同步控制信号
中断请求和响应信号
总线保持和响应信号
回顾“微机读取一条指令的工作过程“

1. 发出读取数据所在的目标地址(地址信号)
内存储器单元地址
I/O接口地址
2. 发出读控制信号(控制信号)
3. 送出传输的数据(数据信号)
8088 CPU最小模式下的主要引脚信号
地址线和数据线:
AD0—AD7:低8位地址和低8位数据信号分时复用。在传送地址信号时为单向,传送数据信号时为双向。
A16--A19:高4位地址信号,与状态信号分时复用。
A8—A15 :8位地址信号
20位地址信号 可产生220=1M个编码
8位数据信号 可同时传输8bit二进制码
(1)主要控制信号
(#号作用相当于上横线,代表低电位时有效)
#WR: 写信号;
#RD: 读信号;
IO/#M:为“0”表示访问内存,为“1”表示访问接口;
#DEN: 低电平有效时,允许进行读/写操作;
DT/#R:数据收发器的传送方向控制;
ALE: 地址锁存信号;
RESET:复位信号。
例如:当#WR=1,#RD=0,IO/#M=0时,
表示CPU当前正在进行读存储器操作
(2)READY信号——外部同步控制信号
4个时钟周期(0.2s)为一个总线周期
若T3周期后检测引脚,ready引脚若为低电平就插入一个等待周期Twait,然后再检测,若低电平再插入…直到检测到高电平再插入T4个周期。(4个周期完成不了的情况)

(3) 中断请求和响应信号
INTR:可屏蔽中断请求输入端
NMI: 非屏蔽中断请求输入端
INTA:中断响应输出端
(4) 总线保持信号
HOLD:总线保持请求信号输入端。当CPU以外的其他设备要求占用总线时,通过该引脚向CPU发出请求。
HLDA:总线保持响应信号输出端。CPU对HOLD信号的响应信号。
8088和8086CPU引线功能比较
数据总线宽度不同:8088的外部总线宽度是8位,8086为16位。
访问存储器和输入输出控制信号含义不同:8088——IO/M=0表示访问内存; 8086——IO/M=1表示访问内存。
其他部分引线功能的区别。
二、8088CPU的内部结构
微处理器:运算器、控制器、寄存器。
执行单元(EU)
总线接口单元(BIU)

图片说明:
FLAGS:标志寄存器,保留运算结果的特征、执行单元的控制逻辑
执行单元EU
构成:运算器、8个通用寄存器、1个标志寄存器,EU部分控制电路
功能:指令译码、指令执行、暂存中间运算结果、保存运算结果特征。
总线接口单元BIU
功能:
从内存中取指令到指令预取队列。指令预取队列是并行流水线工作的基础。
负责与内存或输入/输出接口之间的数据传送
在执行转移程序时,BIU使指令预取队列复位,从指定的新地址取指令,并立即传给执行单元执行
结论
指令预取队列的存在使EU和BIU两个部分可同时进行工作。实现指令的并行执行
提高了CPU的效率
降低了对存储器存取速度的要求
第11讲 8088 CPU内部寄存器
含14个16位寄存器,按功能分三类:
8个通用寄存器
4个段寄存器
2个控制寄存器
深入理解每个寄存器中数据的作用
16位二进制码的含义
通用寄存器
数据寄存器(AX,BX,CX,DX)
地址指针寄存器(SP,BP)
变址寄存器(SI,DI)
数据寄存器
8088/8086含4个16位数据寄存器,它们又可分为8个8位寄存器,即:
AX——AH,AL
BX——BH,BL
CX——CH,CL
DX——DH,DL
数据寄存器特有的习惯用法
AX:累加器。所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中.
BX:基址寄存器。在间接寻址中用于存放基地址.
CX:计数寄存器。用于在循环或串操作指令中存放计数值.
DX:数据寄存器。在间接寻址的I/O指令中存放I/O端口地址(除了输入输出指令中,DX存放的地址一定是数据地址);在32位乘除法运算时,存放
高16位数。
地址指针寄存器
SP:堆栈指针寄存器,其内容为栈顶的偏移地址
BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
BX和BP应用上的区别:
作为通用寄存器,二者均可用于存放数据;
作为基址寄存器,用BX表示所寻找的数据在数据段;用BP则表示数据在堆栈段。
变址寄存器
SI:源变址寄存器
DI:目标变址寄存器
变址寄存器在指令中常用于存放数据在内存中的地址
除了AX、CX之外 其它六个寄存器里都可能存放的是地址。但是作为8位寄存器AH、AL、BH、BL…里一定存放的是数据
2.控制寄存器
IP:指令指针寄存器,其内容为下一条要取的指令的偏移地址。Instruction Pointer Register

FLAGS:标志寄存器,存放运算结果的特征 。16位只有9位有意义,7位空闲。
6个状态标志位(CF,SF,AF,PF,OF,ZF)
3个控制标志位(IF,TF,DF)
(1)状态标志位
CF(Carry Flag): 进位标志位。加(减)法运算时,若最高位有进(借)位则CF=1
OF(Overflow Flag): 溢出标志位。当算术运算的结果超出了有符号数的可表达范围时, OF=1
ZF(Zero Flag): 零标志位。当运算结果为零时ZF=1
SF(Sign Flag): 符号标志位。当运算结果的最高位为1时,SF=1。
下面这两个标志位只对8位有效:
PF(Parity Flag):奇偶标志位。运算结果的低8位中“1”的个数为偶数时PF=1。
AF(Auxiliary Carry Flag):辅助进位标志位。加(减)操作中,若Bit3向Bit4有进位(借位)(注意位是从0开始的,所以是右数第四个数的位置向右数第5个数位置进位), AF=1
例题
给出以下运算结果及运算后各状态标志位的状态:10110110+11110100
10110110 + 11110100= 1 10101010
CF=1, OF=0(最高位进位状态 异或 次高位进位状态=1,则结果溢出.这里最高位有进位,次高位有进位), AF=0, PF=1, SF=1, ZF=0
(2)控制标志位
TF(Trap Flag): 陷井标志位,也叫跟踪标志位。TF=1时,使CPU处于单步执行指 令的工作方式。
IF(Interrupt Enable Flag): 中断允许标志位。IF=1使CPU可以响应可屏蔽中断请求。
DF(Direction Flag): 方向标志位。在数据串操作时确定操作的方向。
段寄存器
作用:用于存放相应逻辑段的段基地址
8086/8088内存中逻辑段的类型:
代码段——存放指令代码
数据段——存放操作的数据
附加段——存放操作的数据
堆栈段——存放暂时不用但需保存的数据
段寄存
CS:代码段寄存器,存放代码段的段基地址
DS:数据段寄存器,存放数据段的段基地址
ES附加段寄存器,存放数据段的段基地址
SS堆栈段寄存器,存放堆栈段的段基地址
段寄存器的值表明相应逻辑段在内存中的位置
什么是逻辑段?为什么要分段?下一讲会说到
第12讲 实模式下的存储器寻址(很重要)
本讲提要:
内存分段管理思想
实模式下的内存地址变换
段寄存器的应用
堆栈的概念
内存储器管理
8088CPU是16位体系结构的微处理器
可以同时处理(产生)16位二进制码(可以产生64K个编码,直接管理64K个内存单元)
8088CPU需要管理1MB内存:需要能够产生1M个地址编码

前面有个“区域号”(红色X)
如何实现呢?下面来看内存分段管理方式
内存地址变换
欲实现对1MB内存空间的正确访问, 每个内存单元在整个内存空间中必须 具备惟一地址——物理地址

内存地址变换:如何将直接产生的16位编码变换为20位物理地址
1、内存单元的编址(1)
内存每个单元的地址在逻辑上都由两部分组成:
段(基)地址:指示存储单元在整个内存空间中处于哪个区域(即“段”)
段内地址(相对地址/偏移地址):指示存储单元在段中的相对位置(与段中第1个单元的距离)

存储器的编址
段基地址:决定存储单元在内存中的位置
相对地址(偏移地址):该存储单元相对段内第一个单元的距离
逻辑段的起始地址称为段首:每个逻辑段内的第一个单元

由偏移地址的定义得,段首的偏移地址=0
存储器的编址(3)
内存单元地址:

段首的偏移地址:
0000H

存储器的编址(4)
物理地址:内存单元在整个内存空间中的惟一地址
例:段基地址=6000H
段首地=60000H
偏移地址=0009H
物理地址=60009H

2.实地址模式下的存储器地址变换
内存物理地址由段基地址和偏移地址组成

物理地址=段基地址x16+偏移地址
因为16进制一位相当于4位二进制,二进制乘一个2的n次方就是左移n位,所以这里乘16的话,16进制左移一位即可(相当于二进制左移4位)
3. 段寄存器
作用:用于存放相应逻辑段的段基地址
8086/8088内存中逻辑段的类型
代码段——存放指令代码
数据段——存放操作的数据
附加段——存放操作的数据
堆栈段——存放暂时不用但需保存的数据
8086/8088内存中每类逻辑段的数量
最多为64K个
段寄存器的分类
CS:代码段寄存器,存放代码段的段基地址
DS:数据段寄存器,存放数据段的段基地址
ES:附加段寄存器,存放数据段的段基地址
SS:堆栈段寄存器,存放堆栈段的段基地址
段寄存器的值表示相应逻辑段在内存中的位置
例题1:设某操作数存放在数据段,DS=250AH,数据所在单元的偏移地址=0204H.则该操作数所在的单元的物理地址为:250AHX16+0204H=252A4H
例题2:设DS=2500H,某单元的偏移地址=00A0H,则有:物理地址=250A0H

逻辑段与逻辑地址
内存的分段时逻辑分段,不是物理段。各个逻辑段在地址上可以不相连、可以部分重合,也可以完全重合。
每个内存单元具有唯一物理地址,但可能具有多个逻辑地址。即:
一个内存单元可以同时处于两个逻辑段
一个内存单元可以在不同的时刻属于相同或不同类型的段
一个内存单元在同一时刻可以属于不同类型的段
例题3:
已知:CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H
画出各段在内存中的分布。

(默认段尾物理地址=段首+ FFFFH (二进制16个1)例如10550H+FFFFH=2054H。因为16位结构,一个逻辑段默认大小2的16次方=64K)
逻辑段说明
同一程序模块装入内存时,不同类型的段可以装入在相同/不同的物理空间
两个逻辑段完全重合或部分重合
两个不同程序模块装入主存时,同一类型的逻辑段也可以装入相同或不同的物理空间中

4.堆栈及堆栈段的使用
堆栈:
内存中一个特殊区域,用于存放暂时不用或需要保护的数据。
常用于响应中断或子程序调用。
若栈顶=栈底——>空栈
若栈顶=栈首——>满栈

堆栈示例:
已知SS=1000H,SP=0100H
则:
堆栈段的段首地址=10000H
栈顶(偏移)地址=0100H
若该段最后一个单元地址为10200H,则:
栈底偏移地址=0200H
第13讲 8088系统总线
重点:总线的概念、如何看时序图
总线时序
CPU工作时序:CPU各引脚信号在时间上的关系
总线周期:CPU完成一次访问内存(或接口)操作所需要的时间。一个总线周期至少包括4个时钟周期。

8088最小模式下的工作时序

总线的概念
总线:
是一组导线和相关的控制、驱动电路的集合。是计算机系统各部件之间传输地址、数据和控制信息的通道。
地址总线(AB)
数据总线(DB)
控制总线(CB)
总线按层次结构分类:CPU总线(没有标准)、系统总线(CPU和接口之间,分为PCI和PCIE)、外部总线(接口和外设之间)。
总线结构
单总线结构
优点:控制简单、扩充方便
缺点:由于所有设备部件均挂接在单一总线上使这种结构只能分时工作,即同一时刻只能在两个设备之间传送数据,这就使系统总体数据传输的效率和速度受到限制

多总线结构:双总线结构(面向CPU的双总线结构、面向主存的双总线结构)、多总线结构
面向CPU的双总线结构
优点:在CPU与主存储器之间、 CPU和l/0设备之间分别设置了总线, 从而提高了微机系统信息传送的速率
缺点:外设与主存之间信息交换必须通过 CPU 才能进行中转,而降低了 CPU 的丁 作效率(或增加了 CPU 的占用率)

面向存储器的双总线结构
CPU 与主存储器之间又专门设置了一条高速总线,使 CPU 可以通过它直接与主存储器交换信息
优点:使信息传送效率提高,而且减轻了总线的负担
缺点:造价较高

现代微机中的多总线结构

总线的基本功能
数据传送
仲裁控制
出错处理
总线驱动
总线的主要性能指标
总线带宽(B/S):单位时间内总线上可传送的数据量。总线带宽=位宽X工作频率。(可以想象成单位车流量=道路宽度x车速)
总线位宽(bit):能同时传送的数据位数
总线的工作频率(MHz)
总线带宽=(位宽/8)X(工作频率/每个存取周期的时钟数)
微处理器小结
本章提要
微处理器的一般构成
8088CPU最小模式下的主要引线及其功能
8088CPU的内部结构
内部寄存器功能、寄存器中数据的含义、8位寄存器中存放的均为运算的数据
实地址模式下的存储器寻址,逻辑地址,段基地址,偏移地址,物理地址
堆栈,栈顶地址,栈底地址,堆栈段基地址
内部寄存器
全部为16位寄存器
只有4个数据寄存器分别可分为2个8位寄存器
所有16位寄存器中:
全部通用寄存器中,只有AX和CX中的内容一定为参加运算的数据,其余通用寄存器中的内容可能是数据,也可能是存放数据的地址;
SP中的内容通常为堆栈段的栈顶地址;
段寄存器中的内容为相应逻辑段的段地址;
IP中的内容为下一条要取的指令的偏移地址;
FLAGS中有9位标志位
实模式下的存储器寻址小结
内存的地址:
逻辑地址(编程使用的地址):
段地址:偏移地址(实际编程中通常只给出偏移地址,段地址采用系统默认设定)
段首地址:每个逻辑段第一个单元的地址
偏移地址:相对于所在逻辑段内段首的距离。段首的偏移地址=0
物理地址:内存单元在整个内存中的惟一地址
每个内存单元在整个内存空间中都具有惟一的物理地址
每个内存单元的地址都由两部分组成:段基地址 段内相对地址(偏移地址)
段基地址决定了逻辑段在内存中所占的区域,改变段基地址,则改变了逻辑段的位置。
一个逻辑段的默认长度为64KB,最小长度值为16B。
逻辑段可以有多个,但只有4种类型。在一个程序模块中,每种类型的逻辑段最多只能有一个。