微机原理与接口技术(二)

第二章 8088/8086微处理器

特点:

  • 采用并行流水线工作方式——通过设置指令预取队列实现
  • 对内存空间实行分段管理——将内存分为4个阶段并设置地址段寄存器,以实现对1MB空间的寻址
  • 支持协处理器

8088/8086 CPU的两种工作模式

  • 8088/8086CPU可工作于两种模式下:最小模式、最大模式

  • 最小模式为单处理器模式,所有控制信号由微处理器产生

  • 最大模式为多处理器模式,部分控制信号由外部总线控制器产生

    • 用于包含协处理器的情况下

最小模式下的总线连接示意图

见图14

14

最大模式下的总线连接示意图

见图15

15

两种工作模式的选中方式

  • 8088是工作在最小还是最大模式由MN/MX引线的状态决定。(MX有上横杠,表示低电平有效)
    • MN/MX-0——工作于最大模式
    • MN/MX-1——工作于最小模式

8088的主要引线及内部结构

8088 CPU最小模式下的主要引脚信号

  • 8088最小模式下的主要引脚信号→4组
    • 完成一次访问内存或接口所需要的主要信号
    • 与外部同步控制信号
    • 中断请求和响应信号
    • 总线保持和影响信号

见图10

微处理器读取一条指令的控制过程

  • 发出读取数据所在的目标地址(地址信号)

    • 内存储器单元地址
    • I/O接口地址
  • 发出读控制信号(控制信号)

  • 送出传输的数据(数据信号)

8088 CPU最小模式下的主要引脚信号

  • 地址线和数据线:
    • AD₀—AD₇:低8位地址和低8位数据信号分时复用。在传送地址信号时为单向,传送数据信号时为双向。
    • A₁₆—A₁₉:高4位地址信号,与状态信号分时复用。
    • A₈—A₁₅:8位地址信号

20位地址信号→可产生2²⁰=1M个编码

8位数据信号→可同时传输8bit二进制码

  • 主要控制信号
    • #WR:写信号
    • #RD:读信号
    • IO/#M:为“0”表示访问内存,为“1”表示访问接口
    • #DEN:低电平有效时,允许进行读/写操作
    • DT/#R:数据收发器的传送方向控制
    • ALE:地址锁存信号
    • RESET:复位信号

例:当#WR=1,#RD=0,IO/#M=0时,表示CPU当前正在进行读存储器操作

  • READY信号

见图16

16

  • 中断请求和相应信号

    • INTR:可屏蔽中断请求输入端
    • NMI:非屏蔽中断请求输入端
    • INTA:中断响应输出端(INTA有上横杠,表示低电平有效)
  • 总线保持信号

    • HOLD:总线保持请求信号输入端。当CPU以外的其他设备要求占用总线时,通过该引脚向CPU发出请求。
    • HLDA:总线保持响应信号输出端。CPU对HOLD信号的响应信号。

8088和8086CPU引线功能比较

  • 数据总线宽度不同

    • 8088的外部总线宽度是8位,8086为16位。
  • 访问存储器和输入输出控制信号含义不同

    • 8088——IO/M=0表示访问内存
    • 8086——IO/M=1表示访问内存
  • 其他部分引线功能的区别

8088内部结构

微处理器:运算器、控制器、寄存器

逻辑上分为:执行单元(EU)、总线接口单元(BIU)

见图17

17

执行单元

  • 构成:运算器、8个通用寄存器、1个标志寄存器、EU部分控制电路
  • 功能:指令译码、指令执行、暂存中间运算结果、保存运算结果特征

总线接口单元

功能:

  • 从内存中取指令到指令预取队列

    • 指令预取队列是并行流水线工作的基础
  • 负责与内存或输入/输出接口之间的数据传送

  • 在执行转移程序时,BIU使指令预取队列复位,从指定的新地址取指令,并立即传给执行单元执行

结论

  • 指令预取队列的存在使EU和BIU两个部分可同时进行工作(实现了指令的并行执行)
    • 提高了CPU的效率
    • 降低了对存储器存取速度的要求

8088内部寄存器

