微机原理的一些笔记

编码

原码:最高位是符号位,其余表示数值

反码:正数与原码相同,负数是原码的取反

补码:正数与原码相同,负数是取反加1

8086系统

微机计算机系统工作原理

  1. 不断取指令和执行指令的过程
  2. 基本工作原理就是存储程序和程序控制

计算机五大部件,以及到现代计算机部件

冯诺依曼:存储器、控制器、运算器、输入设备、输出设备

现代:微型处理器、协处理器、RAM(随机存取存储器)、ROM(只读存储器)、总线控制(片内总线、片级总线、系统总线)、输入输出设备

片内总线:是CPU内部器件的连接,如ALU、寄存器、内部Cache

片级总线:CPU、存储器和IO设备的连接

系统总线:是解决个部件通信

8086内部结构

8086CPU是16根数据线、20根地址线、寻址空间为220=1MB、IO寻址空间216=64KB

8086CPU内部结构分为两块,他们是并行执行的。

执行部件EU

8个通用寄存器:AX, BX, CX, DX, SI, DI, SP, BP

标志位寄存器。

算数逻辑单元ALU

暂存器:内部用来暂存数据,用我们来说是透明的

总线接口部件

4个段寄存器:CS, DS, SS, ES

地址加法器

内部暂存器

指令缓冲对垒

两个部件的并行执行方式

当EU和BIU都处于空闲状态下,先让BIU根据IP寄存器去存储器中取指令到指令缓冲队列,然后IP寄存器自增,指向下一个内存单元地址,BIU根据这个寻指令到指令缓冲队列

同时EU在内部执行指令。这个时候会有两种情况

  1. EU执行指令的时候需要访问存储器或IO设备的时候,会向BIU发送请求,并携带参数,如果BIU处于空闲状态会立即响应EU的请求;如果BIU正在寻址,会把当前寻址完成后,相同EU的请求。
  2. EU执行到转移或跳转指令的时候,也就是指令缓冲队列中的指令不是下一次要执行的指令了,那么指令缓冲队列会清空,BIU会重新寻指令

当指令缓冲队列慢的时候且EU没有发送请求的时候BIU会处于空闲状态

内部引脚

8086CPU最大模式和最小模式,其中他们的区别就是

  1. 多了协处理器以减轻微处理器负担
  2. 整个计算器控制交给8288总线控制器来控制

8086CPU有40根引脚,采用分时复用原则。

公共引脚

S4和S3编码含义

S4 S3 当前正在使用的段寄存器
0 0 ES
0 1 SS
1 0 CS或未使用
1 1 DS

S5:反应当前允许中断标志的状态

S6:状态信息,在T2T3Tw和T4状态下作为状态信号线

$\overline{\text{BHE}}$与AD0不同组合下的对应操作

$\overline{\text{BHE}}$与AD0 有效数据引脚 操作
0 0 AD15~AD0一个总线周期同时访问奇体和偶体,从奇读取高8位;从偶读低8位 从偶地址读/写一个字
10 AD7~AD0 从偶地址读/写一个字节
0 1 AD15~AD8 从奇地址读/写一个字节
0 1
1 0
AD15~AD8(第一个总线周期从奇字数据读低8位)
AD7~AD0(第二个总线周期从偶地址读/写数据高8位)
从奇地址读/写一个字

REDAY:准备就绪信号,是CPU访问存储器或IO设备的响应信号,在T3的时候,采样READY信号,来告诉CPU存储器或IO是否准备就绪。

$\overline{\text{TEST}}$:检测信号,配合指令WAIT使用,当执行到指令WAIT时CPU处于等待状态,且每个5个T周期对该信号进行一次测试,一旦检测到TEST信号为低电平,则结束等待。执行WAIT执行下面的。

INTR:可屏幕中断请求信号,高电平有效,若有效,则IF标志位为1,则CPU结束当前指令周期时,响应中断

NMI:非屏蔽中断信号,上升沿有效,不受中断允许标志IF影响。

RESET:复位信号,高电平有效,当该信号有效时, 标志位寄存器清零;指令寄存器IP置0000H;CS寄存器置FFFFH;其他寄存器清零。指令缓冲队列为空。

最小模式下引脚

ALT:地址锁存允许信号

$\overline{\text{DEN}}$:数据允许信号,用来做8286或74LS245数据收发器的输出允许信号,既允许收发器和系统总线数据进行传送

DT/$\overline{\text{R}}$:数据发送/接收控制信号,为低电平时数据接收CPU读;为高电平时,数据发送(CPU写);

M/$\overline{\text{IO}}$:存储器或IO端口控制信号。当为高电平时,CPU访问存储器,为低电平时CPU访问IO设备

$\overline{\text{WR}}$:写信号,表示CPU正在对IO或存储器写。

最大模式下引脚

$\overline{\text{S}}$2,$\overline{\text{S}}$1,$\overline{\text{S}}$0:总线周期状态输出信号,表格如下

$\overline{\text{S}}$2 $\overline{\text{S}}$1 $\overline{\text{S}}$0 操作
0 0 0 中断响应
0 0 1 读IO端口
0 1 0 写IO端口
0 1 1 暂停
1 0 0 取指
1 0 1 读存储器
1 1 0 写存储器
1 1 1 无作用

$\overline{\text{LOCK}}$:总线封锁信号,低电平有效,该信号有效时,系统中其他总线主设备不能占用系统总线。

时序

  • 时钟周期:就是8284时钟发生器产生的是CPU里最小的时钟周期,成为T周期或T状态
  • 总线周期:CPU访问存储器或输入输出端口时,需要通过总线进行读写操作,这个过程叫总线周期
  • 指令周期:取指、译码、执行三个阶段叫指令周期

系统硬件组成

  1. 时钟收发器8284
  2. 地址锁存器8282
  3. 数据收发器8286
  4. 总线控制器8288

标志位寄存器

CF:进位标志位

AF:辅助进位标志位,第3位

SF:正负标志位。

PF:低8位是偶个1值1

ZF:0标志位

OF:溢出标志位

DF:方向标志为,串操作方向

IF:中断允许标志位,为0CPU不对可屏蔽中断做响应,为1CPU对可屏蔽中断做响应

TF:单步执行标志位

寻址方式

8086CPU里有7中寻址方式其中5种是存储器寻址

  1. 立即寻址
  2. 寄存器寻址
  3. 直接寻址
  4. 寄存器间接寻址
  5. 寄存器相对寻址
  6. 基址变址寻址
  7. 相对基址变址寻址

DOS系统功能调用

DOS功能调用过程是:根据需要的功能调用设置入口参数,把功能调用号送AH寄存器,执行软中断INT 21H后,根据有关功能调用的说明取得出口参数。

DOS系统提供了80多个子程序按功能分为三大类

  • 磁盘读/写与管理类子程序
  • 内存管理类子程序
  • 基本输入/输出管理以及时间日期的管理类子程序
  1. 单个字符输入,功能调用号 AH=01H,使用接受键盘输入字符并回显屏幕,输入字符以ASCII编码存入AL寄存器中

  2. 字符串输入:功能调用号AH=0AH,寄存器DX存放字符串首地址,缓冲区第一个字节存放字符串最大字符个数。如果输入字符串超出字符个数,那么会从后面输入的丢失。内存中第二个字节存放实际输入个数不包含回车,第三个字节开始存放接受的字符串

    data segment
    	buf db 100
    		db 100 dup(0)
    data ends
    code segment
    	assume: cs:code, ds:data
    start:	mov dx, offset buf
    	mov ah, 0AH
    	int 12H
    code ends
    end start
    
  3. 单字符输出:功能调用号AH=02H,在屏幕显示一个字符,要显示的字符ASCII码保存于寄存器DL

  4. 字符串输入:功能调用号AH=9,在屏幕上显示一个字符串,入口参数DX存放字符串首地址,并且让字符串以$号结尾这是规定

  5. 进程终止:AH=4CH,结束当前程序,返回DOS系统

