微机原理第三周笔记

3 微处理器

3.3 8086微处理器的内部结构

3.3.1 8086CPU的内部结构

  1. 总线接口部件(Bus Interface Unit, BIU),负责控制存储器读写
  2. 执行部件(Execute Unit, EU),执行单元EU从指令队列中取出指令并执行
    Intel8086CPU逻辑结构框图

特点

  • 取指部分和执行指令部分分开进行,提高了速度。
  • BIU和EU的操作是并行的
  • BIU和EU是各自独立工作的,在EU执行指令的同时,BIU可预取下面一条或几条指令
8086执行指令过程

3.3.2 8086CPU的内存器结构

8086内存器的简记方法
  1. 数据寄存器
    • 8086含有4个16位数据寄存器,它们又可分为8个8位寄存器,即
      • AX -> AH,AL
      • BX -> BH,BL
      • CX -> CH,CL
      • DX -> DH,DL
    • 常用来存放参与运算的操作数或运算结果
数据寄存器特有的习惯用法
AX (Accumulator) 累加器。多用于存放中间运算结果。所有I/O指令必须都通过AX与接口传送信息;
BX (Base) 基址寄存器。常用于存放访问内存时的偏移地址;
CX (Count) 计数寄存器。用于在循环或串操作指令中存放循环次数或重复次数;
DX (Data) 数据寄存器。在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存放I/O端口地址。
  1. 段寄存器
段寄存器为信息按特征分段存储带来方便
CS (Code Segment) 16位的代码段寄存器,管理程序段
DS (Data Segment) 16位的数据段寄存器,管理数据段。
ES (Extra Segment) 16位的扩展段(附加段)寄存器,管理扩展段。
SS (Stack Segment) 16位的堆栈段寄存器,管理堆栈段
  1. 地址指针和变址寄存器
    BX与BP在应用上的区别
    • 作为通用寄存器,二者均可用于存放数据;
    • 作为基址寄存器,BX通常用于数据段,一般与DS或ES搭配使用;BP则通常用于堆栈段,与SS搭配使用。
SP (Stack Pointer) 堆栈指针寄存器,其内容为栈顶的偏移地址;
BP (Base Pointer) 基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
变址寄存器常用于指令的间接寻址或变址寻址
SI (Source Index) 源变址寄存器
DI (Destination Index) 目标变址寄存器
  1. 控制寄存器
    1. 指令指针寄存器IP (Instruction Pointer)|其内容为下一条要执行的指令的偏移地址;
    2. 标志寄存器FLAGS
      16位标志寄存器,用来存放运算结果的特征。其中7位没有定义,其余9位分成两类:
      • 状态标志:表示运算后结果的状态特征它影响后面的操作,
      • 有6位:CF、PF、AF、ZF、SF和OF。
      • 控制标志,用来控制CPU操作,有3个:TF、IF和DF。
CF (Carry) 进位标志:算术运算时有进位CF=1,无进位CF=0
PF (Parity) 奇偶标志:运算结果中“1” 的个数为偶数PF=1
AF (Auxiliary) 辅助进位标志:第3位向第4位有进位时AF=1
ZF (Zero) 零标志:运算结果为“0”则ZF=1
SF (Sign) 符号标志:运算结果为负数时SF=1
OF (Overflow) 溢出标志:运算结果超出规定范围OF=1
IF (Interupt Enable) 中断允许标志:IF=1中断允许
DF (Direction) 方向标志, DF=0地址加1
TF (Trap) 跟踪标志,TF=1,为单步工作方式

3.4 8086总线的工作周期

主频:CPU的工作频率
时钟周期:对主频进行分频后的工作时钟
总线周期:完成一次总线操作所需的时间。在8088CPU中,CPU与内存或接口间进行通信,如将一个字节写入内存一个单元(或接口),或者从内存某单元(或某接口)读一个字节到CPU,这种读(或)写的过程称为一个总线周期。
空闲周期:如果一个总线周期后不立即执行下一个总线周期,即总线上无数据传输操作,系统总线处于空闲状态,则这时执行空闲周期T_iT_i也以时钟周期T为单位
指令周期:一条指令从开始取指令到最后执行完毕所需的时间

