《微机原理与接口技术》知识点总结
文章目录
一、8086/8088微处理器
寄存器类型:
通用寄存器
- AX: AL, AH
BX: BL, BH
CX: CL, CH
DX: DL, DH - 堆栈指针寄存器:SP
- 基址指针寄存器:BP
- 源变址寄存器:SI
- 目的编制寄存器:DI
段寄存器
CS, DS, SS,ES
标志寄存器
IP,FLAGS
状态标志寄存器(FLAGS)
状态控制:存放运算结果的特征;
(CF,SF,AF,PF,OF,ZF)
CF
进位标志位
PF
奇偶标志位
AF
辅助进位标志位
ZF
零标志位
SF
符号标志位
OF
溢出标志位
控制标志:控制某些特殊操作;
(IF,TF,DF)
TF
跟踪标志位
IF
中断允许标志位
DF
方向标志位
二、8086CPU指令系统
数据传送指令MOV
MOV指令格式:MOV dst, src
立即数到通用寄存器的数据传送
MOV AL, 4 ;AL=4
MOV AX, 1000 ;AX=1000
MOV SI, 037BH ;SI=037BH
CS,DS,SS,ES,IP,FLAGS不能用立即数赋值。
mov ax, 2000
mov ds, ax
立即数到存储单元的数据传送
注意:MOV指令的两个操作数类型是确定的。
MOV [1500H], 9
这种形式不可以。 9可以是字节类型,也可以是字类型的。[1500H]可以表示一个内存单元,也可以表示首地址的内存单元。
应当写成
MOV BYTE PTR [1500H], 9
MOV BYTE PTR [SI], 9
MOV WORD PTR [1500H], 9
MOV WORD PTR [SI], 9
CPU内部寄存器之间的数据传送
MOV AL,BL
MOV AX, BX
MOV DS, AX
MOV AX, BL
MOV [BX],[SI]
MOV DS, ES
寄存器与存储单元之间的数据传送
MOV AL,[2000H]
MOV AX,[SI]
MOV [3200H], CX
MOV ARRY[DI], DL
MOV DL, [BX][SI]
除法指令DIV/IDIV
如果除数是字节类型,被除数必须是字类型而且要预置在AX中;如果除数是字类型,被除数必须是双字类型而且要预置在DX:AX中。
无符号除数指令DIV
DIV BL
商存到AL中,余数存到AH中。
DIV BX
商存到AX中,余数存到DX中。
DIV BYTE PTR[SI]
商存到AL中,余数存到AH中。
DIV WORD PTR[DI]
商存到AX中,余数存到DX中。
说明
带符号数的除法指令IDIV
余数符号与被除数符号保持一致。
符号扩展指令CBW,CWD
使用符号扩展指令对数据类型进行调整。指令不影响标志位。
CBW
功能:字节转换为字。将AL中的数的符号位扩展至16位,扩展的符号部分存入AH中,即由AL扩展为AX,值保持不变。
CWD
功能:字转换为双字。将AX中的数的符号位扩展至32位,扩展的符号部分存入DX中。即由DX:AX代替AX,值保持不变。
逻辑运算指令
慕课:逻辑运算指令
逻辑运算指令可以对操作数的任意位进行置位、清0。逻辑运算指令的执行影响6个状态标志位,其中CF和OF标志位会被清0,其他状态位的变化与运算结果有关。
因为逻辑运算不会进位也不会溢出。
(1)与指令AND
指令格式
AND ,OPRD1, OPRD2
AND AL, 0FH ;取AL的低4位,屏蔽高4位。
AND AX, BX ;AX与BX进行与运算,结果保存在AX中。
AND [SI], AL ;内存单元[SI]与AL与,结果存回内存单元
AND DX, [BX+SI]
AND AX, AX ;AX不变,CF=OF=0
指令执行使标志位CF=OF=0,AF值不定,对SF、PF和ZF产生影响。
(2)或指令OR
OR指令实现或运算。
OR AX, CX
OR [DI], AL
OR AL, 0FH ;AL的低4位被置1,高4位不变。
OR AL, 80H ;AL的符号位置1,其它位保持不变。
例子:对AL进行偶校验:
OR AL, AL ;改变PF的值,若为奇数个1发送,如果为偶数个1,将最高位置位1
JPE CONTINUE
OR AL,80H
CONTINUE: ...
(3)非指令NOT
指令格式:NOT OPRD
功能:将OPRD
逐位取反,结果返回OPRD
中。
例如:
MOV AL, 0FH
NOT AL ;AL=F0H
NOT BYTE PTR[SI]
(4)异或指令XOR
功能:OPRD1
与OPRD2
按位进行异或操作,结果回送OPRD1
中。
例如:
XOR AX, CX
XOR BYTE PTR[DI], 4AH
XOR AX, AX ;AX=0,同时标志位CF=0F=0,这条指令常用于算术运算指令之前清理运算环境。
(5)测试指令TEST
指令格式:TEST OPRD1, OPRD2
功能:OPRD1
与OPRD2
按位进行与操作,但是结果不回送OPRD1
中,所以指令执行后两个操作数的值保持不变。
指令的执行使标志寄存器的标志位CF=OF=0,AF值不变,SF\PF和ZF受影响。通常是ZF位最受关注。
例如:
TEST AL, 04H
TEST [SI], 80H
AL的二进制表示:xxxx xxxxB
04H的二进制表示:0000 0100B
如果AL的第2位为0,那么相与后结果为0,ZF=1;反之相与后不为0,ZF=0。
OPRD1
中的特定某一位进行测试,OPRD2
用于说明测试的是OPRD1
中的哪一位。OPRD2
的取值为01H, 02H, 04H, 08H, 10H, 20H, 40H, 80H等等。例如测试AL的第0位,可以安排如下一条指令:
TEST AL, 01H
指令执行后AL的值保持不变,但标志位受到影响。如果ZF=0说明AL的第0位是1,如果ZF=1说明AL的第0位为0。
移位指令
非循环移位指令
逻辑左移指令SHL,逻辑右移指令SHR,算术左移指令SAL,算术右移指令SAR
逻辑左移指令SHL
指令格式:SHL OPRD, COUNT
功能:将 OPRD 逐位进行左移,最低位第0位向左移到第1位,依次移动,最高位移
出OPRD,移到标志寄存器的 CF 中;第0位空出,用0填补。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
逻辑右移指令 SHR
指令格式:SHR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位向右移到次高位,依次移动,第0位移出 OPRD,移到标志寄存器的 CF 中;最高位空出,用0填补。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为1或 CL。
算术左移指令 SAL
指令格式:SAL OPRD, COUNT
说明:算术左移指令与逻辑左移指令的功能相同,这里不再赘述,但算术左移指令将操
作数作为带符号数处理。
算术右移指令 SAR
指令格式:SAR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位向右移到次高位,依次移动,第 0 位移出 OPRD,移到标志寄存器的 CF 中;最高位保持不变。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
循环移位指令
循环移位,顾名思义首尾相接成一个环,左循环移位后可以通过右循环移位来还原数据,反之亦然。
4条循环移位指令又按照CF标志位是否参加循环细分为两组,一组CF不参加循环移位但仍然随着循环操作变化,又称为不带CF的循环移位指令;另一组CF参加循环,称为带CF的循环移位指令。
(1)不带 CF 的循环移位指令
循环左移的指令格式:ROL OPRD, COUNT
功能:将 OPRD 逐位进行左移,第 0 位移到第 1 位,依次移动,最高位移至第 0 位,
同时最高位又移到标志寄存器的 CF 中。
循环右移的指令格式:ROR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位移到次高位,依次移动,第 0 位移至最高位,
同时最高位又移到标志寄存器的 CF 中。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
(2)带 CF 的循环移位指令
循环左移的指令格式:RCL OPRD, COUNT
功能:将 OPRD 逐位进行左移,第 0 位移到第 1 位,依次移动,最高位移至 CF 位,
CF 位移到第 0 位。
循环右移的指令格式:RCR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位移到次高位,依次移动,第 0 位移至 CF 位,
CF 位移到最高位。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
四、汇编语言程序设计
伪指令
又称作伪操作语句,它是用来控制汇编语言源程序的汇编过程的,比如如何定义变量、为数据分配存储空间、如何对源程序汇编等。伪操作语句是由汇编程序定义的,也是由汇编程序处理的。伪操作语句汇编后不生成目标代码,所以常被称为伪指令(directive)。它不属于CPU的指令系统,只与汇编程序(MASM)有关。
五、存储器
存储器件
所有的存储器件都有==地址输入引脚、数据输出或数据输入引脚、从多片存储芯片中选定一个芯片的片选引脚,控制读写操作的控制引脚。
地址输入引脚
接受CPU发过来的地址信息,以选定存储芯片内部的存储单元。芯片上的地址线都是由A0开始标记到An。
00 0000 0000~11 1111 1111B,即000H~3FFH。
地址线为A0~A10根的芯片,地址范围为:
000 0000 0000~111 1111 1111B,即000H~7FFH。
数据输入引脚
芯片选择线(/CS)
所有存储器件都有芯片选择线,而且至少一根,用来选中这个芯片,或者说激活这个芯片。片选择线常被标识为片选#CS,片使能#CE、或简称为选择#S。
如果存储芯片含有多跟选择线,则只有在所有选择线都处于有效时,芯片才被激活,CPU才可以对它进行读写操作。
读写控制线(/OE、/WE)
每个存储器都有控制输入输出的控制线,常常标记为#OE,#WE。
6264芯片
6264芯片与系统的连接
因此用芯片的13位地址码A0-A12寻址片内的每个单元
6264芯片的编址
A19~ A13 | A12 ~ A0 | 位置 |
---|---|---|
xxxx xxx | 0 0000 0000 0000 | 片首地址 |
xxxx xxx | 1 1111 1111 1111 | 片尾地址 |
译码:将输入的一组高位地址信号通过变换,产生一个有效的输出信号,用于选中某一个存储器芯片,从而确定了该存储器芯片在内存中的地址范围。
将输入的一组二进制编码变换为一个特定的输出信号。
译码方式
全地址译码
用全部的高位地址信号作为译码信号,使得存储器芯片的每一个单元都占据一个唯一的内存地址。
部分地址译码
用部分高位地址信号(而不是全部)作为译码信号,使得被选中存储器芯片占有几组不通得地址范围。
存储器接口设计注意点
六、输入输出
I/O接口概述:
I/O接口的基本功能
I/O接口及其编制方式
I/O地址译码
1. I/O接口
接口要解决的问题
高速的微处理器与低速的外设能过够协调的工作,需要有一个具有数据缓冲和锁存的能力、数据格式转化能力、定时控制能力并且能够提供外设状态的连接电路,我们把它叫作输入输出接口。
系统设备
可编程中断控制器、DMA控制器、PCI总线、系统实时时钟、扬声器、定时器等等时组成系统不可或缺的设备,常称为系统设备。
外围设备
键盘、鼠标、显示器、打印机、磁盘、光盘、摄像头、音箱等属于外围设备,常称为外部设备。
I/O接口应具有以下能力
- 地址译码:CPU通过给接口分配地址识别接口,并通过地址总线将地址信息传给接口。接口应该具有地址译码的能力。
- 数据传送
- 提供握手联络信号
外部设备的工作速度往往远低于CPU的处理速度,CPU发送的数据不能被外设即使读取,造成数据丢失,因此需要握手联络信号使得CPU与I/O设备同步。
I/O接口必须能够提供外部设备的状态信息,同时能够根据CPU的命令输出控制信号,对外设实时控制。 - 数据格式转换
- 信号电平转换
外部设备多是复杂的机电设备,其信号电平多数与TTL或者MOS电路不兼容,需要接口来完成信号的电平转换。 - 错误检测功能
接口和设备间的数据传输经常收到干扰,导致信息出错,接口应具备一定的错误检测能力,对传输信息进行校验。
2. I/O端口及其编址
端口:接口电路中用于缓存数据及控制信息的部件
计算机系统中包含各类不同功能的接口电路。
每个接口中含有1个或多个端口
端口地址
寻址端口的方法:
每个端口地址 = 片选地址(高位地址)+ 片选地址
8086/8088寻址端口的能力:
端口的编址方式:
8088/8086的I/O端口编址
3. I/O地址译码
OUT指令将使总线的**#IOW信号有效
IN指令将使总线的#IOR**信号有效
I/O地址译码
由于端口资源丰富,端口地址译码常采用部分地址译码。
简单接口电路
了解和掌握:
1. 接口的分类及特点

