汇编语言及运算机原理第七章.docx
- 文档编号:25182002
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:17
- 大小:40.85KB
汇编语言及运算机原理第七章.docx
《汇编语言及运算机原理第七章.docx》由会员分享,可在线阅读,更多相关《汇编语言及运算机原理第七章.docx(17页珍藏版)》请在冰豆网上搜索。
汇编语言及运算机原理第七章
第七章中断挪用和中断服务程序
中断挪用是指运算机暂时停止当前执行程序,转移到另一程序执行,执行结束后返回前面的程序继续执行。
中断挪用类似于进程挪用,和进程挪用不同的是,中断挪用能够通过硬件,或指令INT实现,前者称为硬中断挪用,后者称为软中断挪用。
中断所挪用的进程称为中断服务程序。
在IBM-PC运算机系统中,中断服务程序一般是运算机系统所提供的一组程序,用于完成输入输出等操作。
程序员编写程序时,可在应用程序中直接挪用中断服务程序,完成输入输出等操作,这给程序设计带来极大的方便。
中断服务程序可分为两部份:
一部份驻留在ROM中,称为BIOS;另一部份由操作系统程序提供。
DOS操作系统提供的中断服务程序保留在磁盘文件中(和),在系统启动后装入内存。
对于同一功能操作,一般既能选择挪用DOS中断服务程序,也能选择BIOS中断服务程序。
例如,通过键盘输入一个字符,能够挪用DOS中断21H的01H子功能,也能够挪用BIOS中断16H的01H子功能。
因为BIOS比DOS更靠近硬件,因此建议尽可能利用DOS功能,可是,在有些情形下必需利用BIOS功能,因为没有对应的等效的DOS功能。
BIOS和DOS的中断服务程序能处置大多数的输入输出操作,可是,有一些功能尚未提供,这就要考虑利用I/O指令在端口级上编程,这就需要详细了解端口的工作原理。
本章概要介绍BIOS和DOS这两部份中断服务程序,及其挪用方式。
§中断向量和中断服务程序
一、中断号和中断号分派
IBM-PC运算机系统给每一个中断服务程序分派一个顺序编号,该编号称为中断号。
中断号分派如下:
1.CPU内部控制的中断服务程序:
0号:
除0中断,当程序发生除0错误时系统自动执行该中断服务程序;
1号:
单步执行,当单步执行程序时,每执行一条指令后暂停程序执行;
2号:
不可屏蔽中断,分派给由CPU的不可屏蔽中断申请;
3号:
断点,程序执行到设置的断点时执行该中断服务程序;
4号:
溢出,产生溢犯错误时执行;
5号:
打印屏幕,当按下PrintScreen键时执行;
6号:
保留;
7号:
保留。
2.中断控制器控制执行的中断服务程序:
输入输出中断是由中断控制器控制执行的中断服务程序,IBM-PC运算机的中断控制器有IRQ0~IRQ7八个输入端,其占用的中断号如下:
08H号:
时钟中断(IRQ0),每秒钟执行次;
09H号:
键盘中断(IRQ1);
0AH号:
保留;
0BH号:
通信口COM2(IRQ3);
0CH号:
通信口COM1(IRQ4);
0DH号:
LPT2(IRQ5);
0EH号:
磁盘控制器(IRQ6);
0FH号:
LPT1(IRQ7);
若是用两片中断控制器芯片以级连方式工作,其IRQ8~IRQ15对应中断号为70H~77H。
对应的中断服务程序可查阅相关手册。
3.BIOS软中断服务程序:
软中断是指通过INT指令挪用的中断服务程序,常常利用的几个重要的中断服务程序的中断号分派如下:
10H显示器输入输出控制;
13H磁盘存取;
14HRS-232串行口通信;
16H键盘输入
17H打印输出
19H引导装入程序
1AH时钟
4.DOS软中断服务程序:
中断号20H~2FH分派给DOS系统,其中包括前面介绍过的21H号中断,为DOS系统功能挪用。
这里不作具体介绍,若是要详细了解能够查阅有关书籍或技术手册。
二、中断向量和中断向量表
中断服务程序的入口地址称为中断向量,由段基址和偏移地址两部份组成。
DOS系统在启动时将所有中断程序的入口地址按中断号顺序寄存在内存的0000:
0000~0000:
03FF空间,称为中断向量表。
每一个中断向量在中断向量表中占四个字节,前两个字节为中断服务程序入口的偏移地址,后两个字节为段基址。
只要明白某个中断服务程序的中断号,用中断号乘4,就可以够计算出该中断服务程序入口地址寄存在中断向量表的何处。
例如DOS系统功能服务程序的中断号为21H,其中断向量寄存在地址0000:
0084H处。
利用DEBUG程序能够查看DOS系统功能服务程序的入口地址:
-D0:
84
0000:
00804504A708-4F03F00B8A03F00BE...O.......
0000:
00901703F00BBC0FC900-C60FC900D00FC900................
0000:
00A06C10C90066047000-B4051E036C10C900l........l...
0000:
00B06C10C9006C10C900-62010F0ACC01100Al...l...b.......
0000:
00C0EAE40FC900EF00F0-6C10C90001008809........l.......
能够看到其入口地址为08A7:
0445(注意低地址寄存的是低字节,高低址寄存的是高字节)。
实际上明白了某个中断服务程序的入口地址,也能够通过CALL指令挪用该中断服务程序,例如DOS功能挪用的入口地址为08A7:
0445,能够通过指令“CALL08A7:
0445”挪用DOS功能。
进入DEBUG,利用“A”命令输入下面程序段:
-A
126B:
0100MOVAH,02
126B:
0102MOVDL,41
126B:
0104CALL08A7:
0445
执行上面程序:
-G=100,109
结果输出字符“A”。
软中断程序挪用,就是通过INT指令挪用系统中断服务程序。
上面例子看到,通过中断号能够从中断向量表中查出对应中断服务程序的入口地址,然后通过CALL指令挪用,可是过于繁琐。
一般挪用中断服务程序能够通过硬件,或利用INT指令。
INT指令一般格式为:
INT中断号
运算机执行INT指令的进程是:
按照中断号计算对应中断向量在中断向量表中地址;
从中断向量表中掏出中断服务程序的入口地址,将中断服务程序段基址装入CS寄放器,偏移地址装入IP;
运算机就转移到对应的中断服务程序执行;
中断服务程序执行完毕返回被中断的程序继续执行。
§BIOS中断服务程序挪用
由运算机厂商提供的BIOS中断服务程序固化在ROM内,运算机启动后,这些中断服务程序的入口地址被装入中断向量表,用户能够通过硬件方式,或软中断方式挪用BIOS中的中断服务程序。
下面通过示例说明BIOS的键盘输入和视频输出中断服务程序的利用。
一、键盘中断服务程序
键盘中断服务程序中断号为16H,包括0H、1H、2H三个子功能。
0h号子功能:
读键盘输入的字符。
当挪用该子功能时,运算机等待接收键盘输入。
若是没有按键按下,则等待;若是有按键按下,则将按键的扫描码装入AH寄放器,将按键的ASCII码装入AL寄放器。
因为键盘上的功能键,如,F一、F二、…等,没有对应的ASCII码,所以,当按下的若是是功能键,AL=0,AH=对应键的扫描码。
因此,能够挪用0h号子功能识别是不是有功能键按下。
01H号子功能:
从键盘缓冲区读一个字符,当键盘缓冲区不为空时,将ZF置0,将读取的ASCII码装入AL寄放器;当键盘缓冲区为空时,将ZF置1后返回。
02H号子功能:
读取双态键,或组合键的状态,返回值AL的对应位含义如图所示。
图键盘状态字节
例721:
挪用键盘中断0H子功能,接收一个按键,若是是功能键F1打印字母“A”,若是是其它功能键打印字母“B”,不然不打印。
DISPMACROX;;显示字符宏概念
MOVDL,X
MOVAH,02H
INT21H
ENDM
.MODELSMALL
.CODE
START:
MOVAH,0
INT16H;挪用中断16h的0号子功能
CMPAL,0;是功能键否?
JNEEXIT;不是功能键,结束。
CMPAH,3BH;是功能键F1否?
3B是功能键F1的扫描码。
JNEF2
DISP"A"
JMPEXIT
F2:
DISP"B"
EXIT:
MOVAH,4CH
INT21H
ENDSTART
例722:
别离挪用16H的01h和0H子功能接收键盘输入,并打印输入健的ASCII码。
ROL14MACROZ;循环左移四次宏概念
PUSHCX
MOVCL,4
ROLZ,CL
POPCX
ENDM
DISPMACRO;显示字符宏概念
PUSHAX
MOVAH,02H
INT21H
POPAX
ENDM
.MODELSMALL
.CODE
OUT16PROCNEAR;十六进制数输出进程
MOVCX,2
L1:
ROL14AL
MOVDL,AL
ANDDL,0FH
CMPDL,9
JBEL2
ADDDL,7
L2:
ADDdl,30h
DISP
LOOPL1
MOVDL,'H'
DISP
RET
OUT16ENDP
挪用01H子功能:
START:
L3:
MOVAH,1
INT16H;挪用中断16h的01H号子功能
JZL3;键盘缓冲若是为空返回L3
CALLOUT16;挪用十六进制数输出子程序
MOVAH,4CH
INT21H
ENDSTART
挪用0H子功能:
START:
MOVAH,0
INT16H;挪用中断16h的0号子功能
CALLOUT16;挪用十六进制数输出子程序
MOVAH,4CH
INT21H
ENDSTART
有上面例子能够看到中断16H的0H子功能和DOS系统功能挪用的01H子功能几乎是相同的,在程序中到底应当挪用那一个好呢?
一般来讲若是不是特殊需要应尽可能利用DOS系统功能。
二、视频输出中断服务程序
不同的显示控制器,显示输出的特性不同,主要包括显示分辨率和对图形的支持。
目前PC运算机多采用AVGA显示控制器,AVGA显示控制器兼容以前的CGA、EGA、和VGA所支持的特性。
显示输出系统有多种工作模式,能够分为字符模式和图形模式两大类,每一类又可按分辨率和颜色数分成不同的子模式。
例如字符模式能够有25行×40列、25行×80列等模式;图形模式能够有分辨率640×480,16种颜色;或分辨率640×480,256种颜色等。
字符模式下显示字符存入显示缓存,就会在显示器上显示出来。
分为字符模式下的显示缓存的开始内存地址B8000H。
显示缓存区分为若干页,每一页和一满屏数据相对应,使历时能够选择其中的一页。
每一个显示字符占用两个字节,前一个字节为字符的ASCII码,后一个字节为字符模式字符的属性。
字符属性字节概念如下:
位0~位2字符颜色,000:
黑色字符,001:
带下划线,111:
白色字符等
位3字符亮度,0:
普通亮度,1:
高亮度
位4~位背景颜色,000:
黑色背景,111:
白色背景
位7字符闪烁,0:
普通字符,1:
闪烁字符
图形模式的每一个像素数据位数取决于可选择的颜色,例如640×480,16色模式,每一个像素需要4位二进制数,全屏共需要640×480×=153600字节。
图形模式将显示缓存区分成4个存储位平面,其开始地址为A0000H,每一个位平面存储像素的一名,各个位平面的顺序号相同位组合成屏幕上一个像素。
DOS系统将中断号10H分派给视频输出中断服务程序。
10H中断包括0H~13H子功能。
下面介绍其中几个子功能:
1.06H子功能
功能:
当前显示页上滚。
输入参数:
AL=上滚行数,0为初始化窗口(全屏幕)。
BH=字符填充属性。
CH/CL=左上角行/列坐标。
DH/DL=右下角行/列坐标。
2.02H子功能
功能:
置光标位置。
输入参数:
BH=显示页号。
DH=行号。
DL=列号。
3.09H子功能
功能:
在当前光标位置显示字符
输入参数:
BH=显示页号。
BL=显示字符属性
CX=重复次数
其中字符属性的列位概念如下:
图字符属性
例723:
在显示器的指定位置显示文字。
.MODELSMALL
.DATA
STRDB"HowAreYou!
"
COUNTEQU$-OFFSETSTR
.CODE
START:
MOVAL,0;AL=上卷行数,AL=0为清屏
MOVCL,0;开始行号
MOVCH,0;开始列号
MOVDL,79;结束行号
MOVDH,24;结束列号
MOVBH,7;卷入行属性为黑底白字
MOVAH,06H;子功能号06H送AH寄放器。
INT10H;挪用10H的06H子功能清屏幕
MOVDH,10;置光标到10行,33列
MOVDL,33;光标列号
MOVBH,0;置显示页号
MOVAH,2
INT10H;挪用02H子功能设置光标位置
MOVAX,@DATA
MOVDS,AX
MOVSI,OFFSETSTR
MOVBL,01110110B;设置字符属性白底红字
MOVCX,COUNT
L1:
PUCHCX;循环次数=显示字符数
MOVCX,1;显示重复次数
MOVAH,9;挪用09h子功能显示字符
MOVAL,[SI];显示字符ASCII码装入AL寄放器
INT10H;显示字符
INCSI
INCDI;;光标左移
MOVAH,2
INT10H;重置光标位置
POPCX
LOOPL1
EXIT:
MOVAH,4CH
INT21H
ENDSTART
运行上面程序在显示器的10行,33列开始显示白底红字的“Howareyou!
”。
例724:
在显示器上画一条20个像素的直线。
下面程序挪用了10H功能的0H和0CH子功能:
0号子功能:
置显示模式,AL=显示模式代码,当AL=12H时的显示模式为640×480像素,16色模式;
0CH子功能:
在屏幕上绘点,DX=开始行,CX=开始列,AL=颜色编码。
.MODELSMALL
.CODE
START:
MOVAL,12H
MOVAH,0
INT10H;设置640×480,16色模式
MOVDX,40;初始行
MOVCX,50;开始列
L1:
MOVAH,0CH;挪用写像素功能
MOVAL,7;设置颜色为白色
INT10H;画点
INCCX;列数增1
CMPCX,70
JNEL1
EXIT:
MOVAH,4CH
INT21H
ENDSTART
§硬中断
一、中断控制器
除通过INT指令挪用中断服务程序,微型运算性能够通过硬件挪用中断服务程序。
控制硬中断的芯片是中断控制器,如初期的PC运算机利用Intel的8259中断控制器芯片,此刻微机的中断控制器和其它一些部件一路集成为一块超大规模集成电路。
中断控制器占用20h和21h两个I/O端口:
1.20h对应中断控制器中的命令寄放器,可由CPU将中断控制命令代码写入到该寄放器,以控制中断控制器的工作方式。
例如,20H为停止中断控制器工作代码,利用下面指令将结束中断:
MOVAL,20H
OUT20H,AL
其中OUT指令是I/O输出指令,其执行的操作是将AL寄放器中的代码发送到外设端口20H。
中断控制器的其它命令需要了解中断控制器的内部结构和工作原理,过于复杂这里略去。
2.端口21h对应中断屏蔽寄放器,这是一个8位的寄放器,每一名和一个外部设备的中断信号相对应,将其中的某位置1,就会禁止该位对应的外部设备中断申请。
DOS系统将如下中断号分派给硬中断服务程序:
08H时钟中断(IRQ0),每秒钟执行次;
09H键盘中断(IRQ1);
0AH保留;
0BH通信口COM2(IRQ3);
0CH通信口COM1(IRQ4);
0DHLPT2(IRQ5);
0EH磁盘控制器(IRQ6);
0FHLPT1(IRQ7);
为了接入更多的外部设备,在微型运算机中将两片中断控制器芯片级连方式在一路,其IRQ8~IRQ15对应中断号为70H~77H。
二、中断控制器的工作原理
当有外部设备发出中中断申请信号时,中断控制器向CPU的可屏蔽中断输入端发出中断申请信号,并同时将其对应的中断号通过数据线发送到CPU,CPU接到中断控制器的信号后,暂时中止执行正在执行的程序,按照中断控制器发来的中断号计算中断服务程序入口地址在中断向量表中的位置,将中断向量装入CS:
IP,开始执行中断服务程序,中断服务程序执行结束后继续执行原来的程序。
除能够通过中断屏蔽寄放器屏蔽某外设的中断申请,将IF标志位置0,能够屏蔽所有中断控制器的中断申请。
指令:
CLI将IF置零,关中断;
STI将IF置1,开中断。
§中断程序设计
有时用户需要设计自己的中断服务程序,用户设计的中断服务程序能够占用DOS系统为用户保留的中断号。
中断服务程序应当遵循如下操作步骤:
1.中断服务程序应保护现场:
将用到的寄放器压如堆栈保护;
2.关中断,禁止其它中断申请;
3.中断处置;
4.开中断;
5.向中断控制寄放器发出中断结束命令;
6.恢复现场;
7.返回
下面程序是中断程序设计的示例。
该程序中的RING进程为中断执行程序,当每次时钟信号到来时执行该进程一次。
每次执行检查变量COUNT的值,若是COUNT等于100就显示字符串"Thebellisring!
",然后将COUNT清0;若是COUNT小于100不显示字符串,只是将COUNT增1后返回。
.MODELSMALL
.DATA
MESSDB"Thebellisring!
",0DH,0AH,"$"
COUNTDW1
.CODE
RINGPROCNEAR
PUSHDS
PUSHUAX
PUSHCX
PUSHDX;保护现场,将DS、AX、CX、DX值压入堆栈
MOVAX,@DATA
MOVDS,AX
CLI;关中断
INCCOUNT
CMPCOUNT,100
JNZEXIT
MOVDX,OFFSETMESS
MOVAH,09H
INT21H;挪用DOS的09H功能显示字符串
MOVCOUNT,0;恢复COUNT值
EXIT:
STI;开中断
MOVAL,20H
OUT20H,AL;发中断结束命令
POPDX
POPCX
POPAX
POPDS;恢复现场
IRET;中断返回
RINGENDP
MAINPROCFAR
START:
MOVAL,1CH;中断号1CH送AL寄放器
MOVAH,35H
INT21H;挪用DOS的35H功能,取1CH号中断向量
PUSHES
PUSHBX;保留原中断向量
MOVDX,OFFSETRING;变量RING的偏移地址送DX
MOVAX,SEGRING
MOVDS,AX;取变量RING的段基址,送DS
MOVAL,1CH
MOVAH,25H
INT21H;挪用DOS的25H功能,置1CH号中断向量
L1:
MOVAH,01H;读键盘缓冲区
INT16H
CMPAL,0DH
JNEL1;ZF=0,没有键按下返回L1
POPDX
POPES
MOVAL,1CH
MOVAH,25H
INT21H;恢恢复1CH中断向量
MOVAH,4CH
INT21H
MAINENDP
ENDSTART
程序说明:
1.1CH中断为DOS系统为用户程序保留的时钟中断,实际上08H中断直接挪用该中断。
系统内部时钟每隔秒就向中断控制器发出一次中断请求信号,CPU响应该中断请求,执行1CH号中断服务程序。
2.DOS的35H功能为取中断向量:
入口参数:
AL=中断号
出口参数:
ES:
BX=中断向量
上面程序通过35H功能挪用掏出原中断向量值,将其压入堆栈保留。
3.DOS的25H功能为设置中断向量:
入口参数:
DS:
DX=中断向量,AL=中断号
出口参数:
无
程序通过25H功能挪用将进程RING的段基址和偏移地址存入中断向量表。
4.IRET为中断返回指令。
CPU接到中断请求信号后,将当前执行程序的下一指令的地址压入堆栈保留后,响应中断,并执行中断服务程序。
中断服务程序由IRET指令将保留在堆栈中的指令地址弹出到CS:
IP,返回到被中断的程序。
5.由标号L1开始的程序段挪用键盘中断16H的01H子功能循环扫描键盘,在循环进程中每距离秒响应一次时钟中断请求,执行RING进程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 运算 原理 第七