总线周期时序

  • 1个总线周期正常情况下由4个时钟周期(T_1T_4)组成;时钟周期由主频决定;
  • 空闲周期T_i和等待周期T_w
  • 读、写、中断响应、总线保持与响应等的总线周期时序



3.5 8086中断系统

3.5.1 8086中断类型

  • 8086/8088可以处理256种不同的中断。
  • 两类:内部中断和外部中断。


    中断源示意图
  1. 外部中断(硬件中断)
    1. 不可屏蔽中断(NMI中断)
      • 中断类型码 2
      • 上升沿触发申请中断
      • 不受中断允许标志IF的控制与影响(即不可屏蔽),一旦NMI引脚出现中断请求,CPU在当前指令执行完后,必须立即响应。
      • 由计算机内部硬件出错而引发,一般用于处理紧急事件。PC机中用于内存奇偶校验出错和系统主要故障(如电源断电等)。
    2. 可屏蔽中断(INTR中断)
      • 外设申请的中断
      • 电平触发
      • 受中断允许标志IF控制
        IF = 1 (指令STI),开中断,允许响应INTR中断
        IF = 0 ( 指令CLI ) ,关中断,禁止响应INTR中断
  2. 内部中断(软件中断)
    五种三类
    1. 处理运算过程中某些错误的中断
      执行程序时,为及时处理运算中的某些错误,CPU以中断方式中止正
      在运行的程序,提醒程序员改错。

      1. 除法错中断(中断类型号为0)。在8086/8088 CPU执行除法指令(DIV/IDIV)时,若发现除数为0,或所得的商超过了CPU中有关寄存器所能表示的最大值,则立即产生一个类型号为0的内部中断,CPU转去执行除法错中断处理程序。

      2. 溢出中断INTO(中断类型号为4)。CPU进行带符号数的算术运算时,若发生了溢出,则标志位OF=1,若此时执行INTO指令,会产生溢出中断,打印出一个错误信息,结束时不返回,而把控制权交给操作系统。若OF=0,则INTO不产生中断,CPU继续执行下一条指令。INTO指令通常安排在算术指令之后,以便在溢出时能及时处理。

    2. 为调试程序设置的中断

      1. 单步中断(中断类型号为1)。当TF=1时,每执行一条指令,CPU会自动产生一个单步中断。单步中断可一条一条指令地跟踪程序流程,观察各个寄存器及存储单元内容的变化,帮助分析错误原因。单步中断又称为陷阱中断,主要用于程序调试。

      2. 断点中断(中断类型号为3)。调试程序时可以在一些关键性的地方设置断点,它相当于把一条INT 3 指令插入到程序中,CPU每执行到断点处,INT 3 指令便产生一个中断,使CPU转向相应的中断服务程序

      3. 中断指令INT n引起的中断(中断类型号为n)。程序设计时,可以用INT n指令来产生软件中断,中断指令的操作数n给出了中断类型号,CPU执行INT n指令后,会立即产生一个类型号为n的中断,转入相应的中断处理程序来完成中断功能

  3. 8086中断源的优先级
    • 8086中断源的优先级顺序由高到低依次为:
      软件中断(除单步中断外)、非屏蔽中断、可屏蔽中断、单步中断
    • 对同时产生的中断
      首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理;
    • 对非同时产生的中断:允许低优先级别的中断处理程序被高优先级别的中断源所中断——中断嵌套。

3.5.2 中断向量与中断向量表

  • 中断类型码:8086可以处理256个中断请求,每个中断请求均对应于惟一固定的类型码。被0除类型码是0,单步为1;NMI为2;断点中断为3,溢出中断为4 ……等。
  • 中断向量:即中断服务程序的入口地址,包括段地址(高字单元)和偏移地址(低字单元)。
  • 中断向量表
    按中断类型码从小到大顺序依次存放各类中断(256种)的中断向量(中断服务程序入口地址)。
    • 在内存的00000H~003FFH地址范围内,大小为1KB。
    • 每个中断向量占用4 Bytes,低字为段内偏移地址,高字为段基址
    • 中断类型码与中断向量地址的关系:设某类中断的中断类型码为n
      中断向量在IVT中的存放地址(向量地址)=4×n

3.5.3 8086中断处理过程