2. 三态门接口
3. 锁存器接口
**特点:**具有对数据的锁存能力
74L273
无论是IO接口,还是存储器接口,读写控制信号都一定要作为译码器的输入。
基本输入/输出方法
无条件传送
查询式传送
中断方式传送
直接存储器存取(DMA)
1. 无条件传送
2. 查询工作方式

优点:软硬件比较简单
缺点:CPU效率低,数据传输的实时性差,速度较慢
3. 中断控制方式
4. DMA控制方式
特点:
总结
简单I/O接口电路设计
例1:
例2:
七、可编程数字接口
可编程并行接口芯片8255
1. 并行接口8255的特点
通道型接口:主要用于数据的输入或输出
含3个独立的8为并行输入/输出端口
各端口均具有数据的控制和锁存能力
可通过编程,设置各端口工作在某一确定状态下
2. 8255内部的主要部件
有3个8位的数据端口,每个端口都可以作为输入端口,或设置为输出端口。
3. 8255引脚信号
链接系统端的主要引线:
A1 | A0 | 选中端口 |
---|---|---|
0 | 0 | A端口 |
0 | 1 | B端口 |
1 | 0 | C端口 |
1 | 1 | 控制寄存器 |
连接外设端的引脚:
分别对应A、B、C三个端口
4. 8255的工作方式
方式0——基本的输入/输出方式
习惯上:
A端口和B端口作为8位数据的输入或输出口
C口的某些位作为状态输入。
注:

