版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章 中断调用和中断服务程序中断调用是指计算机暂时停止当前执行程序,转移到另一程序执行,执行结束后返回前面的程序继续执行。中断调用类似于过程调用,和过程调用不同的是,中断调用可以通过硬件,或者指令int实现,前者称为硬中断调用,后者称为软中断调用。中断所调用的过程称为中断服务程序。在ibm-pc计算机系统中,中断服务程序一般是计算机系统所提供的一组程序,用于完成输入输出等操作。程序员编写程序时,可在应用程序中直接调用中断服务程序,完成输入输出等操作,这给程序设计带来极大的方便。中断服务程序可分为两部分:一部分驻留在rom中,称为bios;另一部分由操作系统程序提供。dos操作系统提供的中断服
2、务程序保存在磁盘文件中(io.sys和ibmdos.sys),在系统启动后装入内存。对于同一功能操作,一般既能选择调用dos中断服务程序,也能选择bios中断服务程序。例如,通过键盘输入一个字符,可以调用dos中断21h的01h子功能,也可以调用bios中断16h的01h子功能。因为bios比dos更靠近硬件,因此建议尽可能使用dos功能,但是,在有些情况下必须使用bios功能,因为没有对应的等效的dos功能。bios和dos的中断服务程序能处理大多数的输入输出操作,但是,有一些功能还没有提供,这就要考虑使用i/o指令在端口级上编程,这就需要详细了解端口的工作原理。本章概要介绍bios和dos
3、这两部分中断服务程序,及其调用方法。§7.1 中断向量和中断服务程序一、中断号和中断号分配ibm-pc 计算机系统给每个中断服务程序分配一个顺序编号,该编号称为中断号。中断号分配如下:1cpu内部控制的中断服务程序:0号:除0中断,当程序发生除0错误时系统自动执行该中断服务程序;1号:单步执行,当单步执行程序时,每执行一条指令后暂停程序执行;2号:不可屏蔽中断,分配给由cpu的不可屏蔽中断申请;3号:断点,程序执行到设置的断点时执行该中断服务程序;4号:溢出,产生溢出错误时执行;5号:打印屏幕,当按下printscreen键时执行;6号:保留;7号:保留。2中断控制器控制执行的中断服
4、务程序:输入输出中断是由中断控制器控制执行的中断服务程序,ibm-pc计算机的中断控制器有irq0irq7八个输入端,其占用的中断号如下:08h号: 时钟中断(irq0), 每秒钟执行18.2次;09h号: 键盘中断(irq1);0ah号: 保留;0bh号: 通讯口com2(irq3);0ch号: 通讯口com1(irq4);0dh号: lpt2(irq5);0eh号: 磁盘控制器(irq6);0fh号: lpt1(irq7);如果用两片中断控制器芯片以级连方式工作,其irq8irq15对应中断号为70h77h。对应的中断服务程序可查阅相关手册。3bios软中断服务程序:软中断是指通过int指
5、令调用的中断服务程序,经常使用的几个重要的中断服务程序的中断号分配如下:10h 显示器输入输出控制;13h 磁盘存取;14h rs-232串行口通讯;16h 键盘输入17h 打印输出19h 引导装入程序1ah 时钟4dos软中断服务程序:中断号20h2fh分配给dos系统,其中包括前面介绍过的21h号中断,为dos系统功能调用。这里不作具体介绍,如果要详细了解可以查阅有关书籍或技术手册。二、中断向量和中断向量表中断服务程序的入口地址称为中断向量,由段基址和偏移地址两部分组成。dos系统在启动时将所有中断程序的入口地址按中断号顺序存放在内存的0000:00000000:03ff空间,称为中断向量
6、表。每个中断向量在中断向量表中占四个字节,前两个字节为中断服务程序入口的偏移地址,后两个字节为段基址。只要知道某个中断服务程序的中断号,用中断号乘4,就可以计算出该中断服务程序入口地址存放在中断向量表的何处。例如dos系统功能服务程序的中断号为21h,其中断向量存放在地址0000:0084h处。使用debug程序可以查看dos系统功能服务程序的入口地址:-d 0:840000:0080 45 04 a7 08-4f 03 f0 0b 8a 03 f0 0b e.o.0000:0090 17 03 f0 0b bc 0f c9 00-c6 0f c9 00 d0 0f c9 00 .0000:0
7、0a0 6c 10 c9 00 66 04 70 00-b4 05 1e 03 6c 10 c9 00 l.f.p.l.0000:00b0 6c 10 c9 00 6c 10 c9 00-62 01 0f 0a cc 01 10 0a l.l.b.0000:00c0 ea e4 0f c9 00 ef 00 f0-6c 10 c9 00 01 00 88 09 .l.可以看到其入口地址为08a7:0445(注意低地址存放的是低字节,高低址存放的是高字节)。实际上知道了某个中断服务程序的入口地址,也可以通过call指令调用该中断服务程序,例如dos功能调用的入口地址为08a7:0445,可以通过
8、指令“call 08a7:0445”调用dos功能。进入debug,使用“a”命令输入下面程序段:-a126b:0100 mov ah, 02126b:0102 mov dl, 41126b:0104 call 08a7: 0445执行上面程序:-g=100,109结果输出字符“a”。软中断程序调用,就是通过int指令调用系统中断服务程序。上面例子看到,通过中断号可以从中断向量表中查出对应中断服务程序的入口地址,然后通过call指令调用,但是过于繁琐。一般调用中断服务程序可以通过硬件,或使用int指令。int指令一般格式为:int 中断号计算机执行int指令的过程是:根据中断号计算对应中断向量
9、在中断向量表中地址;从中断向量表中取出中断服务程序的入口地址,将中断服务程序段基址装入cs寄存器,偏移地址装入ip;计算机就转移到对应的中断服务程序执行;中断服务程序执行完毕返回被中断的程序继续执行。§7.2 bios中断服务程序调用由计算机厂商提供的bios中断服务程序固化在rom内,计算机启动后,这些中断服务程序的入口地址被装入中断向量表,用户可以通过硬件方式,或软中断方式调用bios中的中断服务程序。下面通过示例说明bios的键盘输入和视频输出中断服务程序的使用。一、键盘中断服务程序键盘中断服务程序中断号为16h,包含0h、1h、2h三个子功能。0h号子功能:读键盘输入的字符。
10、当调用该子功能时,计算机等待接收键盘输入。如果没有按键按下,则等待;如果有按键按下,则将按键的扫描码装入ah寄存器,将按键的ascii码装入al寄存器。因为键盘上的功能键,如,f1、f2、等,没有对应的ascii码,所以,当按下的如果是功能键,al=0,ah=对应键的扫描码。因此,可以调用0h号子功能识别是否有功能键按下。01h号子功能:从键盘缓冲区读一个字符,当键盘缓冲区不为空时,将zf置0,将读取的ascii码装入al寄存器;当键盘缓冲区为空时,将zf置1后返回。02h号子功能:读取双态键,或组合键的状态,返回值al的对应位含义如图7.2.1所示。d7d6d5d4d3d2d1d0按下右sh
11、ift键 按下左shift键 按下ctrl键 按下alt键 scrollock键状态numlock键状态capslock键状态 insert键状态scrollock键状态 图7.2.1 键盘状态字节例721:调用键盘中断0h子功能,接收一个按键,如果是功能键f1打印字母“a”,如果是其它功能键打印字母“b”,否则不打印。disp macro x ; ;显示字符宏定义 mov dl, x mov ah, 02h int 21h endm.model small.code start: mov ah, 0 int 16h ;调用中断16h的0号子功能 cmp al,0 ;是功能键否? jne ex
12、it ;不是功能键,结束。 cmp ah, 3bh ;是功能键f1否?3b是功能键f1的扫描码。 jne f2 disp "a" jmp exit f2: disp "b" exit: mov ah, 4ch int 21h end start 例722:分别调用16h的01h和0h子功能接收键盘输入,并打印输入健的ascii码。rol14 macro z ; 循环左移四次宏定义push cxmov cl, 4rol z, clpop cxendmdisp macro ; 显示字符宏定义 push ax mov ah, 02h int 21h pop a
13、x endm.model small.code out16 proc near ; 十六进制数输出过程 mov cx, 2 l1:rol14 al mov dl, al and dl, 0fh cmp dl, 9 jbe l2 add dl, 7 l2:add dl, 30h disp loop l1 mov dl, 'h' disp ret out16 endp调用01h子功能: start: l3: mov ah, 1 int 16h ; 调用中断16h的01h号子功能 jz l3 ; 键盘缓冲如果为空返回l3 call out16 ; 调用十六进制数输出子程序 mov a
14、h, 4ch int 21h end start 调用0h子功能: start: mov ah, 0 int 16h ; 调用中断16h的0号子功能 call out16 ; 调用十六进制数输出子程序 mov ah, 4ch int 21h end start 有上面例子可以看到中断16h的0h子功能和dos系统功能调用的01h子功能几乎是相同的,在程序中到底应当调用那一个好呢?一般来说如果不是特殊需要应尽量使用dos系统功能。二、视频输出中断服务程序不同的显示控制器,显示输出的特性不同,主要包括显示分辨率和对图形的支持。目前pc 计算机多采用avga显示控制器,avga显示控制器兼容以前的c
15、ga、ega、和vga所支持的特性。显示输出系统有多种工作模式,可以分为字符模式和图形模式两大类,每一类又可按分辨率和颜色数分成不同的子模式。例如字符模式可以有25行×40列、25行×80列等模式;图形模式可以有分辨率640×480,16种颜色;或分辨率640×480,256种颜色等。字符模式下显示字符存入显示缓存,就会在显示器上显示出来。分为字符模式下的显示缓存的开始内存地址b8000h。显示缓存区分为若干页,每一页和一满屏数据相对应,使用时可以选择其中的一页。每个显示字符占用两个字节,前一个字节为字符的ascii码,后一个字节为字符模式字符的属性。字
16、符属性字节定义如下:位0位2 字符颜色,000:黑色字符, 001:带下划线, 111:白色字符等位3 字符亮度,0:普通亮度,1:高亮度位4位 背景颜色,000:黑色背景,111:白色背景位7 字符闪烁,0:普通字符,1:闪烁字符图形模式的每个像素数据位数取决于可选择的颜色,例如640×480,16色模式,每个像素需要4位二进制数,全屏共需要640×480×0.5=153600字节。图形模式将显示缓存区分成4个存储位平面,其开始地址为a0000h,每个位平面存储像素的一位,各个位平面的顺序号相同位组合成屏幕上一个像素。dos系统将中断号10h分配给视频输出中断服
17、务程序。10h中断包含0h13h子功能。下面介绍其中几个子功能:106h子功能功能:当前显示页上滚。输入参数:al=上滚行数,0为初始化窗口(全屏幕)。 bh=字符填充属性。 ch/cl=左上角行/列坐标。 dh/dl=右下角行/列坐标。202h子功能功能:置光标位置。输入参数: bh=显示页号。 dh=行号。dl=列号。309h子功能功能:在当前光标位置显示字符输入参数: bh=显示页号。 bl=显示字符属性 cx=重复次数其中字符属性的各位定义如下:blrgbirgb背景前景亮度闪烁图7.2.2 字符属性例723:在显示器的指定位置显示文字。.model small.data str db
18、 "how are you!" count equ $-offset str.code start: mov al, 0 ;al=上卷行数,al=0为清屏 mov cl, 0 ;开始行号 mov ch, 0 ;开始列号 mov dl, 79 ;结束行号 mov dh, 24 ;结束列号mov bh, 7 ;卷入行属性为黑底白字mov ah, 06h ;子功能号06h送ah寄存器。 int 10h ;调用10h的06h子功能清屏幕 mov dh, 10 ;置光标到10行,33列 mov dl, 33 ;光标列号mov bh, 0 ;置显示页号mov ah, 2 int 10h
19、 ;调用02h子功能设置光标位置 mov ax, data mov ds, ax mov si, offset str mov bl, 01110110b ;设置字符属性白底红字 mov cx, countl1: puch cx ;循环次数=显示字符数 mov cx, 1 ;显示重复次数 mov ah, 9 ;调用09h子功能显示字符 mov al, si ;显示字符ascii码装入al寄存器 int 10h ;显示字符 inc si inc di; ;光标左移 mov ah,2 int 10h ;重置光标位置 pop cx loop l1exit:mov ah,4ch int 21h end
20、 start运行上面程序在显示器的10行,33列开始显示白底红字的“how are you! ”。例724:在显示器上画一条20个像素的直线。下面程序调用了10h功能的0h和0ch子功能:0号子功能:置显示模式,al=显示模式代码,当al=12h时的显示模式为640×480像素,16色模式;0ch子功能:在屏幕上绘点,dx=开始行,cx=开始列,al=颜色编码。.model small.code start: mov al, 12h mov ah, 0 int 10h ;设置640×480,16色模式 mov dx, 40 ;初始行 mov cx, 50 ;开始列 l1:
21、mov ah, 0ch ;调用写像素功能 mov al, 7 ;设置颜色为白色 int 10h ;画点 inc cx ;列数增1 cmp cx, 70 jne l1 exit: mov ah, 4ch int 21h end start§7.3 硬中断一、中断控制器除了通过int指令调用中断服务程序,微型计算机可以通过硬件调用中断服务程序。控制硬中断的芯片是中断控制器,如早期的pc计算机使用intel的8259中断控制器芯片,现在微机的中断控制器和其它一些部件一起集成为一块超大规模集成电路。中断控制器占用20h和21h两个i/o端口:120h对应中断控制器中的命令寄存器,可由cpu将
22、中断控制命令代码写入到该寄存器,以控制中断控制器的工作方式。例如,20h为停止中断控制器工作代码,使用下面指令将结束中断:mov al, 20hout 20h, al其中out指令是i/o输出指令,其执行的操作是将al寄存器中的代码发送到外设端口20h。中断控制器的其它命令需要了解中断控制器的内部结构和工作原理,过于复杂这里略去。2端口21h对应中断屏蔽寄存器,这是一个8位的寄存器,每一位和一个外部设备的中断信号相对应,将其中的某位置1,就会禁止该位对应的外部设备中断申请。dos系统将如下中断号分配给硬中断服务程序:08h 时钟中断(irq0), 每秒钟执行18.2次;09h 键盘中断(irq
23、1);0ah 保留;0bh 通讯口com2(irq3);0ch 通讯口com1(irq4);0dh lpt2(irq5);0eh 磁盘控制器(irq6);0fh lpt1(irq7);为了接入更多的外部设备,在微型计算机中将两片中断控制器芯片级连方式在一起,其irq8irq15对应中断号为70h77h。二、中断控制器的工作原理当有外部设备发出中中断申请信号时,中断控制器向cpu的可屏蔽中断输入端发出中断申请信号,并同时将其对应的中断号通过数据线发送到cpu,cpu接到中断控制器的信号后,暂时中止执行正在执行的程序,根据中断控制器发来的中断号计算中断服务程序入口地址在中断向量表中的位置,将中断向
24、量装入cs:ip,开始执行中断服务程序,中断服务程序执行结束后继续执行原来的程序。除了可以通过中断屏蔽寄存器屏蔽某外设的中断申请,将if标志位置0,可以屏蔽所有中断控制器的中断申请。指令:cli 将if置零,关中断;sti 将if置1,开中断。§7.4 中断程序设计有时用户需要设计自己的中断服务程序,用户设计的中断服务程序可以占用dos系统为用户保留的中断号。中断服务程序应当遵循如下操作步骤:1中断服务程序应保护现场:将用到的寄存器压如堆栈保护;2关中断,禁止其它中断申请;3中断处理;4开中断;5向中断控制寄存器发出中断结束命令;6恢复现场;7返回下面程序是中断程序设计的示例。该程序
25、中的ring过程为中断执行程序,当每次时钟信号到来时执行该过程一次。每次执行检查变量count的值,如果count等于100就显示字符串"the bell is ring!",然后将count清0;如果count小于100不显示字符串,只是将count增1后返回。.model small.data mess db "the bell is ring!",0dh,0ah,"$" count dw 1.code ring proc near push ds pushu ax push cx push dx ;保护现场,将ds、ax、cx、dx值压入堆栈 mov ax,data mov ds, ax cli ;关中断 inc count cmp count, 100 jnz exit mov dx, offset mess mov ah, 09h int 21h ;调用dos的09h功能显示字符串 mov count, 0 ;恢复count值exit: sti ;开中断 mov al,20h out 20h, al ;发中断结束命令 pop dx pop cx pop ax pop ds ;恢复现场 iret ;中断返回 rin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国金属矿石行业投资前景及策略咨询研究报告
- 分布式编址机制-深度研究
- 基于深度学习的预后预测模型-深度研究
- 2025至2030年中国豆沙包数据监测研究报告
- 污染物排放监测技术-深度研究
- 2025至2030年中国直修自攻螺丝数据监测研究报告
- 2025至2030年中国燃油窑炉成套控制设备数据监测研究报告
- 2025至2030年中国折叠式搬运车数据监测研究报告
- 信息化教育管理模式-深度研究
- 储能市场政策分析-深度研究
- 吉林省吉林市普通中学2024-2025学年高三上学期二模试题 生物 含答案
- 2025年湖南省通信产业服务限公司春季校园招聘76人高频重点提升(共500题)附带答案详解
- 《电影之创战纪》课件
- 西方经济学(第二版)完整整套教学课件
- 人教版高一数学上册期末考试试卷及答案
- 围术期下肢深静脉血栓预防的术中护理
- 三方采购协议范本
- 《材料分析测试技术》全套教学课件
- 安全学原理第2版-ppt课件(完整版)
- 倾听是一种美德
- 武汉东湖宾馆建设项目委托代建合同
评论
0/150
提交评论