存储器

衡量存储器3个指标:容量、速度、可靠性。

存储器根据特性的分类

RAM的分类

SRAM

SRAM读写次数不影响寿命,可以无限读写,在保持电源的情况下内容不会丢失。

DRAM

动态存储器利用MOS电容存储电荷来保存信息,使用时需要不断给电容充电才能让信息保持,既存储器需要刷新

SRAM与DRAM的区别

  1. 静态RAM内存储的信息只要电源存在就能一直保持,而动态RAM的信息需要刷新才能保持
  2. 静态RAM运行快,动态RAM运行慢
  3. 静态RAM成本高

什么是Cache?作用是什么?他处于什么位置?

Cache也称为高速缓存,是介于主存和CPU之间的高速小容量存储器。

为了减少CPU与内存之间的速度差异,提高系统性能,在慢速的DRAM和快速CPU之间插入一个速度较快,容量较小的SRAM,起到缓冲作用

ROM

只能随机读出不能写入

典型存储器芯片介绍

DRAM 6264

DRAM6264是8K*8bit的存储芯片

A12~A0为13根地址引脚;D7-D0为8根数据引脚,片选信号CS1=0、CS2=1,既同时有效。

写操作:片选信号有效,且WE=0、输出使能信号OE=1时,执行写操作。

读操作:片选信号有效,且WE=1、OE=0,执行数据输出操作。

当片选信号无效时,D7-D0为高阻状态

DRAM 2164A

2164是64K*1bit的DRAM,有8根地址线,16位的地址分为行地址和列地址分两次传送到芯片。

进行读/写时,先由BAS信号将地址的行低8位地址传送过去(如A7~A0)锁存到内部行地址寄存器;再由CAS信号将地址的列8位传送过去(如A15-A8)锁存到内部列地址寄存器。选中一个存储单元

WE决定读或写操作。

存储器扩展

存储器扩展有3种方式:位扩展、字扩展、字位扩展

位扩展

是用多个存储器对字长进行扩充,一个地址同时控制多个存储器芯片,片选$\overline{\text{CS}}$。读写控制R/$\overline{\text{W}}$相应并联

字扩展

是增加容量中字的数量,将芯片的地址线、数据线和读/写控制线相应并联。由片选信号来区分各芯片的地址范围

字位扩展

设计实际存呼气时,往往需要字和位同时进行扩展器,一个存储器的容量为M*N位,若使L*K位存储器芯片,那么这个存储器需要(M/L)*(N/K)个存储器芯片

译码方式

一个存储器通常是由多个存储器芯片组成的,CPU要实现对存储器单元的访问,首先要选择存储器芯片,然后再从选中的芯片依照地址码选择对应的存储单元来读/写数据。

通常,由CPU高位地址做片选信号,选择存储器芯片;由低位地址做存储器芯片的片内寻址,选择具体存储单元。

常用的片选信号方式有以下3种

  1. 全地址译码:片选信号是由所有不在存储器上的地址线译码产生,存储器芯片中的每个存储单元只对应内存空间的一个地址。
    • 特点:寻址范围大,地址连续。
  2. 部分地址译码:也称为局部地址译码,片选信号不是由地址线中所有不在存储器上的地址线译码产生的,而是只有部分高位地址被送入译码电路产生片选信号。
    • 特点:简化地址译码线路,但地址空间有重叠。
  3. 线选译码方式:片选信号是高位地址线中某一条作为存储器芯片片选。用于片选的地址线每次寻址只能有一位生效,不允许同时多位有效。保证每次只选择一个芯片或一个芯片组
    • 特点:把地址空间分成了互相隔离的区域,且地址重叠区域多,不能充分利用系统的存储空间。

IO接口

各种外设通过输入/输出接口与系统相连

CPU与外设之间通信通过接口交换的信息有:数据信息、控制信息、状态信息。

数据信息有三种

  • 数据量:数值以及ASCII码
  • 模拟量,就是说通过A/D转换器把非电量的东西转换成数据
  • 开关量

状态信息:设备是否准备好的信息

控制信息:控制输入/输出设备的启动和停止等动作

IO接口的主要功能

  1. 对输入/输出数据进行缓冲和锁存
    • 输入时,输入的数据连接在数据总线上,只有当CPU从该接口输入数据时才允许选定的输入接口将数据送到总线上由CPU读取。
    • 输出时,CPU通过总线将数据输出接口的数据寄存器中,然后由外设读。在CPU向外设输出数据之前,旧的数据保持不变,所以数据寄存器一般用锁存器来实现如74LS373
  2. 对信号的形式和数据的格式进行变换
    • 计算机只能直接处理数据,而对一些数据需要进过转换才能让计算机处理或将数据交给外设。
  3. 对IO端口进行寻址
    • 在PC中,通常有多个外设,而一个外设接口电路中,可能有多个端口,每个端口保存和交换到的信息不一样。
  4. 提供联络信号
    • 由于CPU与外设的运行速度不匹配,联络的目的就是使CPU与外设之间的数据传送速度匹配
  5. 寻址能力,CPU通过地址编码选择不同的外设
  6. 中断管理功能
  7. 可编程功能
  8. 错误检测功能

IO接口的结构

PC系统常用的IO接口电路一般都被设计成通用的IO接口芯片,一个接口芯片内部可以有若干可寻址的端口。因此,所有的接口芯片都有片选信号线和用于片内端口寻址的地址线

状态信息和控制信息与数据信息的性质不同,必须要分别传送,每个IO接口内部一般由3类寄存器组成CPU与外设进行数据传送时,各类信息在接口中进入不同的寄存器,一般称这些寄存器位IO端口。每个IO端口有一个地址。

输入/输出的寻址方式

CPU寻址外设有两种方式

  1. 独立编址也成IO映像的寻址方式。
  2. 统一编址也称为存储器映像的IO寻址方式

存储器映像的IO寻址方式

简答的说,存储单元和IO端口的地址都属于同一块地址空间。把每一个外设端口当做存储单元来对待,从外设输入一个数据就相当于对存储器写入操作。向外设输出一个数据相当于对存储器进行读操作。

  • 优点
    • CPU对外设的操作可以使用全部的存储器操作指令,指令多,操作方便
    • 不需要专门的输入/输出指令及区分是存储器还是IO操作的控制信号
  • 缺点
    • 由于外设和内存单元是同一个存储空间,因此使内存寻址空间减少

IO映像IO寻址方式

IO设备端口地址与存储单元地址分别属于不同的地址空间。CPU通过专门的IO指令访问IO端口。8086系统提供的IO指令,只能用1字节作为端口地址,故最多可寻址256个IO端口

  • 优点
    • IO端口与存储器分别属于不同的地址空间。不会减少存储器空间
    • 采用单独的IO指令,使程序中IO操作和其他操作层次清晰。
  • 缺点
    • 专用的IO指令功能有限,只能对端口数据进行输入/输出操作,不能直接进行移位、比较等复杂操作
    • 由于采用了专门的IO操作和IO控制信号线,因而增加了微处理器本身控制逻辑复杂

常用简单接口芯片

锁存器74LS373

74LS373是由8个D触发器组成的具有三态输出和驱动的锁存器。

当使能端G有效(为高电平)时,将输入端(D端)数据打入锁存器。

当输出允许端$\overline{\text{OE}}$有效时,将锁存器中锁存到的数据送到输出端Q;

当$\overline{\text{OE}}$=1时,为高电阻。

缓冲器74LS244

74LS244是一种三态输出到的缓冲器,

分别有4个输入端(1A1~1A4,2A1-2A4)和4个输出段(1Y1-1Y4,2Y1-2Y4)。分别由使能端$\overline{\text{1G}}$,$\overline{\text{2G}}$控制。

当$\overline{\text{1G}}$为低电平,1Y1-1Y4的电平与1A1~1A4的电平相同