中断处理过程:包括中断请求、中断排队、中断响应、中断
处理、中断返回
等全过程。

  1. 可屏蔽中断的中断过程

    1. CPU响应可屏蔽中断的条件
      ① 外设提出中断申请;
      ② 本中断未被中断控制器屏蔽;
      ③ 本中断优先级最高;
      ④ CPU允许中断;

    2. CPU响应可屏蔽中断的过程
      ◆ CPU在每条指令的最后一个T周期,检测INTR,若为高电平,且IF=1,则CPU响应中断。
      ◆ 响应过程中自动依次完成以下工作:
      ① CPU向外设发两个/INTA ,外设收到第2个/INTA后,立即通过数据线给CPU送中断类型号
      ② CPU从数据线上读取中断类型号
      ③ 将Flags内容入栈,保护现行程序的控制标志及其运行结果产生的状态标志。
      关中断(清IF和TF),为了防止在进入中断处理,但并未执行中断程序这段时间内又响应新的中断。
      ⑤ 保护断点,将当前指令的下一条指令的CS和IP入栈,使中断处理完成后能正确的回到原程序处继续执行。
      ⑥ 转入相应的中断服务子程序;
      ⑦ 中断返回,从堆栈中弹出断点的地址(IP和CS)和Flags的内容,返回主程序的断点处,继续执行主程序。

  2. 非屏蔽中断的中断过程示意图


  3. 中断类型码的形成
    中断入口地址依赖中断类型号,中断型号获取方法:
    ◆ 对于专用中断:除法出错、单步中断、不可屏蔽中断、断点中断和溢
    出中断
    ,由CPU分别提供中断类型号0~4(内部形成)
    ◆ 对于用户自己确定的软件中断INT n,类型号由n决定
    ◆ 对于INTR引脚上的中断:
    – 由硬件电路设计产生中断类型号
    – 可用8259A获取中断类型号


3.6 8086微处理器外部基本引脚与工作模式

3.6.1 8086系统总线结构

  • 最小模式:系统中只有8086一个微处理器,所有的总线控制信号均为8086产生,系统中的总线控制逻辑电路,减少到最少。
    最大模式:用于大型(中型)8086系统中。系统总是包含有两个或多个微处理器,其中一个主处理器就是8086,还有协处理器8087、8089等。通常由专门的总线控制器(8288)产生总线控制信号。

  • 8086采用双列直插式(Double In linePackage,DIP)封装,具有40条引脚,使用+5V电源供电。


8086引脚信号定义

3.6.2 两种模式下公用的引脚信号

➢所谓三态是指总线输出可以有三个状态
高电平、低电平和高阻状态
➢当处于高阻状态时,该总线在逻辑上与所有连接负载断开。

  1. 地址总线、数据总线、状态信号
    (1) AD_{15}AD_0(2~16,39)
    地址/数据复用总线
    ➢双向、三态;
    ➢分时输出低16位地址信号及进行数据信号的输入/输出。
    ➢A15-A0:T1输出访问存储器或I/O的地址信息。
    ➢D15-D0:T2-T4输出与存储器和I/O设备交换数据信息。
    (2) A19/S6~A16/S3 (35~38)
    ➢ 地址/状态复用线;
    ➢ 输出、三态;
    ➢ 分时输出地址的高4位及状态信息。
    ➢ A19-A16:T1输出访问存储器的20位地址的高4位地址A19-A16。
    ➢ S6-S3: T2-T4输出CPU的工作状态。
    • 其中S6为0用以指示8086当前与总线连通;
    • S5为1表明8086可以响应可屏蔽中断。
    • S4、S3共有四个组合状态,用以指明当前使用的段寄存器;
S4 S3 当前正在使用的段寄存器
0 0 ES
0 1 SS
1 0 CS或未使用任何段寄存器
1 1 DS

