第八章 输入/输出和中断程序设计
1.教学目的:掌握I/O程序设计,特别是实模式下的中断程序设计的方法
2.教学要求:
①掌握I/O端口与端口地址及I/O指令。
②熟悉无条件传送、查询传送、中断传送和DMA传送的基本工作原理。
③熟悉内部中断和外部中断,理解中断向量表的安排。
④掌握中断请求、中断判优、中断响应、中断处理和中断返回五个过程的原理。
⑤熟悉内部中断和外部中断,理解中断向量表的安排。
⑥掌握中断处理程序的设计
⑦掌握设置和获取中断向量的方法
⑧熟悉BIOS中断调用概念和调用方法
⑨熟悉DOS中断调用概念和调用方法
3.教学重点:
①中断传送和DMA传送
②中断处理程序的设计
4.掌握难点:
①中断处理程序的设计
5.教学进程安排:P207~P246
6.教学方法:
课堂讲授
7.教学内容摘要
8.1 I/0设备的数据传送方式
8.1.1 CPU与外设的数据传送方式
1.三类信息
(1)控制信息
(2)状态信息
(3)数据信息
2.I/O设备与主机之间进行数据交换方式:
(1)程序直接控制方式
(2)程序中断方式
(3)直接存储器访问(DMA)方式
(4)通道传输方式(IOP)
8.1.2 I/O端口与端口地址
I/O端口编址方法:
1.I/O与内存单元统一编址
2.I/O独立编址。
8.1.3 I/O指令
IN AL,PORT ;(AL)←(PORT)
IN AX,PORT ;(AX)←(PORT+1,PORT)
IN AL,DX ;(AL)←((DX))
IN AX,DX ;(AX)←((DX)+1,(DX))
OUT PORT,AL ;(PORT)←(AL)
OUT PORT,AX ;(PORT+1,PORT)←(AX)
OUT DX,AL ;((DX))←(AL)
OUT DX,AX ;((DX)+1,(DX))←(AX)
8.1.4 程序直接控制I/O方式
1,CPU与I/O设备之间的接口信息
2,工作过程
⑴查询输入工作过程
①从状态端口读入状态信息。
②测试Ready位是否为1:若不为1则转①操作,循环等待;若为1则向下运行。
③从数据端口读入数据到AX寄存器。
⑵查询输出工作过程
①从状态端口读入状态信息。
②检查BUSY位,若为1,则转①操作,循环等待;若为0则向下运行。
③从缓冲区取数据输出。
3,应用实例
【例8-1】编写两台计算机利用程序查询方式进行串口通信的程序。
4.优缺点
8.1.5 程序中断传送方式
1,中断传送方式的工作过程当外设需要和CPU进行数据交换时,发出一个中断信号。CPU一条指令执行完成后扫描一遍中断源。若有中断请求,转去执行与外设进行数据交换的中断服务程序。中断服务程序处理完后,外设启动,CPU恢复中断现场,CPU与外设开始并行工作。利用中断方式进行CPU和外设之间进行数据传送,减少了CPU的查询等待时间,提高了工作效率。
图8.1 中断传送方式接口电路
2,应用实例
【例8-2】中断传送方式的打印机程序。设数据块首址为DATA_BUF,指针为POINT。
8.1.6 直接存储器访问(DMA)方式
1,DMA方式具有以下特点:
(1)可在I/O设备与主存之间直接传送数据,以“周期窃取方式”暂停CPU对系统总线的控制,占用时间很少。
(2)传送时,源与目的均直接由硬件逻辑指定。
(3)主存中需要开辟相应的的数据缓冲区,指定数据块长,计数由硬件完成。
(4)在一批数据传送结束后,一般通过中断方式通知CPU进行后处理。
(5)CPU与I/O设备能在一定程度上并行工作,效率很高。
(6)一般用于高速、批量数据的简单传送。
2,完整的DMA工作过程
(1)初始化
(2)DMA请求
(3)DMA响应
(4)DMA传送
(5)结束处理
3,DMA数据传送过程完整步骤
(1)DMA控制器向CPU发出HOLD信号,请求使用总线。
(2)CPU发出响应信号HLDA给DMA控制器,并将总线让出,这时CPU放弃了对总线的控制,而DMA控制器获得了总线控制权。
(3)传输数据的存储器地址(在地址寄存器中)通过地址总线发出。
(4)传输的数据字节通过数据总线进行传送。
(5)地址寄存器增1,以指向下一个要传送的字节。
(6)字节计数器减1。
(7)如字节计数器非0,转向第③步。
(8)否则,DMA控制器撤销总线请求信号HOLD,传送结束。
8.1.7 通道传送方式(IOP)
1.通道I/O数据传送是采用专用I/O处理机(IOP)来控制的
2.通道有自己的通道指令
3.IOP与DMA方式比较
8.2 中断传送
8.2.1 中断与中断源
1.中断
2.中断源
8.2.2 中断分类
1,外部中断
2,内部中断
⑴由中断指令INT引起的中断
⑵处理CPU某些错误的中断
⑶调试程序(DEBUG)设置的中断
①单步中断
②断点中断
4.80386~Pentium处理机异常中断
(1)失效
(2)陷阶
(3)中止
8.2.3 中断向量表中断操作的5个步骤:
1.取中断类型号;
2.计算中断向量地址;
3.取中断向量,偏移地址送IP,段地址送CS;
4.转入中断处理程序;
5.中断返回到INT指令的下一条指令。
图8.5 中断向量表
8.2.4 中断响应过程中断发生时,中断硬件机构自动完成的动作:
1.取中断类型号N;
2.标志寄存器(PSW)内容压栈;
3.当前代码段寄存器(CS)内容压栈;
4.当前指令指引(IP)内容压栈;
5.禁止外部中断和单步中断(置IF=0,TF=0);
6.从中断向量表中取4*n的字内容送IP,取4*n+2的字内客送CS;
7.转中断处理程序。
8.2.5 中断优先级与中断嵌套
1,中断优先级优先级从高到低的次序为:
优先级高 非屏蔽中断(NMI)
内部中断
可屏蔽中断(INTR)
优先级低 单步中断
2,中断嵌套
8.2.6 中断指令
1,软中断指令INT
指令格式:INT n
指令功能:转到相应中断处理程序执行,n为中断类型编号
2,中断返回指令IRET
指令格式:IRET
指令功能:从中断服务程序返回主程序,主要是恢复中断前的CS、IP和FR的内容。
8.3 中断处理程序设计利用软中断指令INT,可以进入系统的各个中断处理程序中去。因此,用户程序可以通过INT指令使用系统程序提供的中断功能,同时可以利用中断向量表中保留的中断类型号,编写自己所需的中断处理程序。对此本节将做详细介绍。
8.3.1 中断处理程序结构
1,外中断处理程序
(1)保护现场:保护通用寄存器内容和除CS之外段寄存器的内容,保护方法一般是压栈;
(2)尽快完成中断处理,以免影响其他外设中断请求;
(3)恢复现场:
(4)中断返回,用IRET指令返回。
2,软中断处理程序
⑴考虑切换堆栈
⑵及时开中断
⑶应该保护现场
⑷完成中断处理
⑸恢复现场
⑹堆栈切换
⑺一般利用IRET指令实现中断返回
8.3.2 设置和获取中断向量
1,设置中断向量
(1)直接写入法
(2)使用DOS调用法。
【例8-3】使用直接写入法设置中断向量。
【例8-4】使用DOS功能调用设置中断向量。
8.3.3 中断程序设计举例
【例8-5】编写输出字符串“EXAMPLE FOR INT”的中断处理程序,设中断号为5。
【例8-6】编写一个中断处理程序,要求在主程序运行过程中,每隔10秒响铃一次,同时在屏幕上显示出信息“THE BELL IS RING!”
8.4 BIOS中断调用
8.4.1 BIOS中断调用概述
1.图8.7是用户程序和操作系统关系示意图,
图8.7 用户程序和操作系统关系示意图
2.在下列情况下可考虑使用BIOS中断:
⑴有些功能DOS没有提供,但BIOS提供了:
⑵有些场合无法使用DOS功能调用;
⑶其他原因。
8.4.2 BIOS中断调用方法
1,BIOS调用的基本操作
⑴设置分功能号
⑵置入口参数
⑶使用中断语句INT n
⑷分析出口参数
2,键盘输入功能调用
BIOS中断16H为键盘输入。16H号中断有三个功能,功能号要求放在AH中,具体功能见表8-3。
表8-3 BIOS键盘中断(INT 16H)
AH
功 能
返 回 参 数
0
从键盘读一字符
AL=字符码中
AH=扫描码
1
读键盘缓冲区的字符
ZF=0
AL=字符码
ZF=l
缓冲区空
AH=扫描码
2
取键盘状态字节
AL=键盘状态字节
【例8-7】从键盘读入0~9任一数,根据不同数显示不同的字符串。要求用BIOS中断来接收键盘输入
3,BIOS显示功能调用有关显示输出BIOS调用(INT 10H)的功能很强,主要包括设置显示方式,设置光标大小和位置,设置调色板号,显示字符,显示图形等,见表8-4。下面做简单介绍。
表8-4 中断类型10H的功能调用操作
AH
功能
调用参数
返回参数/说明
0
设置显示方式
AL=显示模式(0~13H)
见附录
1
置光标类型
(CH)0~3=光标开始行
(CL)0~3=光标结束行
2
置光标位置
BH=页号;DH/DL =行号/列号
3
读光标位置
BH=页号
CH/CL=光标开始/结束行
DH/DL =行号/列号
5
置当前显示页
AL=页号
6
屏幕初始化或上卷
AL=上卷行数;AL=0全屏幕为空白
BH=卷入行属性
CH/CL=左上角行号/列号
DH/DL=右上角行号/列号
7
屏幕初始化或下卷
AL=下卷行数;AL=0全屏幕为空白
BH=卷入行属性
CH/CL=左上角行号/列号
DH/DL=右上角行号/列号
8
读光标位置的属性和字符
AH/AL =属性/字符
9
在光标位置显示字符和属性
BH=显示页号;AL =字符
BL=属性;CX=字符重复次数
A
在光标位置仅显示字符
BH=显示页号;AL =字符
CX=字符重复次数
E
显示字符(光标前移)
AL =字符;BL=前景色
光标跟随字符移动
13
显示字符串
ES:BP=串地址;CX=串长
DH/DL=起始行/列号;BH=页号
AL =0;BL=属性串:CHAR,CHAR,…,CHAR
AL =1;BL=属性串:CHAR,CHAR,…,CHAR
AL =2
串:CHAR,CHAR,…,CHAR
AL =3
串:CHAR,CHAR,…,CHAR
光标返回起始位置
光标跟随字符串移动
光标返回起始位置
光标跟随字符串移动
⑴显示方式的设置
①单色字符显示
②彩色字符显示
③显示存储器
⑵光标的设置
①INT 10H的01H功能是设置光标的大小和状态
②INT 10H的02H功能是设置光标位置
⑶读光标位置
⑷选择显示页
⑸清屏和卷屏
4,BIOS打印功能
⑴BIOS中断17H的功能0是打印一个字符的功能
⑵17H的功能1初始化打印机
5,BIOS串行通信口功能
8.5 DOS功能调用
8.5.1 DOS功能调用概述
8.5.2 DOS功能调用方法
1.DOS软中断(INT 20H-INT 27H)指令表8-8 DOS软中断软中断
功能
入口参数
出口参数
INT 20H
程序正常退出
INT 21H
系统功能调用
AH=功能号功能调用相应的入口参数
功能调用相应的出口参数
INT 22H
结束退出
INT 23H
CTRL-BREAK退出
INT 24H
出错退出
INT 25H
读盘
CX=读出扇区数
DX=起始逻辑扇区
DS:BX=缓冲区地址
AL=盘号
CF=1出错
INT 26H
写盘
CX=写扇区数
DX=起始逻辑扇区
DS:BX=缓冲区地址
AL=盘号
CF=1出错
INT 27H
驻留退出
INT 28H~INT 2FH
DOS专用
2,DOS系统功能调用(INT 21H)
⑴键盘输入
①扫描码与字符码
②有关键盘的系统功能调用
⑵显示器(CRT)输出
⑶打印机输出
⑷磁盘文件管理
①传统文件管理
②扩充文件管理方法
8.参考资料:《IBM-PC汇编语言程序设计,沈美明
9.作业:P246 习题8
10.总结:本部分的功能调用是编程中常用到的知识,需熟练掌握。
1.教学目的:掌握I/O程序设计,特别是实模式下的中断程序设计的方法
2.教学要求:
①掌握I/O端口与端口地址及I/O指令。
②熟悉无条件传送、查询传送、中断传送和DMA传送的基本工作原理。
③熟悉内部中断和外部中断,理解中断向量表的安排。
④掌握中断请求、中断判优、中断响应、中断处理和中断返回五个过程的原理。
⑤熟悉内部中断和外部中断,理解中断向量表的安排。
⑥掌握中断处理程序的设计
⑦掌握设置和获取中断向量的方法
⑧熟悉BIOS中断调用概念和调用方法
⑨熟悉DOS中断调用概念和调用方法
3.教学重点:
①中断传送和DMA传送
②中断处理程序的设计
4.掌握难点:
①中断处理程序的设计
5.教学进程安排:P207~P246
6.教学方法:
课堂讲授
7.教学内容摘要
8.1 I/0设备的数据传送方式
8.1.1 CPU与外设的数据传送方式
1.三类信息
(1)控制信息
(2)状态信息
(3)数据信息
2.I/O设备与主机之间进行数据交换方式:
(1)程序直接控制方式
(2)程序中断方式
(3)直接存储器访问(DMA)方式
(4)通道传输方式(IOP)
8.1.2 I/O端口与端口地址
I/O端口编址方法:
1.I/O与内存单元统一编址
2.I/O独立编址。
8.1.3 I/O指令
IN AL,PORT ;(AL)←(PORT)
IN AX,PORT ;(AX)←(PORT+1,PORT)
IN AL,DX ;(AL)←((DX))
IN AX,DX ;(AX)←((DX)+1,(DX))
OUT PORT,AL ;(PORT)←(AL)
OUT PORT,AX ;(PORT+1,PORT)←(AX)
OUT DX,AL ;((DX))←(AL)
OUT DX,AX ;((DX)+1,(DX))←(AX)
8.1.4 程序直接控制I/O方式
1,CPU与I/O设备之间的接口信息
2,工作过程
⑴查询输入工作过程
①从状态端口读入状态信息。
②测试Ready位是否为1:若不为1则转①操作,循环等待;若为1则向下运行。
③从数据端口读入数据到AX寄存器。
⑵查询输出工作过程
①从状态端口读入状态信息。
②检查BUSY位,若为1,则转①操作,循环等待;若为0则向下运行。
③从缓冲区取数据输出。
3,应用实例
【例8-1】编写两台计算机利用程序查询方式进行串口通信的程序。
4.优缺点
8.1.5 程序中断传送方式
1,中断传送方式的工作过程当外设需要和CPU进行数据交换时,发出一个中断信号。CPU一条指令执行完成后扫描一遍中断源。若有中断请求,转去执行与外设进行数据交换的中断服务程序。中断服务程序处理完后,外设启动,CPU恢复中断现场,CPU与外设开始并行工作。利用中断方式进行CPU和外设之间进行数据传送,减少了CPU的查询等待时间,提高了工作效率。
图8.1 中断传送方式接口电路
2,应用实例
【例8-2】中断传送方式的打印机程序。设数据块首址为DATA_BUF,指针为POINT。
8.1.6 直接存储器访问(DMA)方式
1,DMA方式具有以下特点:
(1)可在I/O设备与主存之间直接传送数据,以“周期窃取方式”暂停CPU对系统总线的控制,占用时间很少。
(2)传送时,源与目的均直接由硬件逻辑指定。
(3)主存中需要开辟相应的的数据缓冲区,指定数据块长,计数由硬件完成。
(4)在一批数据传送结束后,一般通过中断方式通知CPU进行后处理。
(5)CPU与I/O设备能在一定程度上并行工作,效率很高。
(6)一般用于高速、批量数据的简单传送。
2,完整的DMA工作过程
(1)初始化
(2)DMA请求
(3)DMA响应
(4)DMA传送
(5)结束处理
3,DMA数据传送过程完整步骤
(1)DMA控制器向CPU发出HOLD信号,请求使用总线。
(2)CPU发出响应信号HLDA给DMA控制器,并将总线让出,这时CPU放弃了对总线的控制,而DMA控制器获得了总线控制权。
(3)传输数据的存储器地址(在地址寄存器中)通过地址总线发出。
(4)传输的数据字节通过数据总线进行传送。
(5)地址寄存器增1,以指向下一个要传送的字节。
(6)字节计数器减1。
(7)如字节计数器非0,转向第③步。
(8)否则,DMA控制器撤销总线请求信号HOLD,传送结束。
8.1.7 通道传送方式(IOP)
1.通道I/O数据传送是采用专用I/O处理机(IOP)来控制的
2.通道有自己的通道指令
3.IOP与DMA方式比较
8.2 中断传送
8.2.1 中断与中断源
1.中断
2.中断源
8.2.2 中断分类
1,外部中断
2,内部中断
⑴由中断指令INT引起的中断
⑵处理CPU某些错误的中断
⑶调试程序(DEBUG)设置的中断
①单步中断
②断点中断
4.80386~Pentium处理机异常中断
(1)失效
(2)陷阶
(3)中止
8.2.3 中断向量表中断操作的5个步骤:
1.取中断类型号;
2.计算中断向量地址;
3.取中断向量,偏移地址送IP,段地址送CS;
4.转入中断处理程序;
5.中断返回到INT指令的下一条指令。
图8.5 中断向量表
8.2.4 中断响应过程中断发生时,中断硬件机构自动完成的动作:
1.取中断类型号N;
2.标志寄存器(PSW)内容压栈;
3.当前代码段寄存器(CS)内容压栈;
4.当前指令指引(IP)内容压栈;
5.禁止外部中断和单步中断(置IF=0,TF=0);
6.从中断向量表中取4*n的字内容送IP,取4*n+2的字内客送CS;
7.转中断处理程序。
8.2.5 中断优先级与中断嵌套
1,中断优先级优先级从高到低的次序为:
优先级高 非屏蔽中断(NMI)
内部中断
可屏蔽中断(INTR)
优先级低 单步中断
2,中断嵌套
8.2.6 中断指令
1,软中断指令INT
指令格式:INT n
指令功能:转到相应中断处理程序执行,n为中断类型编号
2,中断返回指令IRET
指令格式:IRET
指令功能:从中断服务程序返回主程序,主要是恢复中断前的CS、IP和FR的内容。
8.3 中断处理程序设计利用软中断指令INT,可以进入系统的各个中断处理程序中去。因此,用户程序可以通过INT指令使用系统程序提供的中断功能,同时可以利用中断向量表中保留的中断类型号,编写自己所需的中断处理程序。对此本节将做详细介绍。
8.3.1 中断处理程序结构
1,外中断处理程序
(1)保护现场:保护通用寄存器内容和除CS之外段寄存器的内容,保护方法一般是压栈;
(2)尽快完成中断处理,以免影响其他外设中断请求;
(3)恢复现场:
(4)中断返回,用IRET指令返回。
2,软中断处理程序
⑴考虑切换堆栈
⑵及时开中断
⑶应该保护现场
⑷完成中断处理
⑸恢复现场
⑹堆栈切换
⑺一般利用IRET指令实现中断返回
8.3.2 设置和获取中断向量
1,设置中断向量
(1)直接写入法
(2)使用DOS调用法。
【例8-3】使用直接写入法设置中断向量。
【例8-4】使用DOS功能调用设置中断向量。
8.3.3 中断程序设计举例
【例8-5】编写输出字符串“EXAMPLE FOR INT”的中断处理程序,设中断号为5。
【例8-6】编写一个中断处理程序,要求在主程序运行过程中,每隔10秒响铃一次,同时在屏幕上显示出信息“THE BELL IS RING!”
8.4 BIOS中断调用
8.4.1 BIOS中断调用概述
1.图8.7是用户程序和操作系统关系示意图,
图8.7 用户程序和操作系统关系示意图
2.在下列情况下可考虑使用BIOS中断:
⑴有些功能DOS没有提供,但BIOS提供了:
⑵有些场合无法使用DOS功能调用;
⑶其他原因。
8.4.2 BIOS中断调用方法
1,BIOS调用的基本操作
⑴设置分功能号
⑵置入口参数
⑶使用中断语句INT n
⑷分析出口参数
2,键盘输入功能调用
BIOS中断16H为键盘输入。16H号中断有三个功能,功能号要求放在AH中,具体功能见表8-3。
表8-3 BIOS键盘中断(INT 16H)
AH
功 能
返 回 参 数
0
从键盘读一字符
AL=字符码中
AH=扫描码
1
读键盘缓冲区的字符
ZF=0
AL=字符码
ZF=l
缓冲区空
AH=扫描码
2
取键盘状态字节
AL=键盘状态字节
【例8-7】从键盘读入0~9任一数,根据不同数显示不同的字符串。要求用BIOS中断来接收键盘输入
3,BIOS显示功能调用有关显示输出BIOS调用(INT 10H)的功能很强,主要包括设置显示方式,设置光标大小和位置,设置调色板号,显示字符,显示图形等,见表8-4。下面做简单介绍。
表8-4 中断类型10H的功能调用操作
AH
功能
调用参数
返回参数/说明
0
设置显示方式
AL=显示模式(0~13H)
见附录
1
置光标类型
(CH)0~3=光标开始行
(CL)0~3=光标结束行
2
置光标位置
BH=页号;DH/DL =行号/列号
3
读光标位置
BH=页号
CH/CL=光标开始/结束行
DH/DL =行号/列号
5
置当前显示页
AL=页号
6
屏幕初始化或上卷
AL=上卷行数;AL=0全屏幕为空白
BH=卷入行属性
CH/CL=左上角行号/列号
DH/DL=右上角行号/列号
7
屏幕初始化或下卷
AL=下卷行数;AL=0全屏幕为空白
BH=卷入行属性
CH/CL=左上角行号/列号
DH/DL=右上角行号/列号
8
读光标位置的属性和字符
AH/AL =属性/字符
9
在光标位置显示字符和属性
BH=显示页号;AL =字符
BL=属性;CX=字符重复次数
A
在光标位置仅显示字符
BH=显示页号;AL =字符
CX=字符重复次数
E
显示字符(光标前移)
AL =字符;BL=前景色
光标跟随字符移动
13
显示字符串
ES:BP=串地址;CX=串长
DH/DL=起始行/列号;BH=页号
AL =0;BL=属性串:CHAR,CHAR,…,CHAR
AL =1;BL=属性串:CHAR,CHAR,…,CHAR
AL =2
串:CHAR,CHAR,…,CHAR
AL =3
串:CHAR,CHAR,…,CHAR
光标返回起始位置
光标跟随字符串移动
光标返回起始位置
光标跟随字符串移动
⑴显示方式的设置
①单色字符显示
②彩色字符显示
③显示存储器
⑵光标的设置
①INT 10H的01H功能是设置光标的大小和状态
②INT 10H的02H功能是设置光标位置
⑶读光标位置
⑷选择显示页
⑸清屏和卷屏
4,BIOS打印功能
⑴BIOS中断17H的功能0是打印一个字符的功能
⑵17H的功能1初始化打印机
5,BIOS串行通信口功能
8.5 DOS功能调用
8.5.1 DOS功能调用概述
8.5.2 DOS功能调用方法
1.DOS软中断(INT 20H-INT 27H)指令表8-8 DOS软中断软中断
功能
入口参数
出口参数
INT 20H
程序正常退出
INT 21H
系统功能调用
AH=功能号功能调用相应的入口参数
功能调用相应的出口参数
INT 22H
结束退出
INT 23H
CTRL-BREAK退出
INT 24H
出错退出
INT 25H
读盘
CX=读出扇区数
DX=起始逻辑扇区
DS:BX=缓冲区地址
AL=盘号
CF=1出错
INT 26H
写盘
CX=写扇区数
DX=起始逻辑扇区
DS:BX=缓冲区地址
AL=盘号
CF=1出错
INT 27H
驻留退出
INT 28H~INT 2FH
DOS专用
2,DOS系统功能调用(INT 21H)
⑴键盘输入
①扫描码与字符码
②有关键盘的系统功能调用
⑵显示器(CRT)输出
⑶打印机输出
⑷磁盘文件管理
①传统文件管理
②扩充文件管理方法
8.参考资料:《IBM-PC汇编语言程序设计,沈美明
9.作业:P246 习题8
10.总结:本部分的功能调用是编程中常用到的知识,需熟练掌握。