当$\overline{\text{2G}}$为低电平,2Y1-2Y4的电平与2A1-2A4的电平相同

CPU与外设之间的数据传送方式

CPU与外设之间的数据传送方式一般有:程序控制方式、中断方式、DMA存取方式和通道控制方式

程序控制方式

状态和数据的传输由CPU执行一系列指令完成。

数据传送过程中,或者由CPU查询外设状态,或者由外设向CPU发出请求。

这种方式又可分为无条件传输方式和程序查询方式

无条件传输方式

这种方式下CPU不需要了解外设状态,直接与外设传输数据,适用于按钮开关、发光二极管简单外设与CPU的数据传送过程。

如:

程序查询方式

程序查询方式,也成为条件传输方式,常用于慢速设备与CPU交换数据

在这种方式下CPU与外设传输数据之前,先检查外设状态,如果外设处于“准备好(输出设备)”状态或"空闲(输出设备)"状态,才可以传输数据,为此接口电路除了数据端口外,还必须有状态端口

程序查询方式一般过程为

  1. CPU从接口读取状态字
  2. CPU检测状态字的响应位,是否满足"就绪"条件,如果不满足,则转第一步;否则开始传输数据

中断方式

前面的两种无条件传输和程序查询方式,都是CPU控制的,无条件的还好些,但程序查询的话,还需要CPU来进行判断,大大影响运行速度。

中断方式是:可以额不让CPU主动查询外设状态,而是让外设在数据准备好之后再通知CPU。这样CPU在没接到外设通知前,只做自己的事情

DMA传输方式

DMA传输方式又称直接存储器存取方式。

使用场景

对于高速的外设以及成块交换数据的情况,采用程序控制传输数据的方法。甚至中断方式传输都不能满足,都不能满足对速度的要求。因为采用程序控制方式进行数据传输时,CPU必须加入其中,需要利用CPU中的寄存器作为中转,例如,当有数据从外设保存到内存中,首先就必须用IN指令将外设的数据传送到寄存器,在用MOV指令将寄存器中的数据送至内存,这样才能完成一个数据的传输。

如果系统中大量地采用这种方式与设备交换信息,会使系统效率下降。

DMA传输方式就是在系统中建立一种机制,将外设与内存建立起直接通道,CPU不再直接参加外设与内存的数据传输。而是在系统需要进行DMA传输时,将CPU对地址总线、数据总线、控制总线的权限交给DAM控制器进行控制。当完成一次DMA数据传送后,将这个控制权还给CPU。当然这些工作是硬件自己实现的

通道控制方式和IO处理器

在大、中型计算机系统中,配置的IO设备很多,输入输出操作十分频繁,如果仅用DMA控制器,则需要CPU不断地对各个DMA控制器进行设置,影响CPU的正常工作。因此可将DMA控制器的功能增强,使其能够按CPU的意图自行设置操作方式,控制数据差混送。玉石DMA控制器发展成了通道控制器

IO通道

这里的“通道”不再是一半概念的IO通道,而是一个专用名称。它相对独立,具有较强的自制能力。在早期是由一些简单的主要用于数据输入/输出的CPU构成,可配置简单的输入/输出程序。它接受主CPU的命令,控制数据的传送。主CPU只需使用简单的通道命令启动通道,二者即可并行工作。输入/输出程序可以在内存中,也可以在通道的局部存储器中,主CPU一旦启动通道工作,通道控制器即从驻村或通道存储器中取出响应的程序,控制数据的输入/输出

IO处理器

随着技术发展,通道控制器功能不断增强,发展成IO处理器,也成为IO处理机,主要由一个进行IO操作的CPU、内部寄存器、局部存储器和设备控制器组成。在一个通道处理中可以有多个通道,分别与多个设备控制器连接;而一个设备控制器可以控制多台外设工作,在实际使用中IO处理器与CPU构成多处理器系统,相互并行工作

外围处理机

技术的发展,因此处理机的功能也在不断增强,于是有了这个外围处理机,它除了完成IO通道所要完成的IO控制之外,还增强了路由选择、数码转换、格式处理、数据块检错/纠错等功能

可编程芯片

硬件系统芯片电路一旦设计完成,其功能既工作方式也就确定。要改变芯片的功能,如果只从硬件方面着手,就需修改电路,重新设计芯片,这样每一个芯片的利用率相对较低。为了扩展每个芯片的功能,就设计了可编程接口芯片。

可编程芯片具有灵活的工作方式,其工作方式的设置通过软件编程实现。

如果一个可编程输入/输出接口芯片,同时具有输入/输出功能,用户可根据需要通过软件编程来设定其作为输入接口或输出接口

如一下几个可编程接口芯片

  • 可编程定时/计数器8253/8254
  • 可编程并行接口芯片8255A
  • 可编程串行接口芯片8251A

可编程并行接口芯片8255A

8255A是Intel公司生产的可编程并行IO接口芯片,有3个8位并行IO口,共24位,各端口工作方式由软件编程设定。

8255A内部结构

8255A是由数据总线缓冲器,数据端口A、数据端口B和数据端口C,A组和B组控制电路和读/写控制逻辑4部分组成。

数据总线缓冲器

数据总线缓冲器是一个双向三态的8位数据缓冲器,8255A通过它与系统总线相连。输入数据、输出数据、CPU发给8255A的控制字和从8255A传入的状态信息都经过这个缓冲器缓存

数据端口

  • 端口A对应一个8位数据输入锁存器和一个8位数据输出锁存器/缓冲器。用端口A作为输入或输出端口时,数据均受到锁存。
  • 端口B对应一个8位输入缓冲器
  • 端口C对应一个8位数据锁存器
  • 用端口B和端口C时,数据不被锁存,而作为输出端口时,数据被锁存

A组和B组控制电路

8255A把3个IO端口分为两组:A组和B组。分别进行控制

  • A组控制电路控制端口A和端口C的高4位的工作方式和读/写操作。
  • B组控制电路控制端口B和端口C的低4位的工作方式和读/写操作。

这两组控制电路一方面接受CPU发来的控制字并决定8255A的工作方式;另一方面接受来自读/写控制逻辑电路的读/写命令。完成接口的读/写操作。

读/写控制逻辑

读/写控制逻辑负责管理8255A的数据传输过程。它将读信号RD、写信号WR、片选信号CS、端口选择信号A1和A0等信号进行组合后,获得A组部件和B组部件的控制命令,并将命令发给这两个部件,以完成对数据信息、状态信息和控制信息的传输

8255A引脚

8255A工作方式

8255A编程

8255A实际应用举例

中断与中断管理

中断

在CPU正常执行程序的过程中,如果发生内部、外部事件或者是程序预先安排的事件急需CPU处理,CPU会暂时中断正在执行的程序,转去执行响应的事件处理程序,待事件处理完毕后,CPU再返回到被暂时中断的程序处继续执行,这个过程被称为中断。

中断是CPU与外部设备交换信息的一种方式,是CPU处理随机事件和外部请求的主要手段。

中断概念

中断功能

  1. 分时操作,同时处理
    • 当外部设备与CPU以中断方式传送数据时,可以实现CPU与外部设备同时工作,也可以让多个设备同时工作,虽然CPU在不同的时间点上完成不同人物,但是从宏观上来看,CPU几乎在同时完成不同的任务
  2. 实现实时处理
    • 在实时信息处理系统中,需要对采集的信息立即做出响应,以避免丢失信息,采用中断技术可以进行信息的实时处理。
  3. 故障处理

中断源

产生中断请求的设备或事件称为”中断源“。根据中断源不同,中断可分为3类

  1. 计算机硬件异常或故障引起的中断,称为内部异常中断
  2. 程序中执行了中断指令引起的中断,称为软件中断或软中断
  3. 外部设备(如输入/输出设备)请求引起的中断,也成为硬件中断或外部中断

中断过程与中断系统的功能

中断过程包括:中断请求、中断判优、中断响应、中断服务和中断返回。共5个阶段,需要计算机的软、硬件共同完成。

