第六章计算机中的中断技术本章内容
§ 6.1 输入 /输出方式
§ 6.2 中断概述
§ 6.3 8086中断系统
§ 6.4 中断分类
§ 6.5 中断矢量表初始化
§ 6.6 常用 DOS系统功能调用
§ 6.1 输入 /输出方式
1.无条件传送方式无条件传送方式又称同步传送方式,优点是不用查询外设的状态,使用相应 I/O指令便可实现输入 /输出操作,使得程序简单,节省硬件和软件;
缺点是必须已知且确信外设已准备好的情况下才能使用,否则就会出错。
当外设信号变化非常慢以至人们任何时候都认为它已处于“准备好”
状态时,也可以采用无条件传送方式。
IN AL,PORT1
OUT PORT2,AL
2.查询式传送方式
CPU需要 I/O接口提供状态和数据两个端口,
CPU通过状态端口查询外设的状态,若数据“准备好”就进行数据传送,否则继续查询。
查询式传送的优点是通用性好,硬件接线和查询程序十分简单,但在查询过程中,一直占用
CPU,CPU利用率极低。
3 中断传送方式中断传送方式是利用 CPU本身的中断功能和 I/O
接口的中断功能来实现对外设 I/O数据的传送的。
采用中断方式传送 I/O
数据可以大大提高
CPU的工作效率。中断传送方式是最重要,
也是使用最广泛的一种形式。
4.DMA传送方式为了提高数据传送的效率,在数据传送过程中,
希望 CPU不要参与,在存储器与外设之间直接进行大批量数据传送,在数据传送过程中,CPU将总线出借给 DMA控制器( DMAC),CPU失去对总线的控制,数据传送结束后,再将总线控制权交还 CPU例如磁盘、磁带等批量传送设备均使用
DMA传送方式。
中断技术出现在第二代微机的末期,是计算机发展的里程碑和革新,没有中断技术就没有计算机的发展,没有中断技术就没有计算机的今天,开机计算机就处于中断状态。
§ 6.2中断概述当 CPU正在运行某段程序(主程序或子程序)突然有一个外部事件企图终止 CPU现行程序,希望 CPU
对该事件服务,此时 CPU若条件允许,就转到该事件的程序中运行,当程序结束后,CPU又回到原来程序的断点处继续运行,这样一个完整的过程称为中断。
1.什么是中断?
中断过程中断过程
①中断申请
②中断响应
③中断处理
④中断返回