内部寄存器的类型

  • 含14个16位寄存器,按功能可分为三类
    • 8个通用寄存器
    • 4个段寄存器
    • 2个控制寄存器

深入理解:每个寄存器中数据的含义

一、通用寄存器

  • 数据寄存器(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端口地址;在32位乘除法运算时,存放高16位数

地址指针寄存器

  • SP:堆栈指针寄存器,其内容位栈顶的偏移地址

  • BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址

BX与BP在应用上的区别

  • 作为通用寄存器,二者均可用于存放数据
  • 作为基址寄存器,用BX表示所寻找的数据在数据段;用BP则表示数据在堆栈段

变址寄存器

  • SI:源变址寄存器

  • DI:目标变址寄存器

  • 变址寄存器在指令中常用于存放数据在内存中的地址

二、控制寄存器

  • IP:指令指针寄存器,其内容为下一条要取的指令的偏移地址
  • FLAGS:标志寄存器,存放运算结果的特征
    • 6个状态标志位(CF,SF,AF,PF,OF,ZF)
    • 3个控制标志位(IF,TF,DF)

状态标志位

  • CF(Carry Flag)

    • 进位标志位。加(减)法运算时,若最高位有进(错)位则,CF=1
  • OF(Overflow Flag)

    • 溢出标志位。当算数运算的结果超出了有符号数的可表达范围时,OF=1
  • ZF(Zero Flag)

    • 零标志位。当运算结果为零时,ZF=1
  • SF(Sign Flag)

    • 符号标志位。当运算结果的最高位为1时,SF=1
  • PF(Parity Flag)

    • 奇偶标志位。运算结果的低8位中“1”的个数为偶数时PF=1
  • AF(Auxiliary Carry Flag)

    • 辅助进位标志位。加(减)操作中,若Bit3向Bit4有进位(借位),AF=1

控制标志位

  • TF(Trap Flag)

    • 陷井标志位,也叫跟踪标志位。TF=1时,使CPU处于单步执行指令的工作方式
  • IF(Interrupt Enable Flag)

    • 中断允许标志位。IF=1使CPU可以响应可屏蔽中断请求
  • DF(Direction Flag)

    • 方位标志位。在数据串操作时确定操作的方向

三、段寄存器

  • 作用:用于存放相应逻辑段的段基地址

  • 8088/8086内存中逻辑段的类型

    • 代码段→存放指令代码
    • 数据段→存放操作的数据
    • 附加段→存放操作的数据
    • 堆栈段→存放暂时不用但需保存的数据

段寄存器

  • CS:代码段寄存器,存放代码段的段基地址
  • DS:数据段寄存器,存放数据段的段基地址
  • ES:附加段寄存器,存放数据段的段基地址
  • SS:堆栈段寄存器,存放堆栈段的段基地址

段寄存器的值表明相应逻辑段在内存中的位置


实模式下的存储器寻址

内存储器管理

  • 8088CPU是16位体系结构的微处理器

  • 可以同时处理(产生)16位二进制码

    • 可以产生64K个编码,直接管理64K个内存单元
  • 8088CPU需要管理1MB内存(使用内存分段管理方式实现)

    • 需要能够产生1M个地址编码

内存地址变换

  • 欲实现对1MB内存空间的正确访问,每个内存单元在整个内存空间中必须具备唯一地址→物理地址

  • 将直接产生的16位编码变换为20位物理地址即为内存地址变换

一、内存单元的编址

  • 内存每个单元的地址在逻辑上由两部分组成:

    • 段(基)地址:指示存储单元在整个内存空间中处于哪个区域(段)
    • 段内地址(相对地址/偏移地址):指示存储单元在段中的相对位置(与段中第一个单元的距离)
      • 8088为16位结构,所以段地址和偏移地址均为16位(也就是共32位)
  • 段基地址:决定存储单元在内存中的位置

  • 相对地址(偏移地址):该存储单元相对段内第一个单元的距离

  • 逻辑段的起始地址称为段首,由偏移地址的定义得:段首的偏移地址=0

  • 物理地址:内存单元在整个内存空间中的唯一地址(20位)

见图18、19

18

19

二、实地址下的存储器地址变换

  • 内存物理地址由段基地址和偏移地址组成

  • 物理地址=段基地址×16+偏移地址

三、段寄存器

  • 作用:用于存放相应逻辑段的段基地址

  • 8086/8088内存中逻辑段的类型

    • 代码段→存放指令代码
    • 数据段→存放操作的数据
    • 附加段→存放操作的数据
    • 堆栈段→存放暂时不用但需保存的数据
  • 8086/8088内存中每类逻辑段的数量

    • 最多为64k个

段寄存器

  • CS:代码段寄存器,存放代码段的段基地址
  • DS:数据段寄存器,存放数据段的段基地址
  • ES:附加段寄存器,存放数据段的段基地址
  • SS:堆栈段寄存器,存放堆栈段的段基地址

例1:

  • 设某操作数存放在数据段,DS=250AH,数据所在单元的偏移地址=0204H
  • 则该操作数所在单元的物理地址为:
    • 250AH×16+0204H=252A4H

例2:

  • 设:DS=2500H,某单元的偏移地址=00A0H,则有:

见图20

20

逻辑段与逻辑地址

  • 内存的分段是逻辑分段,不是物理段。各个逻辑段在地址上可以不相连,可以部分重合,也可以完全重合。

  • 每个内存单元具有唯一物理地址,但可能具有多个逻辑地址。即:

    • 一个内存单元可以同时处于两个逻辑段
    • 一个内存单元可以在不同时刻属于相同(或不同)类型的段
    • 一个内存单元在同一个时刻可以属于不同类型的段

例3:

  • 已知:CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H
  • 画出各段在内存中的分布
    • CS=1055H,段首地址=10550H,默认段尾地址=3509FH
    • DS=250AH,段首地址=250A0H,默认段尾地址=3509FH
    • ES=2EF0H
    • SS=8FF0H

见图21

21

逻辑段说明

  • 同一程序模块装入主存时,不同类型的段可以装入在相同/不同的物理空间

    • 两个逻辑段完全重合或部分重合
  • 两个不同程序模块装入主存时,同一类型的逻辑段也可以装入相同或不同的物理空间中

四、堆栈及堆栈段的使用

  • 堆栈:
    • 内存中一个特殊区域,用于存放暂时不用或需要保护的数据
    • 常用于响应中断或子程序调用

见图22

22

  • 若栈顶=栈底→空栈

  • 若栈顶=栈首→满栈

堆栈示列:

  • 已知:SS=1000H,SP=0100H

  • 则:

    • 堆栈段的段首地址=10000H
    • 栈顶(偏移)地址=0100H
  • 若该段最后一个单元地址为10200H,则:

    • 栈底偏移地址=0200H

8088系统总线

一、总线时序

  • CPU工作时序:CPU各引脚信号在时间上的关系
  • 总线周期:
    • CPU完成一次访问内存(或接口)操作所需要的时间
    • 一个总线周期至少包括4个时钟周期

见图23

23

8088最小模式下的工作时序

见图24

24

二、总线的概念

  • 总线:是一组导线和相关的控制、驱动电路的集合。是计算机系统各部件之间传输地址、数据和控制信息的通道。

    • 地址总线(AB)
    • 数据总线(DB)
    • 控制总线(CB)
  • 总线按层次结构分类

    • 按层次结构分为:CPU总线、系统总线、外部总线

三、总线结构

  • 单总线结构

见图25

25

  • 双总线结构

    • 面向CPU的双总线结构
      • 存储器与I/O接口间无直接通道

    见图26

    26

    • 面向主存的双总线结构
      • 在单总线结构基础上增加一条CPU到存储器的高速总线

    见图27

    27

  • 多总线结构

    • 现代微机中的多总线结构

见图28

28

四、总线的基本功能

  • 数据传输
  • 仲裁控制
  • 出错处理
  • 总线驱动

五、总线的主要性能指标

  • 总线带宽(B/S):

    • 单位时间内总线上可传送的数据量
    • 总线带宽=位宽×工作频率
  • 总线位宽(bit):

    • 能同时传送的数据位数
  • 总线的工作频率(MHz)

    • 总线带宽=(位宽/8)×(工作频率/每个存取周期的时钟数)