(3)\overline{\text{BHE}}/S7(34)
➢高8位数据总线有效/状态复用引脚;
➢三态输出;
➢表示高8位数据线D15~ D8上的数据有效和S7 状态信号;
➢T2-T4状态输出S7状态信号。 8086中无定义。
➢偶地址单元数据通过数据总线低8位传输。奇地址单元数据通过数据总线高8位传输。

  1. 控制总线(16根引脚)
    (1) \overline{\text{RD}} (32)
    ➢读信号;
    ➢三态输出;
    ➢低电平有效;
    ➢RD = 0,表示CPU正在读存储器或I/O端口。
    (2) READY(22)
    ➢ 准备就绪信号;
    ➢ 输入;高电平有效。
    ➢ READY=1,表示CPU访问的存储器或IO端口已准备好传送数据。若CPU在总线周期T3状态检测到READY=0,表示未准备好,CPU自动插入一个或多个等待状态TW,直到READY=1为止,才进入T4时钟周期完成数据传输。
    (3) \overline{\text{TEST}} (23)
    ➢测试信号,输入。
    ➢当CPU执行WAIT指令时,CPU每隔5个T状态进行一次测试;
    ➢当测试到TEST =1,则CPU 重复执行WAIT指令,即CPU处于空闲等待状态,
    ➢直到测试到TEST =0时,等待状态结束,CPU继续执行后续指令。
    (4) RESET (21)
    ➢ 复位信号,输入,高电平有效(至少保持4个时钟周期)。
    ➢ 复位时:标志寄存器FLAGS、IP、DS、SS、ES为0,CS=FFFFH,复位后CPU从FFFF0H处开始执行。
    (4) INTR (18)
    ➢可屏蔽中断请求信号;输入,高电平有效。
    ➢INTR=1,表示外设向CPU发出中断请求,CPU在当前指令周期的最后一个T状态去采样该信号,若此时,IF=1,CPU响应中断,执行中断服务程序。
    (5) NMI (17)
    ➢ 不可屏蔽中断请求信号,输入,上升沿触发。
    ➢ 该请求信号不受IF状态的影响,也不能用软件屏蔽,一旦该信号有效,则执行完当前指令后立即响应中断,进入非屏蔽中断处理子程序。
    (6) MN/\overline{\text{MX}} (33)
    ➢工作模式选择信号;
    ➢输入。
    MN/\overline{\text{MX}}=1,表示CPU工作在最小模式系统;
    MN/\overline{\text{MX}}=0,表示CPU工作在最大模式系统
  2. 其他信号
    (1)VCC(40)GND(1,20)
    ➢电源、接地引脚
    ➢输入;
    ➢8086采用单一的+5V电源;
    ➢但有两个接地引脚。
    (2) CLK(19)
    ➢时钟信号输入引脚。
    ➢要求时钟信号的占空比为33%;
    ➢即1/3周期为高电平,2/3周期为低电平。

3.6.3 最小模式

  • 最小模式——仅支持单处理器
  • 主要需解决
    地址与数据的分离
    地址锁存
  • 电路实现方案
    用3片8位的锁存器8282实现地址锁存。ALE为锁存控制信号,OE#≡0使锁存的地址直接输出;用2片双向三态门8286用作数据总线驱动和隔离,DT//R作为方向控制,/DEN作为开门信号;其他控制信号由8086直接产生。

8086最小工作模式下控制核心单元的组成

  1. 时钟发生器
    8086内没有时钟发生电路,8284就是供8086系列使用的单片时钟发生器。它由时钟电路、复位电路、准备就绪电路3部分组成。
    • 8284A的功能:
      • 产生恒定的时钟信号,对准备好信号和复位信号进行同步;
      • 外界控制信号RDY和RES可以在任何时候到来,8284A把它们同步在时钟下降沿时输出READY和RESET信号到CPU。
  2. 地址锁存器
    Intel8282或74LS373当地址锁存允许信号ALE被送到373的选通端G上时,373就锁存送到它的数据输入端的数据。当把一个低电平有效的信号送给输出允许端OC(OE)时,373就把锁存的数据从数据输出端输出。


  3. 双向总线驱动器
    8088收发数据的负载能力是有限的。为了增加8088的负载能力,尤其是组建较大系统时,在8088和系统数据总线间需使用双向总线驱动器。用于双向总线驱动器的芯片有8286和74LS245。