中断系统的功能

  1. 接受中断请求
    • 中断源向CPU发出的中断请求信号是随机的,而CPU又一定是在现指令执行结束后才检测有无中断请求发生。所以在CPU现指令执行迁建,必须把随机输入的中断请求信号锁存起来,并保持到CPU响应这个中断请求后才可以清除。
    • 因此,要为每一个中断源设置一个中断请求触发器,记录中断请求的标志。当有中断请求时,该触发器被置位;当CPU响应中断请求后,该触发器被清除。
  2. 中断源识别
    • 不同的中断源对应着不同的中断服务子程序,并且存放在不同的存储区域。当系统中有多个中断源时,一旦发生中断,CPU必须确定是哪一个中断源提出了中断请求,以便获取相应的中断服务子程序入口地址。
  3. 中断源判优
    • 在微机系统中,中断源种类繁多,功能各异,它们在系统中的重要性不同,要求CPU为其服务的响应速度也不同。因此,中断系统要能按任务的轻重缓急,为每个中断源进行排队,并能给出顺序编号。这就确定了每个中断源在接受CPU服务器时的优先等级,称为中断优先级。一般情况下,系统的内部中断优先于外部中断,不可屏幕中断优先于可屏幕中断
  4. 中断嵌套
    • 当CPU响应其中断源的请求并正在为其服务时,若有优先级更高的中断源向CPU提出中断请求,则中断控制逻辑能控制CPU暂停现在执行的中断服务(中断正在执行的中断服务器子程序),保留这个断点和现场,转而响应高优先级的中断。
    • 待高优先级的中断处理完毕后,再返回先前被暂停的中断服务器子程序继续执行。
    • 若此时是低优先级或同级中断源发出的中断请求,则CPU均不响应。
  5. 中断处理与返回
    • 能自动在中断服务子程序与主程序中间进行跳转,并对断点进行保护。

简单的中断处理过程

对于不同的微机系统和不同的中断方式(如软中断或硬件中断),CPU进行中断处理的具体过程完全不一样,但都要经过:请求中断、中断判优、中断响应、中断处理和中断返回5个阶段。

这是以外部可屏幕中断为例,分析中断处理过程