IRET
CPU执行某中断服务程序时,可以响应中断优先级别更高的中断请求,这就是中断嵌套。
二级嵌套
2.中断嵌套根据事情的轻重缓急,中断级别可以由软件或硬件设置。
① CPU应工作在中断方式( CPU开中断,IF=1)
②申请中断的事件优先级别到位
③ CPU执行完当前一条完整的指令以后
① 中断请求触发器(由外设提供的请求信号,被触发器锁定 → CPU提出申请)
②中断屏蔽(允许)触发器,可以用指令设置,决定是否允许该设备发出申请信号。
③中断的优先级别排队(电路硬件排队 ),离 CPU越近级别越高
3.中断响应的条件
4.具有中断功能的接口电路初始状态均可向 CPU发申请,经 CPU判断响应某一设备,该设备后面的中断都被置 0屏蔽,不能再向 CPU
发申请,但该设备前面的设备可以发申请。
④ 中断矢量寄存器用来存放各接口的设备号,CPU响应中断时,向该接口发出一个中断响应信号 INTA,该信号将接口上的中断矢量寄存器选中,将设备号送到 CPU,设备号乘以 4形成一个该设备的中断服务程序的入口地址表地址,
从地址表中查出中断服务程序的入口地址。入口地址由两部分组成:段基址( CS)和偏移地址( IP)占用 4个字节。
① 处理突发事件(实时处理)
②可以实现多任务多用户管理
③可以提高 CPU的效率
5.中断的意义
8086有 256个中断类型号 (设备号 ) (0~ 255)
§ 6.3 8086中断系统
1.中断矢量(向量 )
中断矢量是中断处理子程序的入口地址,每个中断类型对应一个中断矢量。
在内存中,00000H ~003FFH( 1KB)区域内设置了一个中断矢量表,表里放的是中断服务程序的入口地址(矢量地址,内存的任何地方)。
入口地址占四个字节单元 (256× 4=1024B),高字节放的是段地址( CS),低字节放的是偏移地址( IP)。每个中断源对应一个中断服务程序,每一个中断服务程序都有固定的入口地址,当中断源发出申请时,先将中断类型号送给 CPU,CPU将中断类型号 N× 4得到入口地址的矢量表地址,按表地址取出入口地址开始执行中断服务程序。
物理入口地址 =CS× 16+IP
例,INT 5
5× 4=20 =14H,构成 00014H,它就是 5号功能调用的表的入口地址。
例,键盘中断的矢量号为 09H,它的中断服务程序入口地址为 0BA9H:0125H。键盘中断对应的中断矢量表位于 0000:0024H(09H× 4=24H)开始的 4单元。这 4个单元的内容如下,
中断调用指令
INT N N=0~255,将 IF,TF清零,不影响其余的标志位,先将标志寄存器,CS,IP寄存器内容依次压入堆栈,SP内容减 6修改,再将 (N*4)单元内容送 IP寄存器,( N*4+2)单元内容送 CS寄存器,
即转入中断处理程序。
中断溢出指令
INTO 当测试到 OF=1,则产生中断,执行的操作类似于 INT指令,溢出中断类型号是 04H,
溢出中断的中断处理程序一般只有一条 IRET指令。
中断返回指令
IRET 将栈定单元内容依次弹入 IP,CS和标志寄存器,SP的内容加 6修改,指向新的栈顶,该指令的标志位由堆栈中取出的值来设置,IRET指令必须放在中断处理程序的末尾。
① 内部中断,CPU在运行过程中出现异常自动产生的中断处理过程(不受 IF控制)
②中断功能调用(软中断)
软中断是 CPU根据软件中的某条指令或者软件对标志寄存器中的设置而产生的,完全和硬件电路无关。 CPU执行 INT N指令,产生中断,N是中断类型号(不受 IF控制)
§ 6.4 中断分类系统功能调用
DOS功能调用:常用 INT 21H
BIOS功能调用 (快)占用一些类型号用户编程是不能用,多用在显示方式关于中断功能调用:
DOS操作系统为用户提供了许多个子程序,用户编程时可以用 INT N指令调用这些子程序,为编程带来很多方便。
③ 外部中断,NMI和 INTR 输入外部中断源产生的中断请求接口上产生的中断申请信号(硬中断)
不可屏蔽中断 NMI(高电平)不受 IF控制可屏蔽中断 INTR(高电平)受 IF控制
NMI:由于紧急事件而产生的中断申请,申请信号不能用指令屏蔽。一旦产生申请,CPU执行完当前指令后,无条件响应。引起 2号中断矢量,由芯片内部决定,CPU不需要执行中断响应的总线周期去读取矢量码。如:存储器奇偶校验错及电源故障报警等。
INTR( INT):可屏蔽中断申请信号,由指令设置中断屏蔽寄存器,决定对中断源屏蔽与否。
CPU响应中断的过程软中断号是指令给出的,硬中断是接口传过来的。
CPU响应 INTR请求时,连续执行两个中断响应的总线周期在一个总线周期,CPU使地址 /数据线处于浮空状态,并在 T2~ T4间发出中断响应信号 INTA,
在第 二个总线周期,CPU再次发出 INTA信号,
8259A利用的此信号有效将中断矢量号送上数据线,
CPU读取它,将读到的中断的矢量号 × 4→ 矢量表 →
入口地址。
中断矢量表设置在 RAM低位存储区( 0~ 003FFH)
内。它并不常驻内存,每次开机启动后,在系统正式工作前都必须对其进行初始化,即将相应的中断服务程序入口地址装入中断矢量表中。 PC系列各机型启动过程中,首先由 ROM BIOS自测试代码对 ROM BIOS
控制的中断矢量进行初始化装入。对于 8086/8088系统装入 0~ 1FH共 32个中断矢量,对于 80286以上 CPU系统装入 0~ 77H共 120个中断矢量。若用户开发的应用程序采用 INT N形式调用,则要将中断服务程序入口地址提前存入中断矢量表中所选定的单元中。
§ 6.5 中断矢量表初始化采用 DOS系统功能调用。即 INT 21H的 25H号功能调用。调用前先将中断服务程序的段地址装入
DS,偏移量装入 DX,选定的中断矢量号 n装入 AL,
25H功能号装入 AH,然后执行 INT 21H即可。改变中断矢量期间,DOS将会自动禁止硬件中断,以防止修改过程中外部中断使用此中断矢量。
MOV DX,OFFSET INT; 中断服务程序偏移量 → DX
MOV AX,SEG INT ;中断服务程序段地址 → AX
MOV DS,AX
MOV AL,n ;中断矢量号 n→AL
MOV AH,25 H ;功能号 25H→AH
INT 21H
DOS系统功能调用
INT 21H是系统功能调用,本身包含 80多个子程序,
每个子程序对应一个功能号,其编号从 0~57H 。
功能调用的格式:
⑴ 传送入口参数到指定寄存器中;
⑵ 功能号送入 AH寄存器;
⑶ INT 21H
有的程序没有入口参数,则只需安排后两个语句,
调用结束后,系统将出口参数送到指定寄存器中或从屏幕上显示出来。
1号 DOS系统功能调用,使用格式如下所示:
MOV AH,1
INT 21H
没有入口参数,执行时,系统等待键盘输入,
待程序员按下任何一键,系统先检查是否 Ctrl-
Break键,如果是则退出,否则将该键字符的
ASCII码置入 AL寄存器中,并在屏幕上显示该字符。
§ 6.6 常用的系统功能调用
1.键盘输入单字符
0AH号系统功能调用,功能是将键盘输入的字符串写入到内存缓冲区中,因此必须事先在内存储器中定义一个缓冲区,其第一字节给定该缓冲区中能存放的字节数,第二字节留给系统填写实际键入的字符个数,从第三个字节开始用来存放键入的字符串,最后键入回车( ↙ )键表示字符串结束。如果实际键入的字符数不足填满缓冲区时,则其余字节填,0”;如果实际键入的字符数超过缓冲区的容量,
则超出的字符将被丢失,而且响铃,表示向程序员发出警告。
2.键盘输入字符串