方式1——选通工作方式
方式1输入
方式1输出
方式2——双向传送方式
双向输入输出方式
只有A端口可以工作在方式2下
方式2的应用:
此时C口的所有位都用做选通控制信号的输入输出
此时C口的剩余位也可工作于方式0
4. 方式控制字及位控制字


5. 8255芯片的应用



MOV DX, 1023H ;控制寄存器地址
MOV AL, 10010000B ;
OUT DX, AL
MOV AL, 0 ;设置PC0为低电平
OUT DX, AL
MOV DX, 1021H ;PB端口
MOV AL, 80H ;PB7输出高电平,启动布防
OUT DX, AL
A: MOV DX, 1020H ;从A端口读数据
IN AL, DX
CMP AL, 0 ;判断是否全为0
JZ A ;
MOV CX, 10 ;循环次数
MOV DX, 1022H ;C端口
MOV AL,1 ;高电平闪烁
B: OUT DX, AL ;亮
CALL DELAY
NOT AL ;反转为0,灭
CALL DELAY
LOOP B
可编程并行数字接口应用例
利用8255和8253构造报警系统
系统软件设计
8255_INIT PROC ;初始化子程序
PUSH AX ;压栈
PUSH DX
MOV DX, 3E3H ;写8255控制字
MOV AL, 90H(10010000B);PA方式0输入,PB方式0输出,PC方式0输出
OUT DX, AL
MOV AL, 0CH (00001100B) ;PC6置0
OUT DX, AL
MOV AL, 0FH (00001111B) ;PC7置1
OUT DX, AL
PUSH DX
PUSH AX
RET
8255 INIT ENDP
8253_INIT PROC
PUSH AX
PUSH DX
MOV DX, 3E7H ;8253控制字
MOV AL, 16H(00010110B);计数器0,读/写低字节,方式3(方波),二进制计数
OUT DX, AL
MOV DX, 3E4H ;8253计数器0
MOV AL, 189;
OUT DX, AL
PUSH DX
PUSH AX
RET
8253 INIT ENDP
L1: MOV DX, 3E0H ;PA口,8个监测点
MOV CX, 5 ;循环5次
L2: IN AL, DX ;读监测点数据
CMP AL, 0 ;是否有异常
JZ L1 ;若无异常继续L1程序段检测
LOOP L2 ;否则检查是否连续5次都有异常
MOV DX, 3E2H ;PC口,报警器+警灯
L3: MOV AL, 40H(01000000B) ;PC6高电平\PC7低电平
OUT DX, AL ;警报
CALL DELAY
MOV AL, 0C0H(11000000B) ;PC6\PC7高电平
OUT DX, AL ;警报+警灯
CALL DELAY
MOV AH, 1;键盘按下执行下一条程序---》MOV AL, 80H
INT 16H
JZ L3
MOV AL, 80H
OUT DX, AL
可编程定时计数器8253
计数与定时
定时/计算器的工作基准是时钟脉冲
计数脉冲周期恒定 –> 定时
定时的时间长度取决于时钟脉冲的周期及脉冲数
加法计数
减法计数
8253芯片特点
可编程的逻辑器件;
非通道型的接口,具有特定功能;
可实现计数和定时;
(例如定时启动空调)
工作方式:
认识学习8253主要从这几个方面:
- 外部主要引脚信号功能即内部结构
- 计数启动方式
- 工作方式
- 控制命令字格式
- 应用
1. 外部引线及内部结构
连接系统端的主要引线:
连接外设段的主要引线
具有三个完全相同的、独立的计数/定时器
每个计数器都占有一个端口地址
每一个计数器里面都有两个16位的寄存器:16b初值寄存器、16b计数寄存器。
这两个寄存器在初始都填入值,但16b初值寄存器数值不变,16b计数寄存器中的数值从初始减到0。
A1 | A0 | 选中端口 |
---|---|---|
0 | 0 | CNT0 |
0 | 1 | CNT1 |
1 | 0 | CNT2 |
1 | 1 | 控制寄存器 |
2. 计数启动方式
启动方式由GATE端信号的形式决定
软件启动:GATE端必须为高电平
硬件启动:GATE端有一个上升沿
3. 工作方式
方式0
先写命令字后写初值
① 当GATE为高电平时,输入初值后开始计数。
②计数结束后输出高电平。
③其输出信号可用于外部可屏蔽中断请求信号。
方式1
①计数一旦启动,GATE端即使变为低电平也不会影响计数。
②可重复触发。当计数到0后,不用再次写入计数初值。只要再次出现GATE上升沿型号产生一个同样宽度的负脉冲。
方式2
①可输出频率为(1/N)CLK脉冲信号的连续方波信号。
②每1个OUT端脉冲包含(N-1)*CLK的正脉冲,1CLK的负脉冲。
方式3
①若N为偶数,输出频率为(1/N)CLK的连续对称方波信号
②若N为奇数,输出波形为(N+1)/2CLK周期的正脉冲,(N-1)/2CLK负脉冲。
方式4
①软件启动,不自动重复计数。
②计数结束输出一个CLK宽度的低电平。
方式5
①硬件启动,不自动重复计数
②波形与方式4相同
小结
控制字
4. 控制字
5. 8253的应用
硬件设计:
软件设计
与系统的连接示意
应用中的注意点
每一次启动计数,需要有2次写操作:
每个计数器的控制命令字均送入控制寄存器
各计数器的计数初值送到该计数器的计数寄存器及初值寄存器。
初始化程序流程
原则:先写入控制字,后写入计数初值
8253应用例