最小模式下的引脚信号

  1. \overline{\text{INTA}} (24)
    ➢中断响应;
    ➢输出;
    ➢当CPU响应INTR时,INTA=0,表示响应中断。

  2. ALE(25)
    ➢地址锁存允许信号;
    ➢输出;
    ➢高电平有效。
    ➢在任一总线周期的T1期间输出一个正脉冲,用于输出地址锁存信号。

  3. DEN (26)
    ➢数据允许信号;三态、输出;
    ➢DEN通常作为数据收发器的选通信号;
    ➢仅当DEN=0时,才允许收发器收发数据。

  4. DT/\overline{\text{R}} (27)
    ➢数据发送/接收信号;
    ➢三态、输出。
    ➢为提高CPU数据总线驱动能力,常常使用数据收发器(8286/8287);
    DT/\overline{\text{R}}控制数据收发器的数据传送方向。
    DT/\overline{\text{R}}=1时,表示CPU输出(发送)数据;
    DT/\overline{\text{R}}=0时,表示CPU输入(接收)数据。

  5. M/\overline{\text{IO}} (28)
    ➢存储器或IO端口访问信号;三态、输出;
    M/\overline{\text{IO}}=1 时,表示CPU当前正在访问存储器;
    M/\overline{\text{IO}}=0 时,表示CPU当前正在访问I/O端口。

  6. \overline{\text{WR}} (29)
    ➢写信号;
    ➢输出、三态;
    ➢低电平有效。
    \overline{\text{WR}}=0,表示CPU当前正在写存储器或 I/O 端口。

  7. HOLD (31)
    ➢总线请求;
    ➢输入;
    ➢用于其它主控器(处理器、DMA等)向本CPU 请求占用总线。

  8. HLDA (30)
    ➢总线请求响应,输出;
    ➢高电平有效;
    ➢表示CPU认可其他总线部件提出的总线占用请求,准备让出总线控制权。


3.7 8086微处理器的时序

3.7.1 系统的复位与启动

  • 产生:RESET端上的高电平维持4个时钟周期,可使CPU复位。如果是初次加电引起的复位,则要求维持不小于50us的高电平。
  • CPU复位
    PSW、DS、ES、SS、IP等寄存器,指令队列被清零。CS寄存器设置为FFFFH。
    • 注:由于复位后,IF=0,处关中断状态,所以在初始化程序中应开中断,使CPU可响应中断请求。
  • CPU重启
    复位信号RESET从高电平到低电平的跳变会触发CPU内部的复位逻辑电路,当RESET由高电平变低电平7个机器周期后,CPU开始从FFFF0处执行程序。
    复位操作时序图
  • 复位时总线状态
    ➢地址线为高阻态,直到RESET变为低电平,开始从FFFF0H单元取指令;
    ➢ALE、HLDA等信号为低电平(无效);
    ➢一些信号呈高阻态。

3.7.2 最小模式系统总线周期时序

  1. 8086最小模式存储器和I/O读总线周期


    ①T1状态 M/\overline{\text{IO}}信号在T1状态变为有效,若为高电平则为从存储器读取,反之为从I/O端口读取,而且这个有效电平保持到T4状态结束。同时CPU在T1时通过A19/S6~A16/S3和AD15~AD0发出访问外设或者存储器的20位地址信息,并输出\overline{\text{BHE}}有效信号,表明高八位数据线上的信息可以使用。总线上的地址信息在T1状态结束之前必须进行锁存,地址锁存器ALE作为它的锁存允许信号,所以T1状态CPU发出一个ALE正脉冲信号,地址锁存器利用ALE的下降沿锁存地址信息。
    ②T2状态。总线上撤销地址信息A19/S6~A16/S3,引脚输出状态信息S6S3。AD15AD0呈现高阻态,为数据传输做准备。若进行读操作,则CPU在T2状态输出\overline{\text{RD}} 低电平有效信号,否则进行写操作,输出\overline{\text{WR}}低电平有效信号。\overline{\text{DEN}}信号也在T2变为低电平有效状态,选通总线收发器工作。

  2. 8086最小模式存储器和I/O写总线周期


  3. 总线保持请求和总线授权时序
    当系统中CPU之外的总线主设备(例如DMA)需要占用总线时,向CPU发出一个总线保持请求信号HOLD,该信号可能与时钟信号不同步。CPU在每个时钟周期的上升沿检测到该信号时,在当前总线周期的T4后或下一个总线周期的T1后,CPU发出HLDA信号,并让出总线。



©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容