BUF DB 20
DB?
DB 20,DUP(?)

MOVDX,OFFSET BUF
MOV AH,0AH
INT 21H;定义缓冲区; 0AH号系统功能调用
2号系统功能调用,使用格式如下所示:
MOV DL,’ A’
MOV AH,2
INT 21H
执行 2号系统功能调用时,将置入 DL寄存器中的字符从屏幕上显示输出(或打印机打印输出)。
3.输出单字符
9号系统功能调用,其功能是将指定的内存缓冲区中的字符串从屏幕上显示输出来(或打印输出)。
缓冲区中的字符串必须以,$”字符作为结束标志。
BUF DB ‘good bye $’

MOVDX,OFFSET BUF
MOVAH,9
INT 21H
执行 9号系统功能调用时,将内存缓冲区 BUF中存放的字符串(以,$”字符为结束)送屏幕显示输出
(或送打印机打印输出)。
4.输出字符串
6号系统功能调用,如果( DL) =0FFH,则表示是从键盘输入单字符送 AL寄存器中;如果( DL)
≠ 0FFH,则表示是将 DL寄存器中内容送屏幕显示输出。
MOV DL,0FFH
MOV AH,6
INT 21H;键盘输入单字符送 AL中( DL=FFH);将 DL中的字符,A”送屏幕显示( DL≠FFH )
MOV DL,’ A’
MOV AH,6
INT 21H
5.直接控制台输入 /输出单字符
7号系统功能调用,等待从标准输入设备输入单字符置入 AL寄存器中,但不送屏幕显示。
MOV AH,7
INT 21H
它没有入口参数,系统等待从控制台标准输入设备输入单字符后,将其 ASCII码置入 AL寄存器中。
6.无回显直接控制台输入单字符
8号系统功能调用,等待从键盘输入单字符,
将其 ASCII码置入 AL寄存器中,但不送屏幕显示。
MOV AH,8
INT 21H
它没有入口参数,与 1号功能调用的区别仅在于键入的字符不送屏幕显示。
7.无回显键盘输入单字符
3号系统功能调用,其使用格式如下所示:
MOV AH,3
INT 21H
没有入口参数,系统将从异步通信口串行输入的字符置入 AL寄存器中。
4号系统功能调用,其使用格式如下所示:
MOV DL,’ $’
MOV AH,4
INT 21H
执行结果将 DL寄存器中的字符通过异步通信口串行输出。
8.向串口输入单字符
9.向串口输出字符
4CH号系统功能调用,其使用格式如下所示:
MOV AH,4CH
INT 21H
没有入口参数,执行结果是结束当前正在执行的程序,并返回操作系统。屏幕显示操作系统提示符
( N>),N为当前使用的驱动器名。
10.返回 DOS操作系统
11.设置日期
2BH号系统功能调用,其功能是设置有效日期。
例如,当前需要设置的日期是 2005年 12月 26日,那么应将年号,2005”以 BCD码形式置入 CX寄存器中,
将月号,12”置入 DH寄存器中,将日期,26”装入 DL
寄存器中。其使用格式如下所示:
MOV CX,2005H
MOV DH,12H
MOV DL,26H
MOV AH,2BH
INT 21H
执行的结果是将有效日期设置为 2005年 12月 26日,
如果没有设置成功,则 0→ AL寄存器,否则 FFH→ AL
寄存器。从此以后日期会自动修改。
12.取得日期
2AH号系统功能调用,其功能是将当前有效日期取到 CX和 DX寄存器中,存放格式与设置日期时相同,其使用格式如下所示:
MOV AH,2AH
INT 21H
没有入口参数,执行结果是将年号置入 CX寄存器中,月份和日期置入 DX寄存器中。
2DH号系统功能调用,其功能是设置有效时间。例如当前有效时间是 8点 15分 20.5秒,那么应将小时数,8”置入 CH寄存器中,分钟数,15”置入 CL寄存器中,秒数,20”置入 DH寄存器中,百分之一秒数,50”置入 DL寄存器中。其使用格式如下所示:
MOV CX,0815H
MOV DX,2050H
MOV AH,2DH
INT 21H
执行结果是将当前有效时间设置为 8点 15分 20.5
秒,以后会自动修改时间。如果设置成功,则将 AL寄存器内容清,0”。否则将 AL寄存器置全,1”。
13.设置时间
2CH号系统功能调用,其功能是将当前时间置入
CX和 DX寄存器中,存放格式与设置时间相同。其使用格式如下所示:
MOV AH,2CH
INT 21H
没有入口参数,执行结果是将当前时间送入 CX
和 DX寄存器中供使用
14.取得时间矢量号 10H
功能号,AH=0
入口参数,AL=常用显示方式号 ( 0~ 6)
BIOS中断调用
BIOS中断调用要比 DOS中断调用复杂些,但运行速度快,功能更强些。 BIOS中断调用颇具特色的是显示中断子程序,其矢量号是 10H。
1.设置显示方式显示方式号 显示方式
0 40列 × 25行黑白文本方式
1 40列 × 25行彩色文本方式
2 80列 × 25行黑白文本方式
3 80列 × 25行彩色文本方式
4 320列 × 200行黑白图形方式
5 320列 × 200行彩色图形方式
6 640列 × 200行黑白图形方式对于高分辨率,只支持黑白显示。
例:屏幕设置成 80× 25彩色文本方式。
MOV AH,0 ;设功能号
MOV AL,3;设显示方式
INT 10H
矢量号 10H
功能号,AH=2
入口参数,BH=页号,通常取 0页
DH=行号,取值 0~ 24
DL=列号,对于 40列文本,取值 0~
39,对于 80列文本,取值 0~ 79。
例:将光标置在第 10行 30列。
MOV BH,0
MOV DH,10
MOV DL,30
MOV AH,2
INT 10H
2.设置光标位置矢量号 10H
功能号 AH=9
入口参数,BH=页号
AL=显示字符的 ASCII码
BL=属性
CX=重复显示的次数属性字节含义如下:
3.在当前光标处写字符和属性
0到 3位表示前景,4到 7位表示背景。 L位为 1时表示背景闪烁,否则不闪; I位为 1时表示前景为高亮度,否则为一般亮度。属性字节中 R位表示红色,
G位表示绿色,B位表示兰色。
文本方式 16种颜色的组合用兰色清屏,然后在第 10行 30列显示 20个红底白字‘ A’。
MOV AL,0 ; AL=0时,清屏参数
MOV BL,10H ;蓝色背景,无闪烁,属性 → BL
MOV AH,6 ;清屏功能号 6
MOV CX,0 ;从 0行到 0列
MOV DH,24 ;到 24行
MOV DL,79 ; 79列
INT 10H ;清屏幕
MOV AH,2
MOV BH,0 ;页号
MOV DH,10
MOV DL,30
INT 10H ;光标设置在第 10行 30列
MOV AL,’A’
MOV CX,20 ;重复显示 20个字符‘ A’
MOV BH,0 ;页号
MOV BL,4FH ; 属性 → BL,红底,白字
MOV AH,9
INT 10H ;显示 20个字母‘ A’
矢量号 10H
功能号,AH=0AH
入口参数,BH=页号
AL=显示字符的 ASCII码
CX=重复显示的次数与功能号 9类似。
4.在光标位置写字符(不改变属性)
矢量号 10H
功能号,AH=0BH
入口参数,当 BH=0时,BL=背景颜色,范围 0~ 15;
当 BH= 1时,BL=颜色组,范围 0~ 1:
0表示绿 /红 /黄,1表示青 /品红 /白矢量号 10H
功能号,AH=0CH
入口参数,DX=行号,CX=列号,AL=彩色值(当
AL第 7位为 1时,原显示彩色与当前彩色作按位加运算)。
5.设置图形方式显示的背景和彩色组
6.写光点矢量号 16H
( 1)功能号,AH=0H
返回参数,AL=输入字符的 ASCII码
( 2)功能号,AH=1
返回参数:若按过键(键盘缓冲区不空),则 ZF
标志置 0,AL=输入字符的 ASCII码;若没有按键,则
ZF标志置 1。
( 3)功能号,AH=2H
返回参数,AL=特殊功能键的状态
7.读键盘矢量号 14H
功能号,AH=0H
入口参数,AL=初始化参数
DX= 0表示对 COM1初始化; DX=1表示对 COM2
初始化。
8.串行通信口初始化位 7,6,5表示波特率:
0 0 0 110 波特
0 0 1 150 波特
0 1 0 300 波特
0 1 1 600 波特
1 0 0 1200 波特
1 0 1 2400 波特
1 1 0 4800 波特
1 1 1 9600 波特位 4,3表示奇偶校验设定:
0 0 无奇偶校验
0 1 奇校验
1 1 偶校验位 2表示停止位数设定
0 1位停止位
1 2位停止位位 1,0表示通信数据位数设定
1 0 7位数据通信
1 1 8位数据通信矢量号 14H
功能号,AH=1
入口参数,AL=待输出数据
DX= 0 表示从 COM1输出;
DX=1 表示从 COM2输出
9.串行通信口输出矢量号 14H
功能号,AH=2
入口参数:
DX= 0表示 COM1从输入;
DX=1表示从 COM2输入。
返回参数:
输入成功时,AH第 7位= 0,AL=输入数据;
输入失败时,AH第 7位= 1,AH第 0到 6位=通信口状态。
10.串行通信口输入位 0为 1时表示接收数据准备好;
位 1为 1时表示超越错;
位 2为 1时表示奇偶错;
位 3为 1时表示帧格式错;
位 4为 1时表示间断;
位 5为 1时表示发送保持器空;
位 6为 1时表示发送移位寄存器空;
位 7为 0时表示正确;为 1时表示错误。