初始化程序:
CNT0:
MOV DX, 0123H
MOV AL, 34H
OUT DX, AL
MOV DX, 0120H
MOV AX, 20000
OUT DX, AL
MOV AL, AH
OUT DX, AL
八、模拟输入/输出接口
D/A转换器
1. D/A转换器的基本工作原理

2. D/A转换器的主要技术指标
一个满量程为5V的10位D/A变换器的分辨率为:
5/(210-1)=5/1025=0.04888V=48.88mV
3. 典型D/A转换器DAC0832
特点:
主要引脚功能
D7~D0:输入数据线
ILE:输入锁存允许
#CS:片选信号
#WR1:写输入锁存器
#WR2:写DAC寄存器
IOUT1
IOUT2

有两道缓冲门
单缓冲模式
MOV DX, PORT
MOV AL, DATA
OUT DX, AL

输出三角波:(不考虑频率和赋值调整)
MOV DX, 0278H ;端口
MOV AL, 0 ;从0开始增加
NET1: OUT DX, AL ;输出电压
INC AL ;增加1
CMP AL, 0FFH ;比较是否达到峰值
JNZ NET1 ;未到达,跳转
DEC AL ;到达峰值,开始减
NET2: OUT DX, AL ;输出电压
DEC AL ;减少1
CMP AL, 0 ;比较是否到达0
JNZ NET2 ;否,跳转NET2,继续减1
JMP NET1 ;是,跳转NET1,重新开始
双缓冲模式(标准模式)
两片0832
两片0832的DAC寄存器具有同样的地址,其#XFER 并联在一起,共同使用了PORT3的地址
MOV AL, DATA
MOV DX, PORT1; 0832-1的输入寄存器地址
OUT DX, AL
MOV DX, PORT2; 0832-2的输入寄存器地址
OUT DX, AL
MOV DX, PORT3; DAC寄存器地址
OUT DX, AL
HLT
无缓冲器模式
4. D/A转换器的应用
A/D转换器
将连续的变换的模拟信号转换为数字信号的装置,简称ADC,是模拟系统与计算机之间的接口部件。
1. A/D转换器的工作原理
类似天平称重量的尝试法,逐步用砝码的累积重量去逼近物体。