CPU响应中断的条件

  1. 中断请求触发器被置位。
    • CPU只有在当前指令执行结束后才会检测有无中断请求发生,因此对于外部中断,中断源要向CPU发出中断请求,就必须把自己的中断请求信号保持到CPU响应中断。故要求每一个中断源都有一个中断请求触发器,用于记录中断请求标志。当中断源提出中断请求时,该触发器被置位,CPU响应中断后被复位。
    • ![](
  2. 中断屏幕触发器置位
    • 在通常情况下,往往有多个中断源。有时因为程序设计的要求,需要灵活控制其中任一中断请求触发器的输出信号是否作为中断请求信号送给CPU,因此在外设接口中,为每一个中断源设置了一个中断屏幕触发器,用来开放或关闭中断源的请求。
    • 只有中断屏幕触发器设置为1时,外设中断请求信号才能被送到CPU
  3. 中断是开放的
    • 当CPU的INTR引脚收到可屏蔽中断请求信号后,是否响应中断,还要取决于CPU当前是否允许中断。CPU通过内部设置一个中断允许触发器(标志位寄存器IF)来允许或禁止可拼比中断。IF标志可以用指令置位或复位。执行STI执行后,中断允许触发器清0时,称为关中断,禁止CPU响应可拼比中断。CLI指令用来允许中断,IF标志位置0
  4. CPU在执行当前指令的最后一个时钟周期
    • CPU在执行当前指令的最后一个时钟周期采取查询INTR引脚。若查询到该引脚信号为高电平,则表示收到有效中断请求信号,在开中断(既IF=1)的情况下,CPU在下一个总线周期不仅如此取指周期。而是进入中断响应周期处理中断。

CPU对中断的响应

CPU进入中断响应周期后,自动完成以下操作

  1. 关闭中断
    • 为了避免在中断过程中或进入中断服务程序后收到其他中断源的干扰,CPU会在发出中断响应信号$\overline{\text{INTA}}$的同时,将标志寄存器的内容压入堆栈保存起来,然后将标志寄存器的中断标志位IF与陷阱标志位TF清零,从而自动关闭外部硬件中断和单步中断。
  2. 保护断点
    • 所谓断点是指CPU响应中断前将CS:IP指向下一条指令的地址。
    • 保存断点就是将当前CSIP的内容亚茹堆栈保存,以便中断处理完毕后能返回被中断的原程序继续执行,这一过程也是由CPU自动完成的
  3. 获取中断类型号
    • 在中断响应周期的第二个总线周期中,由中断控制器给出中断类型号,CPU根据中断类型号获取中断服务子程序的入口地址(既将中断处理程序所在的段地址及第一条指令有效地址),并写入CSIP中。一旦CSIP的写入完毕,中断服务程序就开始执行。

CPU对中断的处理

CPU对中断的处理通过执行中断服务程序实现。中断服务程序一半包含以下3个部分

  1. 保护现场
    • 主程序和中断程序都要使用CPU内部寄存器,有些寄存器可能在主程序中被中断时存放有用的内容,为使中断服务程序不破坏主程序中寄存器的内容,应将断点处个寄存器内容压入堆栈保存起来,在进入中断处理。
  2. 中断处理
    • 对于不同的中断请求应进行不同的处理,也就是要执行不同的中断服务程序。中断服务程序是根据中断源要完成的功能事先编写的子程序,供CPU响应中断后自动调用执行。
  3. 恢复现场
    • 回复现场就是回复原程序断电处各寄存器的值。中断处理完毕后,利用POP指令将保存在堆栈中的各个寄存器内容取出来。

中断的返回

在中断服务子程序的最后,要开中断(以便CPU能影响新的中断请求)并安排一条中断返回指令IRET。执行指令IRET后,之前压入堆栈中的断点值及程序状态字弹回CSIP及标志寄存器中。这样,CPU就从中断服务程序返回,继续执行主程序。

中断源识别及优先权判断

中断源识别

当系统有多个中断源时,一旦发生中断,CPU必须确定是哪一个中断源提出了中断请求,以便获取响应的中断服务子程序的入口地址,进行中断处理,这个过程称为中断源识别。

中断识别的任务包含两个方面:

  1. 确定应该响应哪个中断请求。
  2. 找到与之对应的中断服务程序入口地址。

中断源识别的方法有很多,常用的方法有软件查询法和中断向量表法等。

软件查询法

在该电路中,任意中断源都可向CPU发出中断请求,每个中断源的中断请求信号接至缓冲器的一位(既缓冲器的每一位保存一个中断源的中断请求状态),各中断源的中断请求信号相“或”后接至CPU的INTR引脚。

当CPU检测到有效的INTR信号且响应该中断时,会自动执行中断源识别程序,然后转到对应中断源的中断服务程序去处理程序。中断源识别程序存放于一个固定地址。

优点:

  • 硬件电路简单,无需优先权的硬件排队电路,可随时修改优先级(改变查询的先后顺序)

缺点

  • 软件识别中断源的时间过长,尤其在中断源较多的情况下,中断响应的实时性受到影响

中断向量表

中断向量法要求中断源能够提供一个中断类型号(中断类型码)。

采用中断向量法时,专用的中断控制电路完成中断源识别后,将中断源对应的中断类型号送给CPU。CPU根据中断类型号即可生成该中断源的中断向量,根据中断向量可从中断向量表中取出相应的中断服务程序入口地址,进而转去执行中断服务程序。

优点

  • 采用中断向量法时,中断源识别及中断服务程序入口地址的获取由硬件自动完成,中断响应的速度大大快于软件查询法
  • 采用中断向量法时,CPU可直接通过中断向量表转向相应的处理程序,不需要CPU去逐个检测和确定中断源,因此大大加快了中断响应的速度。

中断优先级

在微机系统中,中断源种类多,他们要求CPU为期服务的响应速度不同,具有不同的中断优先级。当多个中断源同时请求中断时,CPU将按中断优先级的高低次序来处理,将响应当前优先级最高的中断请求,这个过程称为中断优先级判优。

在一般情况下,系统的内部中断优先级高于外部中断,不可屏蔽中断的优先级高于可屏蔽中断。

中断源的优先级判优可以通过软件查询方式和硬件优先级排队电路两种方式实现

软件查询方式

原理:当CPU接受到中断请求信号后,执行优先级判优的查询程序,逐个检测外设中断请求标志位的状态,如图

检测的顺序是按优先级的高低来进行的,最先检测到的中断源具有最高的优先级。最后检测到的中断源具有最低的优先级

软件查询方式优点:

  • 硬件电路简单,无需优先权硬件排队电路,可以通过修改程序的方法随时修改优先级。

缺点

  • 软件查询影响中断响应的实时性

硬件优先级排队电路

硬件优先权排队电路是专门的硬件电路。采用这种方法完成中断源的优先级判优工作,可以节省CPU的时间,而且中断响应较快,但是成本高

8086CPU中断系统

8080/8086系统微机有一个灵活的中断系统,可以处理256种中断源,每个中断源都有对应的中断类型号(0~255D)供CPU识别

中断可以分为外部中断(硬件中断)和内部中断(软件中断);外部中断由外部设备请求引起,内部中断由指令的执行引起

8086的中断类型

外部中断

外部中断是指由外部设备通过硬件请求的方式产生的中断,也称为硬件中断。外部中断又分为可屏蔽中断和不可屏蔽中断。

  1. 不可屏蔽中断
    • 当外设向CPU提出中断请求时,CPU在当前指令执行结束后,就立刻无条件地做出响应,这样的中断就是不可屏蔽中断
    • 不可屏蔽中断由CPU的NMI引脚出现上升沿触发,维持2个T周期的高电平。
    • 它不受标志位IF的影响,中断类型号固定为2
    • 不可屏蔽中断在外部中断源中优先级最高
    • 主要用于处理系统的意外或故障,如电源掉电、存储器读/写错误、扩展插槽中输入/输出通道错误
  2. 可屏蔽中断
    • 由外部设备产生,由CPU的INTR引脚引入的是可屏蔽中断请求,采用的是电平触发方式。高电平有效
    • 一旦发生,CPU在当前指令执行完后,首先检查标志位寄存器IF是否为1,若为0,则该中断请求被禁止;只有当IF=1时,CPU才能响应这一中断请求
    • 这种中断由请求中的中断源提供中断类型号,CPU响应时送出两个$\overline{\text{INTA}}$(中断响应信号),在第二个$\overline{\text{INTA}}$,中断源送出中断类型号到CPU

内部中断

内部中断(也成为软件中断)是由CPU运行程序异常或执行内部程序调用引起的一种中断,它分为异常INT n指令中断两类

异常:就是在指令执行过程中由于CPU的内部操作发生错误引起的,如硬件失效、非法的系统调用或程序员预先设置断点等

INT n:指令中断是指系统执行INT n指令所引起的中断

  1. 除法错误中断
    • 在执行除法指令DIVIDIV后,除数为0或商超过了存放它的目标寄存器所能表示的范围,则CPU立即产生一个0型中断
  2. 单步中断
    • TF=1时,CPU处于单步工作方式。在单步工作时,每执行完一条指令,CPU就自动产生一个1型中断。
    • 在单步中断过程中,可以每执行一条指令后但因或显示寄存器内容或存储单元的内容等信息,是程序调试的一种手段
  3. 断点中断
    • 断点中断既INT 3指令中断,中断类型号为3,在程序插入INT 3的地方引起一个中断,好像产生一个断点,故又称断点中断。
    • 在断点处,可显示寄存器或存储单元内容,以便调试。
  4. 溢出中断
    • 如果上一条指令使溢出标志OF=1,那么在执行溢出中断指令INTO时,立即产生一个4型中断,中断类型号为4.
  5. 软件中断指令INT n
    • 8086的指令系统有一条INT n指令,执行这条指令就会立即产生中断。在用软件中断指令时,中断指令本省就为CPU提供了中断类型号。
    • 从原则上将中断类型号可以是0~255D中任意一个,所以用软件中断的办法可以通过任何一个中断处理程序,也就是说即使某个中断子程序是为外部中断而设计的,但是一旦将中断处理子程序装配到内存之后,也可以通过软件中断的方法进入这样的中断处理子程序
    • 归纳
      • 中断类型号或者包含在指令中,或者是预先规定的。
      • 用一条指令进入中断处理子程序,并且中断类型号由指令提供
      • 进入中断时,不允许执行中断响应总线周期,也不从数据总线读取中断类型号
      • 不受中断允许标志IF的影响,也就是说不管IF是1还是0,任何一个软件中断均可执行。不过软件中断的1号中断受标志寄存器中TF影响。只有TF为1时,才能执行单步中断
      • 正在执行软件中断时,如果有外部硬件中断请求,并且是非屏蔽中断请求,那么CPU会在执行玩当前指令后立即响应;如果在执行软件中断时来了可屏蔽中断请求,并且这之前由于中断处理子程序找个执行了开发中断指令,从而使中断允许标志位IF为1,那么CPU也会在当前指令执行完后影响可屏蔽中断请求
      • 因为硬件中断是由外部硬件设备发出中断请求信号而引起的,所以外部硬件中断总是带有随机性的,而软件中断是由程序中的中断指令引起的,因此软件中断没有随机性

中断向量和中断向量表

中断向量表的概念

  1. 中断类型号

    • CPU在响应中断后,都要保护现场和断电,然后转入相应的中断服务程序。因此,中断操作要解决一个首要问题就是找到与中断源对应的中断服务子程序入口地址。
    • 在8086系统中,通过采用中断类型号和中断向量的办法来解决这个问题
    • 系统中设有256 类中断,每类中断分配到一个8位的编号(从00H到0FFH),共256个编号,这个编号就成为中断类型号。
  2. 中断向量

    • 8086中断系统的256个中断源对应256个中断服务程序。
    • 中断服务程序的入口地址叫中断向量由16位段地址和16位偏移地址组成。每个中断源对应一个中断向量
    • 中断向量有4个字节的长度
  3. 中断向量表

    • 把系统中所有中断向量集中起来存放到存储器的某一区域内,这个存放中断向量的存储区域就叫中断向量表或中断服务程序入口地址表
    • 8086系统把中断向量表安排在内存地址0000H~003FFH区域(1KB),每4个连续字节存放一个中断向量,其中高地址字单元存放段地址,低地址字单元存放偏移地址,一共可以存放256个中断服务程序的入口地址
  4. 中断向量表地址(指针)

    • 中断向量表地址指示中断向量在中断向量表存储位置,它就是中断向量的地址。

    • 存放中断向量的4个存储单元的最低低至就是中断向量表地址。

    • 中断向量在中断向量表中按中断类型号存放的,所以中断向量表地址可以由中断类型号乘以4计算出来。

    • 例如软磁盘INT 13H,它的中断向量为0070H:0FC(H),当处理中断时,CPU根据中断类型号13H*4后得到中断向量的第一个字节指针,既13H*4=004CH。从004CH开始连续4个单元中用来存放INT 13H的中断向量,既(004CH)=C9H(004DH)=0FH(004EH)=70H(004FH)=00H

    • 这样,如果已知一个中断CPU类型号,则通过两次地址转换(中断类型号->中断向量表地址->中断处理处理程序入口地址)后,CPU即可转入中断服务程序执行。

  5. 8086中断向量表

    • 8086系统把中断向量表中的中断向量明确分为3个部分。
    • 第一部分为专用中断,从类型0到类型4,共5种类型。它们占表中0000~0013H单元,共20字节,这5中中断的入口地址已由系统定义,不许用户做任何修改。
      • 类型0 除法出错中断
      • 类型1 单步中断
      • 类型2 外部引入不可屏蔽中断
      • 类型3 断点中断
      • 类型4 溢出中断
    • 第二部分为系统备用中断,从类型5到类型31,这是Intel公司为软、硬件开发保留中断类型,一半不允许用户改作其他用途,其中许多中断已被系统开发使用,例如类型21H已用作系统DOS功能调用的软件中断
    • 第三部分是类型32到类型255,可供用户使用。这些中断可由用户定义为软中断,由INT n指令引入,或是通过INTR引脚直接引入的可屏蔽硬件中断

中断向量的设置

中断向量并非常驻内存,而是开机上电时,由程序装入指定的存储区内。BIOS程序只负责中断类型号00H~1FH共32种中断的中断向量的装入。 也就是8086中断向量表的第一部分和第二部分的装入。

用户在应用系统中使用中断时,需要在初始化程序中将中断服务子程序的入口地址装入中断向量表指定的存储单元中,以便CPU响应中断请求后,由中断向量自动引导到中断服务子程序

中断向量的设置,既可以使用传送指令直接装入指定单元,也可以使用DOS系统功能调用INT 21H中的25H号功能调用装入,还可以采用串操作、伪指令等设置。

  1. 用传送指令直接装入

采用这种方法设置中断向量,就是将中断服务子程序的入口地址,通过数据传送指令直接送入中断向量表指定的单元中,既可完成中断向量的设置

例如:设某中断源的中断类型号n40H,中断服务子程序的入口地址为INT_P,则设置中断向量的程序段如下:

clt							;IF=0,关中断
mov ax, 0					;ES指向0段
mov es, ax
mov bx, 40H*4				;向量表地址送BX
mov ax, offset INT_P		;中断服务子程序的偏移地址送AX
mov word ptr ES:[BX], ax	;中断服务子程序的偏移地址写入向量表
mov ax, seg INT_P			;中断服务子程序段基址送AX
mov word ptr es:[bx+2], ax	;中断服务子程序的段基址写入向量表
sti							;IF=1,开中断

...
INT_P proc					;中断服务子程序
	...
	IRET					;中断返回
INT_P ENDP	
  1. 用DOS系统功能调用

INT 21HDOS系统功能调用中,用25H号DOS功能调用可设置中断向量,用35H号DOS功能调用可获取中断向量。

  • 25H号DOS功能调用

入口参数是:

  1. AH=25H
  2. AL=中断类型号
  3. DS=中断服务子程序入口地址的段地址
  4. DX=中断服务子程序入口地址的偏移地址

例如,设某终端类型号n40H,中断服务子程序入口地址为INT_P,调用25H号功能装入中断向量的程序段如下

clt						;IF=0,关中断
mov al, 40H				;中断类型号40H送AL
mov dx, seg INT_P		;中断服务子程序的段基址送DS
mov ds, dx				
mov dx, offset INT_P	;中断服务子程序的偏移地址送DX
mov ah, 25H				;25H功能调用
int 21H
stl						;IF=1,开中断
...

INT_P proc				;中断服务子程序
	...
	IRET				;中断返回
INT_P ENDP	

在实际应用中,为了不破坏向量表中的原始设置,通常在装入新的中断向量之前,先将原有的中断向量取出保存,待中断处理完毕,再将源中断向量恢复。

DOS 串操作

35H号是DOS功能调用

入口参数是

  1. AH=35H
  2. AL=中断类型号

出口参数是

ES=中断服务子程序入口地址的段地址

BX=中断服务子程序入口地址的偏移地址

例如,从中断类型号为40H对应的向量表中取出中断向量的程序段如下:

mov ah, 35H
mov al, 40H
int 21H

该程序段执行后,从中断向量表中获取的中断向量存放在ESBX中,ES中存放段基址,BX中存放偏移地址。

8086中的中断响应和处理过程

在8086系统中各种中断的响应和处理过程是不完全相同的,但主要区别还在于如何获取响应的中断类型号

  1. 中断源识别

在8086系统中有一个灵活的中断系统,可以处理256种中断源。8086系统采用中断向量法识别不同的中断源

  1. 中断判优

8086规定的中断优先级顺序(从高到底)为:除法出错->INT n->断点中断->溢出中断->NMI->INTR->单步中断。中断判优流程图

  1. 中断源提供中断类型号

80X86系列微机每个中断源都有对应的中断类型号(0~255D)供CPU识别。不同的中断类型提供中断类型号的方式不同

  1. 当内部中断发生时,按预定的方式得到中断类型号(专用中断:0、1、3、4)
  2. 在用软件中断时INT n时,中断指令本身就是CPU提供了中断类型号n
  3. 非屏蔽中断类型号固定是2
  4. 可屏蔽中断的由请求中断的设备提供中断类型号

CPU获取可屏蔽中断类型号经过一下阶段,如图

中断响应周期有2个,每个响应周期包括4个T周期,他们是T1、T2、T3和T4。2个中断响应周期之间由空闲状态(3个T周期)隔开。每个中断响应周期,CPU都往引脚$\overline{\text{INTA}}$发一个负脉冲信号,这两个负脉冲豆浆从T2一致维持到T4状态的开始。请求中断的中断源收到第二个负脉冲$\overline{\text{INTA}}$以后,立即把中断类型号送到数据总线低8位D0~D7上传输给CPU中。

在这两个总线周期的其余时间,D0~D7是浮空的。

  1. 中断处理
  1. 断点保护。将报纸寄存器、当前段寄存器(CS)和指令指针(IP)内容压入堆栈
  2. 关闭中断,并清除IFTF位(IF<-0,TF<-0),以便禁止响应可屏蔽中断或单步中断。
  3. 将取得的中断类型号乘4,到中断向量表中取中断向量(中断处理程序的入口地址),其中高2字节段地址送到CS中,低2字节偏移地址送到IP中,一旦中断处理程序的入口地址装入IPCS,CPU就开始执行中断服务程序。
  4. 中断服务程序一般包括保护现场、中断服务、恢复现场等部分。同时,为了能够处理多重中断,还可在中断服务程序的适当地方加入开中断指令(STL)

可屏蔽中断的处理过程如图

  1. 中断返回

中断服务程序的最后一条中断返回指令IRET

CPU执行IRET指令后,将恢复断点,返回原程序执行。

可编程中断控制器8259A

8259A是一种可编程序中断控制器PIC,又称“优先权中断控制器”,具有强大的中断管理功能。

8259A的主要功能有:

  1. 可管理8级优先权的中断源,通过级联可扩充至管理64级优先权的中断源
  2. 通过编程对每一级中断源都可实现屏蔽或允许
  3. 能向CPU提供中断类型号
  4. 8259A提供多种工作方式,可以通过编程来选择。

8259A的结构

中断请求寄存器IRR

一片8259A有8条外部中断请求先IR0~IR7,每一条中断请求先有相应的触发器来锁存信号

从而形成了中断请求寄存器IRR

IRR有边触发和电平触发两种触发方式,可通过编程来进行设置。

当某一个IRi端接受到中断请求信号时,则IRR的响应位将被置“1”,当多位中断请求信号有效时,则多位被置“1”。

当中断请求被响应后,响应的IRR位被复位。

简答的说就是对8个中断请求信号进行锁存。

中断屏蔽寄存器IMR

IMR是一个8位的寄存器,用来存放CPU送来的屏蔽信号,IMR的每一位对应着IRR中响应的中断源进行屏蔽,当IMR的某一位设置为“1”时,则对应的中断请求就被屏蔽,不能进入系统的下一级。就是说不能进入到的优先级判别器PR去判优

中断服务寄存器ISR

中断服务寄存器是一个8位寄存器,用来记录正在处理中的所有中断请求。

当任何一级中断请求被响应,且CPU正在执行它的中断服务程序时,ISR中相应的位将被置1,并将一直保持到该级中断处理过程结束为止。

在多重中断时,ISR中可能有多位同时被置1

优先级判别器PR

PR用来管理和识别IRR中各个中断源的优先级别,基本功能有:

  1. 通常IR0的优先级最高,IR7的优先级最低,但可通过CPU送入命令来定义或修改IR0~IR7中各位的优先级别。
  2. 当有多个中断请求同时出现时,选出其中级别最高的中断源
  3. 当中断允许嵌套时,选出的中断源的优先级别若高于正在服务的中断,则CPU中止当前的中断处理,执行更高一级的中断处理
  4. 当CPU响应中断而获得响应信号$\overline{\text{INTA}}$时,使ISR中的相应位置1

控制逻辑

根据优先级别判别器的请求,控制逻辑负责向CPU发出中断请求信号INT,同时接受CPU发出的中断响应信号$\overline{\text{INTA}}$,并产生各种控制信号。

如置位ISR中的相应位,送出中断类型号发送到总线D7~D0等。

数据总线缓冲器

数据总线缓冲器是8259A与系统数据总线的接口,是一个8位的双向三态数据缓冲器。

CPU对8259A编程时的控制字通过它写入8259A。

8259A的状态信息也是通过它写入CPU的。

在中断响应周期,8259A送给CPU的中断向量也是通过它来传送的。

读/写逻辑

根据CPU送来的读/写信号和地址信息,完成CPU对8259A的所有写操作和读操作。一片8259A只占有两个IO端口地址。用地址先A0来选端口

级联缓冲器/比较器

在级联应用中,只有一片8259A作为主片,其他均为从片,但最多不能超过9片。

对于主8259A,其级联信号CAS0~CAS2为输出信号;对于从8259A,其级联信号CAS0到CAS2为输入信号。

此时,主片8259A在第一个$\overline{\text{INTA}}$响应周期内通过CAS0~CAS2送出3位识别码,而和此识别码相符的从8259A将在第二个$\overline{\text{INTA}}$响应周期内送出中断类型号到数据总线上,使CPU进入响应的中断处理程序。

当8259A工作于缓冲方式时,它作为控制系统总线缓冲器传送方向的输出信号;

当8259A工作于非缓冲方式时,作为输入信号,用于规定该片8259A是作为主片(SP=1)还是从片(SP=0),因此一个系统中,只可能主片的8259A的$\overline{\text{SP}}$/$\overline{\text{NE}}$引脚接高电平,其他从片均应接地。

命令寄存器

从对8259A编程的角度来看,8259A共有7个8位寄存器,这些寄存器分为两组:初始化命令字寄存器和操作命令字寄存器

  1. 初始化命令字寄存器

    这组寄存器有4个,用来存放初始化命令字,分别为ICW1~ICW4。初始化命令字时系统启动时,由初始化程序设置的,是8259A工作的前提条件。初始化命令字一旦设定,一般在系统工作过程中不会改变

  2. 操作命令字寄存器

    这组寄存器有3个,用来存放操作命令字,分别为OCW1~OCW3操作命令字在应用程序中设定的,用来对中断过程动态控制。在系统运行过程中,操作命令字可以多次设置

8259A的引脚

8259A采用双列直插式封装,有28个引脚,其引脚如图

D7~D0:双向、三态数据线,与系统数据总线的D7到D0相连,用来传送控制字、状态字和中断类型号等。

IR7~IR0:中断请求输入信号,从IO接口获取其他8259A(从控制器)上接受中断请求信号。在采用边沿触发方式时,IRi输入应由低到高,此后保持为高,直到被响应;在采用电平触发方式时,IRi输入应保持高电平

$\overline{\text{RD}}$:读信号,输入,低电平有效,用于读取8259A中某些寄存器的内容(如IMR,ISR或IRR)

$\overline{\text{WR}}$:写信号,输入,低电平有效,通知8259A接受CPU从数据总线上送来的命令字

INT:中断请求信号,高电平有效,该引脚接CPU的INTR引脚

$\overline{\text{INTA}}$:中断响应信号,输入,与CPU的中断应答信号相连。

$\overline{\text{CS}}$:片选信号,输入,低电平有效。通常接地址姨妈期的输出。只有该地址有效,CPU才能对8259A进行读/写操作

A0:端口地址选择信号,输入,作为8259A片内译码,用于选择内部寄存器。每片8259A对应的两个端口地址,一个为A0=1时,另一个A0=0地址。

CAS2~CAS0:级联信号线,作为主片与从片的连接线,主片为输出,从片为输入,主片通过CAS2-CAS0的编码选择和管理从片

$\overline{\text{SP}}$/$\overline{\text{EN}}$:双向信号线,用于从片选择或总西咸驱动器的控制信号。在缓冲方式中(既8259A通过一个数据总线收发器与系统总线相连),该引脚用于输出线,控制收发器的接受或发送;在非缓冲方式中农,作为输入线,确定该8259A是主控制器($\overline{\text{SP}}$/$\overline{\text{EN}}$=1)还是从控制器($\overline{\text{SP}}$/$\overline{\text{EN}}$=0)

8259A的中断处理过程

8259A是一种可编程程序中断控制器,具有很强的中断寻址能力。

在8086系统中8259A中的中断处理过程为:

  1. 当有一条或若干条中断请求线(IR7~IR0)有效,则中断请求寄存器IRR的响应位置位
  2. 若中断请求线至少有一条是中断允许的,则8259A通过INT引脚向CPU的INTR引脚发出中断请求信号
  3. CPU在当前指令执行完后,若检测到中断请求信号,且处于开中断状态(IF=1),则会暂停执行下一条指令,进入中断响应总线周期,发送两条$\overline{\text{INTA}}$信号给8259A作为响应。
  4. 8259A在接受到来自CPU的第一个$\overline{\text{INTA}}$信号后,中断源中优先级最高的ISR位被置位,而响应的IRR位被复位。在该周期中,8259A不向数据总线发送任何内容
  5. 在第二个$\overline{\text{INTA}}$脉冲期间,8259A向CPU发出中断类型号(一个0~255D的数),并将其放置在数据总线上。CPU从数据总线上得到这个中断向量后,将此向量乘以4,就可以在中断向量表中找到相应的中断服务程序入口地址

8259A向CPU传送的中断类型号是一个8位的二进制数,如图

其中高位T7~T3是8259A初始化时设置的,而低3位是8259A自动插入的。

例如8259A初始化时设置T7~T300001,中断请求来自IR2,则该中断源的中断类型号为00001010B

  1. 中断响应周期结束后,CPU就转而执行中断服务程序。采用AEOI(自动结束中断)方式时,在第二个$\overline{\text{INTA}}$脉冲结束时,ISR的响应位就自动复位。否则,在中断服务程序中,应在IRET指令前加入发送EOI命令的指令,是ISR的相应位复位。

8259A的工作方式

中断优先级管理方式

8259A提供的中断优先级管理方式共5种

  1. 一般全嵌套方式

    • 一半全嵌套方式是一种按固定优先级别最高抵来管理中断的工作方式,IR0的优先级别最高,IR7最低。当一个中断请求被响应后,ISR中的对应位被置"1"。除非采用自动中断结束方式,否则,在CPU发出中断结束命令前,ISR中的对应位一致保持"1",从而封锁同级的或较低级别的中断请求,但能响应较高级的中断请求,实现中断嵌套。
  2. 特殊全嵌套方式

    • 特殊全嵌套方式与一般全嵌套方式基本相同。在特殊全嵌套方式下,可响应同级的中断请求。

    • 从片的INT连接到主片的IRi上,每个从片的IR0~IR7有不同的优先级别,但从主片看来,每个从片是作为同一优先级的。如果采用一般全嵌套方式,从片中某一较低级的中断请求被响应后,主片会把从片的所有其他的中断请求(包括优先级较高的)视为同一级中断而屏蔽掉,无法实现从片的中断嵌套。所以在主从结构的8259A系统中,常将主片设置为特殊全嵌套方式。这样在执行某中断服务程序时,不但可以响应优先级更高的中断请求,而且也能响应同级中断请求。

  3. 优先级自动循环方式

    • 采用优先级自动循环方式时,IR7~IR0优先级别是可以改变的。其变化规律是:当某中断请求IRi服务结束后,该中断的优先级自动降为最低,而紧跟其后的中断请求IRi+1的优先级自动升为最高。假设在初始状态IR0有请求,CPU为其服务完毕后,IR0优先权自动降为最低,排在IR7之后,而其后的IR1的优先权升为最高,其余类推。这种优先级管理方式,可以使8个中断请求都拥有享受同等优先服务的权限
    • 如上图所示,CPU在进行IR6的中断服务过程中,产生了IR3的中断请求,已知当时的中断优先权次序为IR0最高,IR7最低。因为IR3的优先级别高于IR6,所以CPU把IR6的中断处理过程暂时挂起(或暂停),而进入IR3的中断服务程序,这就是一个中断嵌套过程。
    • 如上图所示,当IR3的中断服务程序完成之后,ISR3复位并使IR3的中断优先级变为最低级,同时其余中断源优先级别跟着变化,使得原来优先级别较低的中断源优先级变高
  4. 优先级特殊循环方式

    • 采用这种方式时就,可以通过发送特殊优先级循环方式操作命令来指定某个中断源的优先级别最为低级,其余中断源的优先级别也随之循环变化。
  5. 中断屏蔽方式

    • 中断屏蔽方式是8259A对接至IR7~IR0的外部中断源实现屏蔽的一种中断管理方式,有普通屏蔽方式和特殊屏蔽方式两种
    • 普通屏蔽方式:是利用8259A的中断屏蔽寄存器(IMR)来实现对中断请求IRi的屏蔽。将IMR中的Di位置1,则可屏蔽接至IRi(i=0~7)中的请求。
    • 特殊屏蔽方式:
      • 在某些中断应用场合,往往会希望在执行中断服务程序时,还允许响应较低优先级别的中断请求,这时需要采用特殊屏蔽方式
      • 采用特殊屏蔽方式时,可在中断服务程序中用中断屏蔽命令来屏蔽当前正在服务的中断级别,同时使中断服务寄存器ISR中的对应位自动清“0”。这样不仅屏蔽了当前真该处理的本级中断,还真正开放了其他较低级别的中断请求。

结束中断的处理方式

当8259A响应某一级中断请求并为其服务时,中断服务寄存器ISR中的相应位将被置“1”。在中断服务程序结束时,需要将ISR相应位清“0”,以结束此次中断服务。

清ISR的方法有两种:

  1. 是在中断服务结束之前向8259A发出EOI命令,称为非自动中断结束方式

  2. 是在第二个$\overline{\text{INTA}}$响应信号结束时由8259A自动清除,称为自动中断结束方式

  3. 非自动中断借宿方式(EOI)

    所谓EOI方式是指在中断服务程序末尾向8259A发出中断结束(EOI)命令,以清除ISR的相应位,表示中断服务程序已经结束。EOI命令有普通EOI命令和特殊EOI命令两种

    • 普通EOI命令
      • 普通EOI命令将清除ISR中所有已置位的位中优先级最高的那一位,因此它适用于一半全嵌套方式下的中断结束,因为此时正在服务的中断源必定是优先级别最高的。
    • 特殊EOI命令
      • 当8259A不工作于一般全嵌套方式时,就不能应用普通EOI命令,因为此时ISR中优先级最高的那一位不一定就是正在服务的中断级别,此时必须通过特殊EOI命令结束中断。特殊EOI命令中带有用于指定ISR中相应位复位的3位编码信息。特殊EOI命令可以作为任何优先级管理方式的中断结束命令
      • 若系统采用8259A多片级联,那么不管是利用普通EOI命令还是特殊EOI命令结束中断,都必须发送两次EOI命令,一次EOI命令发给从片,另一次EOI命令发给主片。向从片发送EOI命令后,必须等到所有提出中断申请的中断源都别服务过了,才能向主片发送一次EOI命令
  4. 自动中断结束方式(AEOI)

    采用此种方式时,在第二个$\overline{\text{INTA}}$响应信号的上升沿,由8259A自动执行中断结束操作,复位ISR中已置位的中断优先级别最高的位。采用自动中断结束方式时,在中断处理过程中,只要有中断出现,且CPU开中断,则任何级别的中断请求都将得到响应。中断请求信号如果没有及时撤销,就会被再次响应,既所谓的“二次中断”,所以AEOI仅适合于不要求中断嵌套的情况下。

中断触发的方式

  1. 电平触发方式

    以IRi引脚上出现的高电平作为中断请求信号,请求一旦被响应,该高电平信号应及时撤销

  2. 边沿触发方式

    以IRi引脚上出现由低电平向高电平跳变作为中断请求信号,跳变后高电平一致保持,直到中断被响应。

连接系统总线的方式

  1. 缓冲方式

    缓冲方式主要用于多片8259A级联的大系统中。在缓冲方式下,8259A通过总线收发器(如8286)和数据总线相连。8259A的$\overline{\text{SP}}$/$\overline{\text{NE}}$作为输出,$\overline{\text{NE}}$有效。

  2. 非缓冲方式

    非缓冲方式主要用于单片8259A或片数不多的8259A级联系统中。该方式下,8259A直接与数据总线相连,8259A的$\overline{\text{SP}}$/$\overline{\text{NE}}$作为输入,$\overline{\text{SP}}$有效。只有单片8259A时,$\overline{\text{SP}}$/$\overline{\text{NE}}$端必须接高电平;有多片8259A时,主片的$\overline{\text{SP}}$/$\overline{\text{NE}}$端接高电平,从片的$\overline{\text{SP}}$/$\overline{\text{NE}}$端接低电平。

查询工作方式

8259A也可工作在查询工作方式。此时8259A的INT引脚不连接CPU的INTR引脚,所以PCU不能收到来自8259A的中断请求。这时CPU若要了解有误中断请求,就必须先向8259A发出中断查询命令,然后利用一条读入命令,从8259A读入中断查询字。8259A中断查询字的格式如下图,CPU根据读入的中断查询字,即可识别有误中断请求。

例如:已知在PC中8259A的端口地址为20H和21H,读中断查询字(读出最高级别的中断请求IRi)的程序段如下

mov al, 0cH		;OCW3=0CH
out 20H, al		;OCW3写入8259A, P<-1
int al, 20H		;读8259A的20H端口,得到中断查询字

8259A的编程与应用

总线

一些题

存储器

  1. 计算机中采用Cache-主存,主存-辅存两个层次结构解决容量、速度、价格之间的矛盾

  2. 当EPROM芯片擦除后数据是FFH

  3. 微机系统中,增加高速缓存Cache的目的是提高内存工作速度

  4. 用若干RAM实现位扩展时,其方法是将地址线、控制线和片选信号线并联起来,数据线要单独引出

  5. 1024个存储单元的存储器,使用单译码的输出线是1024根,双译码的输出线是64根。25+25=64

简答题:

  • 在8086CPU构成的系统中,什么是存储的规则字什么是非规则字?8086CPU对一个规则字和一个非规则字读写时有什么差别?
    • 答:当存储器存放的数是一个字节时,将按顺序存放在每个存储单元中;当存放的是一个字时,字的低字节放在低地址中,高字节存放在高地址中,并以低字节的地址作为字地址。若字地址为偶地址。则成为规则字,若字地址为奇地址称为非规则字
    • 差别:
      • 对访问字节的指令,需要一个总线周期
      • 对访问偶地址字的指令,需要一个总线周期
      • 对访问奇地址字的指令,需要两个总线周期(CPU自动完成)
posted @ 2020-12-30 17:20  蜡笔没有大象  阅读(2114)  评论(0)    收藏  举报