2. 主要技术指标
3. 典型的A/D转换器芯片–ADC0809
ADC0809:
主要引脚功能
内部结构
工作流程
与系统的连接
采集方式
此时通道可由硬件确定,系统无须输出通道地址,则也无需地址锁存。

系统通过软件方式循环输出不同的通道地址,即相应的地址锁存信号。


中断
中断的概念
中断,是指在程序执行过程中,出现某种紧急事件,CPU暂停执行现行程序,转去执行处理该事件的程序——中断服务程序,执行完后再返回到被执行的程序继续执行,这一过程称为中断。
中断源
中断源
常见中断源
(1)一般的I/O设备发出的中断请求,如键盘、打印机等。
(2)数据通道发出的中断请求,如键盘、打印机等。
(3)实时时钟发出的中断请求,如定时芯片8253的定时输出。
(4)硬件故障发出的中断请求,如电源掉电、RAM奇偶校验错等。
(5)软件故障发出的中断请求,如执行出书为0的除法运算、地址越界、使用非法指令等。
(6)软件设置的中断源,如在程序中用中断指令而产生的中断。
中断处理的基本过程
中断处理的基本过程包括:中断请求、中断判优、中断响应、中断服务和中断返回等5个阶段。
1. 中断请求
(1)发生在CPU内部的中断,不需要中断请求,CPU内部的中断控制逻辑直接接收处理。
(2)外部中断请求由中断源提出。外部中断源利用CPU的中断输入引脚输入中断请求信号。一般CPU设有两个中断请求输入引脚:可屏蔽中断请求输入引脚和不可屏蔽中断请求输入引脚。
(3)中断请求触发器:
每个中断源发出中断请求信号的时间是不确定的,而CPU在何时响应中断也是不确定的。所以,每个中断源都有一个中断请求触发器,锁存自己的中断请求信号,并保持到CPU响应这个中断请求之后才将其清除。
(4)中断允许触发器
在CPU内部有一个中断允许触发器,当其为“1”时,允许CPU响应中断,称为开中断。若其为“0”,不允许CPU响应中断,中断被屏蔽,称为关中断。
2. 中断判优
(1)软件判优
CPU检测到中断请求后,首先读取中断请求寄存器的内容,逐位检测它们的状态,检测到某一位为1,就确定对应的中断源有中断请求,专区执行它的中断服务程序。
先检测哪一个,哪一个的优先级就高,后检测哪一个,哪一个优先级就低,检测的顺序就是各中断源的优先级顺序。
输入端口地址为67FFH。查询程序:
MOV DX, 87FFH
IN AL, DX ;读中断请求寄存器内容
SHR AL, 1 ;右移一位,移到CF位置上
JC IR0 ;IRQ0有请求,转IR0
SHR AL, 1
JC IR1 ;IRQ1有请求,转IR1
SHR AL, 1
JC IR2 ;IRQ2有请求,转IR2
软件判优耗时较长。如果中断源很多,中断的实时性就很差,但是软件判优优先权安排灵活。
(2)硬件判优
利用专门的硬件电路确定中断源的优先级,有2种常见的方式,菊花链判优电路和中断控制器判优。
中断控制器,如Intel8259A,可以以多种方式设置中断源的中断优先级。中断控制器中有一个中断优先级判别器,它自动判别出目前提出中断请求的优先级最高的中断源,并将它的中断向量码送到数据总线,CPU接收中断向量码并据此找到它的中断服务程序。
3. 中断响应
经过中断判优,中断处理就进入中断响应阶段。中断响应时,CPU向中断源发出中断响应信号,同时:
① 保护硬件现场;
② 关中断;
③ 保护断电;
④ 获得中断服务程序的入口地址。
4. 中断服务
中断服务程序的一般结构为:
- 保护现场。在中断服务的起始部分安排若干条入栈指令,将各寄存器的内容压入堆栈保存。
- 开中断。在中断服务程序执行期间允许级别更高的中断请求现行的中断服务程序,实现中断嵌套。
- 中断服务。完成中断源的具体要求。
- 恢复现场。中断服务程序结束前,必须恢复主程序的中断现场。通常是将保存在堆栈中的现场信息弹出到原来的寄存器中。
- 中断返回。返回到原程序的断点处,继续执行源程序。
5. 中断返回
返回到原程序的断点处,恢复硬件现场,继续执行原程序。中断返回操作是中断响应操作的逆过程。
中断向量和中断向量表
中断向量表位于内存起始地址00000
~003FFH
的存储区内。从地址00000H
开始,每4个单元存放一个中断向量,其中低地址的两个单元存放中断向量的偏移地址,高地址的两个单元存放中断向量的段基址。256种中断向量按中断向量码从0 ~255的顺序依次存入中断向量表中。
中断向量在中断向量表中的存放首地址称为向量地址,其值为:中断类型码 x 4。
当CPU调用中断类型码为n的中断服务程序时首先把n乘以4,得到他的向量地址4n,然后把4n+1
:4n
两个单元的内容去除并装入IP寄存器;再把4n+3
:4n+2
两个单元的内容去除并装入CS寄存器,CPU就获得了n
的中断服务程序入口地址,进而转去执行中断服务程序。
8086/8088CPU专用中断类型有5个
硬件中断
8086/8088CPU芯片有两个硬件中断请求信号输入引脚:NMI和INTR, 用来接收外部中断源产生的中断请求。NMI引脚接收非屏蔽中断请求,INTR引脚接收可屏蔽中断请求。
(1)非屏蔽中断
(2)可屏蔽中断
中断处理流程
CPU在每条指令的最后一个时钟周期按照下列顺序检测有无中断请求:
- 执行指令时是否有异常情况发生,如除法错;
- 有没有单步中断请求(TF=1);
- 有没有NMI非屏蔽中断请求;
- 有没有协处理器段超限;
- 有可屏蔽中断请求信号吗?
- 是中断指令吗?
获得中断类型码后,各种中断的处理过程相同。CPU将中断类型码放入暂存器保存,以下动作顺序发生:
- 标志寄存器的内容入栈;
- 清除中断标志IF和TF
- CS的内容入栈;
- IP的内容入栈;
- 根据中断类型码,在中断向量表中取出中断向量转入IP和CS;
- 执行中断服务程序;
- 中断返回。
堆栈的变化
CPU响应中断时将状态表制寄存器的内容压入堆栈以保护现场,堆栈指针SP减2,接着CPU将主程序断点CS和IP的内容压入堆栈以保护断点,堆栈指针SP再减4。在中断服务程序的末尾执行IRET指令,从堆栈中弹出IP\CS\FLAGS,堆栈指针SP+6,堆栈恢复原状。
中断响应时,CPU发中断响应信号,同时:
① 保护硬件现场;
② 关中断;
③ 保护断点;
④ 获得中断服务程序的入口地址。
可编程中断控制器8259A
Intel 8259A可编程中断控制器 可以管理8个外部中断源,多偏8259A级联最多可以管理64个外部中断源(1个主片,8个从片),而无需外加电路。
它有多种工作方式。
CPU响应中断时,它提供中断源的中断向量码。
内部结构
8259A的内部逻辑由以下部分构成:
(1)数据总线缓冲器,它是CPU与8259A之间的数据总线接口,传输的信息包括控制信息、状态信息及中断信息。
(2)读/写控制逻辑。
8259只有一根地址线,说明内部只有2个端口。
A0 = 0时,偶地址。A0 = 1时,奇地址。
(3)级联控制,用以实现8259A芯片之间的级联,使得中断源可以由8级扩展至64级。
(4)中断请求寄存器IRR,用于寄存IR0~IR7的中断请求信号。如果由中断请求,IRR寄存器中的对应位置1。
(5)中断服务寄存器ISR,保存当前正在处理的中断请求。当CPU正为某个中断源服务时,8259A使ISR中的相应位置1。当ISR全为“0”时,表示无任何中断服务。
(6)优先级分辨其PR,也称优先级判决器,用来管理和试别各个中断源的优先级别。
(7)操作命令字寄存器,OCW1~OCW3,用于对中断处理过程的动态控制,由应用程序设定,在一个系统运行过程中,操作命令字可以被多次设置。
中断屏蔽寄存器IMR用于存放CPU送来的中断屏蔽信号OCW1,它的每位对应IRR寄存器中的位。当它的某位为“1”时,对应的中断请求就被屏蔽,即对该中断源的中断请求置之不理。
(8)初始化命令字寄存器
ICW1~ICW4,由初始化程序设置。初始化命令字送入8259A时,必须严格按着规定的顺序。
引脚功能
A0:地址输入引脚,选择8259A内部不同的寄存器。
A0 = 0 ICW1 \ OCW2 \ OCW3
A0 = 1 ICW~ICW4\ OCW1
CAS2~CAS0:级联信号引脚,用来选择从片。当8259A为主片时,为输出;否则为输入。与#SP/#EN信号配合,实现芯片的级联。
#SP/#EN:从片编程/允许缓冲器,双功能引脚。在非缓冲方式下,#SP/#EN引脚作为输入,用来决定本片8259A是主片还是从片。#SP/#EN为1,则8259A为主片。#SP/#EN为0,则8259A为从片。在缓冲方式下,#SP/#EN引脚作为输出,用作8259A外部数据总线缓冲器的信号。
8259A编程
1. 初始化命令字
(1)ICW1
(2)ICW2
(4)ICW4
2. 操作命令字
在8259A的工作期间,操作命令字用于控制8259A的操作。例如,可以通过操作命令字重新设置工作方式,或者实施读取8259A中某些寄存器的内容。
(1)OCW1
中断屏蔽字。用于设置或读取中断屏蔽器IMR,它对IR7~IR0的中断请求输入进行管理。
ICW1 EQU 00010011B ;13H写入20端口
ICW2 EQU 00100000B ;20H写入21端口,设置8个中断源的中断向量码
ICW4 EQU 00000011B ;03H写入21端口,中断结束方式是自动结束
OCW 1 EQU 00000000B ;00H写入21端口,8个中断源都没有屏蔽
Init PROC
MOV DX, CS8259A
MOV AL, ICW1
OUT DX, AL
MOV DX, CS8259B
MOV AL, ICW2
OUT DX, AL
MOV DX, CS8259B
MOV AL, ICW4
OUT DX, AL
MOV DX, CS8259B
MOV AL, OCW1
OUT DX, AL
STI ;开中断
RET
Init ENDP