第8章 实模式下的中断程序设计_第1页
第8章 实模式下的中断程序设计_第2页
第8章 实模式下的中断程序设计_第3页
第8章 实模式下的中断程序设计_第4页
第8章 实模式下的中断程序设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章主要教学内容1.中断的基本概念;2.中断程序的设计方法;3.BIOS/DOS中断调用。1.理解中断的基本概念;2.掌握中断程序的基本设计方法;3.能熟练使用BIOS/DOS中断调用。本章主要教学目的及要求3/9/202318.1中断概述8.1.1中断与中断源中断:当一种特殊事件发生时,CPU停止正在运行的程序,而转去执行该事件的处理程序,处理完该事件后,再返回原程序继续正确地执行下去,这个过程就称为中断。中断源:引起中断的事件8086/8088的中断源非屏蔽中断请求中断逻辑INTn指令INT0指令除法错误单步TF=1

IR08259AIR1

可编程

IR2

中断

IR3

控制器

IR4(PIC)IR5

IR6

IR7INTRNMICPUn410系统定时器键盘彩色/图形接口保留(通信)串行通信接口保留(ALT打印机)软盘保留(打印机)08090A0B0C0D0E0F3/9/202328.1.2中断分类类型外部中断非屏蔽中断NMI可屏蔽中断INTRCPU不能禁止NMI线上的中断请求,主要用于一些紧急的故障处理CPU是否做出响应由该外设的中断请求是否被屏蔽和CPU是否允许响应中断决定内部中断INT引起的中断执行INTn指令产生中断,调用中断程序来完成中断功能,操作数n将给出中断的类型处理CPU某些错误的中断错误类型有两种:除法错中断和溢出中断调试程序设置的中断如单步中断、断点中断、失效、陷井和中止3/9/202338.1.3中断向量表定义:各种中断处理程序的入口地址放在一起形成一个地址表00000H00004H00008H003FCH类型0中断处理程序入口地址类型1中断处理程序入口地址类型2中断处理程序入口地址………类型FF中断处理程序入口地址偏移地址IP的值段地址CS值中断向量地址=中断类型号*4共1K字节存放256个中断3/9/202348.1.4中断过程中断发生时,硬件自动完成的动作如下:(1)取中断类型号n;(2)标志寄存器(PSW)内容压栈;(3)当前代码段寄存器(CS)内容压栈;(4)当前指令指针(IP)内容压栈;(5)禁止外部中断和单步中断(置IF=0,TF=0);(6)从向量表中取4×n地址的内容送IP,取4×n+2地址中内容送CS;(7)转中断处理程序。中断与子程序调用的差别:(1)在保护中断现场时,除了保护返回地址CS:IP之外,还保存了标志寄存器PSW的内容。(2)在中断发生时CPU自动清除了IF和TF3/9/202358.1.5中断优先级含义:当多个中断源同时申请中断时,CPU按优先级从高到低的次序依次处理各中断源的请求优先级从高到低的次序为: 优先级高非屏蔽中断(NMI) 内部中断 可屏蔽中断(INTR) 优先级低单步中断1.中断优先级2.中断嵌套含义:正在运行的中断处理程序,又被其他中断源中断注意:实际使用时,多层中断嵌套要受到堆栈容量的限制3/9/202368.1.6中断指令外中断是由外设发出中断信号引起的,没有中断指令软中断指令格式:INTn功能:转到相应中断处理程序执行中断返回指令格式:IRET功能:从中断服务程序返回主程序3/9/202378.2中断处理程序设计8.2.1中断处理程序的编写1.外中断处理程序主要步骤:(1)保护现场。主要指各通用寄存器内容和除CS外代码段寄存器的内容。保护方法一般是压栈。(2)尽快完成中断处理,以免影响其他外设中断请求。(3)恢复现场。(4)中断返回。用IRET指令返回。3/9/202382.软中断处理程序主要步骤:(1)考虑切换堆栈。(2)及时开中断。(3)应该保护现场。(4)完成中断处理。(5)恢复现场。(6)堆栈切换。(7)一般利用IRET指令实现中断返回。3/9/20239【例8-1】使用直接写入法设置中断向量。

……MOVAX,0MOVDS,AXMOVBX,n*4;设置n号中断向量

CLI;关中断

MOVWORDPTR[BX],OFFSETINTHAND;置偏移

MOVWORDPTR[BX+2],SEGINTHAND;置段值

STI ;开中断

……8.2.2设置和获取中断向量1.设置中断向量方法1:直接写入法。用MOV指令将中断向量直接写入中断向量表方法2:使用DOS功能调用法。25H号DOS功能调用可以设置中断向量出入口参数:预置:AH=25HAL=中断类型号

DS∶DX=中断向量执行:INT21H

功能:将指定的中断向量写入中断向量表。【例8-2】使用DOS功能调用设置中断向量。

INTHAND:……MOVAX,SEGINTHAND;中断处理程序的段地址

MOVDS,AXMOVDX,OFFSETINTHAND;中断处理程序的偏移地址

MOVAH,25HMOVAL,nINT21H……3/9/2023102.获取中断向量方法1:直接读取法。利用MOV指令直接读取中断向量【例8-3】利用直接读取法读取n号中断向量,并保存在双字变量OLDVECTOR中:

……XORAX.AXMOVES,AXMOVAX,ES:[n*4];取偏移地址

MOVWORDPTROLDVECTOR,AX;保存

MOVAX,ES:[n*4+2];取段地址

MOVWORDPTROLDVECTOR+2,AX;保存

……方法2:使用DOS功能调用法35H号DOS功能调用取得指定的中断向量出入口参数:预置:AL=中断类型号执行:INT21H

功能:读取指定中断的中断向量,其中:

ES=中断处理程序的段地址

BX=中断处理程序的偏移地址【例8-4】使用DOS功能调用取得n号中断的中断向量

……MOVAH,35HMOVAL,n

;中断类型号为nINT21H;中断向量在ES:BX中

MOVWORDPTROLDVECTOR,ESMOVWORDPTROLDVECTOR,BX……3/9/2023118.2.3中断程序设计举例【例8-5】编写输出字符串“exampleforint”的中断处理程序,设中断号为5CODESEGMENTASSUMECS:CODEMAINPROCFARPUSHDSMOVAX,0PUSHAXCLIMOVAX,SEGNEWINT5MOVDS,AXMOVDX,OFFSETNEWINT5MOVAL,5MOVAH,25HINT21HSTIMOVCX,10L1:INT5HLOOPL1RETMAINENDPHELLODB'exampleforint'NEWINT5PROCFARPUSHBXPUSHCXPUSHAX

MOVBX,OFFSETHELLOMOVCX,15L2:MOVAL,CS:[BX]CALLDISPCHARINCBXLOOPL2MOVAL,0DHCALLDISPCHARMOVAL,0AHCALLDISPCHARPOPAXPOPCXPOPBXIRETNEWINT5ENDPDISPCHARRPOCNEARPUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPCHARENDPCODEENDSENDMAIN3/9/2023128.3BIOS中断调用8.3.1BIOS概述含义:BIOS是固化在ROM中的程序,包含了主要I/O设备的处理程序和许多常用例行程序,一般以中断处理程序的形式存在。特点:和DOS功能调用相比其优点是效率高,缺点是编程相对复杂;和直接对硬件编程相比优点是实现相对容易,缺点是效率相对低。应用场合:1.有些功能DOS没有提供,但BIOS提供了。

2.有些场合无法使用DOS功能调用。

3.其他原因。3/9/2023138.3.2BIOS中断调用方法1.BIOS中断调用方法基本步骤:

⑴置入口参数

⑵使用中断语句INTn,其中n为中断号例:MOVAH,0;功能号为0INT1AH;1AH为BIOS中断号,功能为读时间计数器的值3/9/2023142.BIOS中断调用方法举例【例8-6】从键盘读入0~9间任一数,根据不同数显示不同的字符串。要求用BIOS中断来接收键盘输入STACKSEGMENTPARASTACK’STACK’DB256DUP(?)STACKENDSDATASEGMENTPARAPUBLIC’DATA’THIRTYDB30PARMDB128DUP(0)MSG0DB’ILIKEIBMPC……’MSG1DB’8080PROGRAMMINGISRUN……’MSG2DB’TIMETOBUYMANYDISKETTES…..’MSG3DB’THISPROGRAMWORKS……’MSG4DB’TURNOFFTHATPRINTER!……’MSG5DB’IHAVEMANY……’MSG6DB’THEPSPCANBEUSEFUL……’MSG7DB’BASICWASEASIERTHENTHIS…’MSG8DB’DOSISINDISPESABLE…..’MSG9DB’LASTMESSAGEOFTHEDAY..’ERRMSGDB’ERROR!INVALIDPARAMETER!!!’DATAENDSCODESEGMENTPARAPUBLIC‘CODE’;代码段STARTPROCFARASSUMECS:CODEPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVES,AXASSUMEES:DATAMOVDS,AXASSUMEDS:DATAMOVAH,0 INT16HSUBAL,’0’ JCERRORCMPAL,9JAERRORMOVBX,OFFSETMSG0MULTHIRTYADDBX,AXCALLDISPLAYRETERROR:MOVBX,OFFSETERRMSGCALLDISPLAYRET

DISPLAYPROCNEARMOVCX,30DISP1:MOVAL,[BX]CALLDISPCHARINCBXLOOPDISP1

MOVDL,0DHCALLDISPCHARMOVDL,0AHCALLDISPCHARRETDISPLAYENDPDISPCHARRPOCNEARPUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPCHARENDPCODEENDS ENDSTART3/9/2023158.4DOS功能调用8.4.1DOS功能调用概述1.什么是DOS功能调用定义:编了号的可由程序员调用的子程序就称为DOS的功能调用或称为系统调用包含的子程序:设备驱动(基本I/O)、文件管理和其他2.调用方法(1)设置入口参数。(2)功能调用号送AH寄存器。(3)发软中断指令“INT21H”。例:MOVAH,01INT21H

3/9/2023168.4.2基本I/O功能调用基本I/O功能调用带回显键盘输入(1号功能调用)功能:读入一字符并回显入口参数:无。出口参数:AL=读到字符的ASCII码。不带回显键盘输入(8号功能调用)功能同1号调用,只是不回显直接键盘输入(7号功能调用)显示输出(2号功能调用)直接控制台输入输出(6号功能调用)功能:读一字符

入口参数:无出口参数:AL=读到字符的代码

功能:写一字符。入口参数:DL=要输出字符的ASCII码。出口参数:无。功能:直接控制台输入输出。入口参数:DL=0FFH,输入;否则,DL=输出字符代码。出口参数:输入时,ZF=1表示无字符可读;ZF=0表示读到字符,AL=输入字符代码;输出时,无。显示字符串(9号功能调用)功能:显示一个字符串入口参数:DS:DX=需要输出字符串的首地址,串以‘$’结束出口参数:无输入字符串(0A号功能调用)功能:读入一个字符串入口参数:DS:DX=输入缓冲区首地址出口参数:接收到的输入字符串在缓冲区中取键盘输入状态(0BH号功能调用)功能:判别输入设备上是否有字符可读入口参数:无出口参数:AL=0,无字符可读;AL=0FFH,有字符可读清除输入缓冲区后再输入(0CH号功能调用)功能:清除输入缓冲区,再执行某个输入入口参数:AL=清除输入缓冲区后要执行的功能号出口参数:决定于清除输入缓冲区后执行的功能打印输出(5号功能调用)功能:向连在第一个并行口上的打印机输出一字符入口参数:DL=要打印的字符(ASCII码)出口参数:无3/9/2023178.4.3应用举例【例8-7】写一个程序,从键盘接收一位10进制数,然后以二进制数形式显示出来CSEGSEGMENTASSUMECS:CSEG,DS:CSEGSTART:MOVAH,1 INT21HMOVBL,ALMOVDL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HMOVCX,8NEXT:SHLBL,1MOVDL,30HADCDL,0 MOVAH,2INT21H LOOPNEXT MOVDL,’B’MOVAH,2 INT21HMOVAH,4CH INT21HCSEGENDSENDSTART3/9/202318【例8-8】利用DOS功能调用,在显示器上显示“WHOAREYOU?”然后接收键入的名字并输出在显示器上DSEGSEGMENTQUESTDB’WHOAREYOU?’,’$’NAMEDB20,0,20DUP(’$’) DSEGENDSCODESEGMENTASSUMECS:CODE,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVDX,OFFSETQUESTMOVAH,9INT21HMOVDX,OFFSETNAME MOVAH,0AHINT21H MOVDX,OFFSETNAME+2MOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART3/9/202319【例8-9】查询系统的当前目录并显示DATASEGMENTPATHDB64DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDL,0MOVSI,OFFSETPATH MOVAH,47H INT21HMOVCX,64 MOVSI,0NEXT:MOVDL,PATH[SI]MOVAH,2INT21H INCSILOOPNEXT MOVAH,4CHINT21HCODEENDSENDSTART3/9/2023208.5磁盘文件管理8.5.1传统文件管理方式含义:传统文件管理方式通过文件控制块FCB和数据传输区DTA

进行文件存取1.传统文件管理方式简述磁盘文件存取方式:1.顺序存取方式:适用于按从头到尾的次序存取文件中的记录。2.随机存取方式:允许按所希望的任意次序访问任一记录。3/9/2023212.传统文件管理功能调用功能调用建立文件控制块(29H)功能:分析d:filename.ext的文件,若存在则建立FCB入口参数:DS:SI指向要分析的命令行或文件名,ES:DI指向一个要用的FCB首址,AL=建立方式出口参数:DS:SI指向文件名后的第一个字符,ES:DI指向一个格式化的FCB的第一个字节,若存在无效文件名则ES:DI+1含空格建立磁盘缓冲区(1AH)功能:建立磁盘读写缓冲区入口参数:DS:DX指向缓冲区首地址出口参数:无建立文件(16H)功能:建立文件入口参数:DS:DX指向一个未打开的FCB出口参数:AL=00H表示成功,AL=0FFH表示目录区满打开文件(0FH)功能:打开文件入口参数:DS:DX指向一个未打开的FCB出口参数:找不到文件AL=0FFH,找到AL=00H,并给FCB赋值关闭文件(10H)功能:关闭打开的文件入口参数:DS:DX指向一个打开的FCB出口参数:AL=00H表示成功,AL=0FFH表示已换盘删除文件(13H)功能:删除FCB指定的文件入口参数:DS:DX指向一个打开的FCB出口参数:AL=00H成功,AL=0FFH找不到符合的目录项顺序读(14H)功能:将FCB中当前块号和当前记录号指定的记录送磁盘缓冲区入口参数:DS:DX指向一个打开的FCB出口参数:AL=00H成功,AL=01无数据,AL=03读了部分数据,

AL=02DTA过小顺序写(15H)功能:将磁盘缓冲区信息送由当前记录号指定的记录入口参数:DS:DX指向一个打开的FCB出口参数:AL=00H成功,AL=01盘满,AL=02缓冲区小随机读(21H)功能:将FCB中相对记录号指定的记录送磁盘缓冲区入口参数:DS:DX指向一个打开的FCB出口参数:AL=00H成功,AL=01无数据,AL=03读了部分数据,

AL=02DTA过小随机写(22H)功能:将磁盘缓冲区信息送由相对记录号指定的记录入口参数:DS:DX指向一个打开的FCB出口参数:AL=00H成功,AL=01盘满,AL=02缓冲区小3/9/2023223.传统文件管理应用举例【例8-10】利用传统文件管理方式建立一个文件ABC.DAT,然后从键盘读入一个字符串,将该字符串顺序写入文件DATASEGMENTQUESTDB'Continue?'FNAMEDB'ABC.DAT'FCBDB100HDUP(0)DTADB80HDUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVSI,OFFSETFNAMEMOVDI,OFFSETFCBMOVAL,0FHMOVAH,29HINT21H MOVDX,OFFSETFCBMOVAH,16HINT21H MOVBYTEPTRFCB+31H,0NEW:MOVBX,0MOVCX,7FHERA:MOVAH,01HINT21HMOVDTA[BX],ALINCBXLOOPERAMOVDTA[BX],0AHMOVDX,OFFSETDTAMOVAH,1AHINT21HMOVDX,OFFSETFCBMOVAH,15HINT21H MOVDX,OFFSETQUESTMOVAH,09HINT21H MOVAH,01HINT21H CMPAL,'Y'JNEEXIT JMPNEWEXIT:MOVDX,OFFSETFCBMOVAH,10HINT21H MOVAH,4CHINT21HCODEENDSENDSTART3/9/2023238.5.2扩充文件管理方式含义:通过文件标记来存取文件,使用方法更简单灵活1.扩充文件管理方式简述方法:要告诉DOS一个包括文件的路径名和一个全0字节的ASCII码串包括磁盘驱动器、目录路径和文件名3/9/2023242.扩充文件管理功能调用功能调用建立文件(3CH)功能:建立文件入口参数:DS:DX=代表文件名的首地址。CX=文件属性出口参数:CF=0成功,AX=文件标记;CF=1失败,AX=错误代码打开文件(3DH)功能:打开文件入口参数:DS:DX=代表文件名的首地址。AL=存取方式出口参数:CF=0成功,AX=文件标记;CF=1失败,AX=错误代码关闭文件(3EH)功能:关闭文件入口参数:BX=文件标记出口参数:CF=0表示成功,CF=1表示成功写文件(40H)功能:写文件入口参数:BX=文件标记,CX=字节数,DS:DX=缓冲区首地址出口参数:CF=0成功,AX=实际写入字节。

CF=1失败,AX=错误代码移动文件读写指针(42H)功能:移动文件(读写)指针入口参数:BX=文件号,CX:DX=位移量,AL=移动方式出口参数:CF=0成功,DX:AX=移动后文件指针值;

CF=1失败,(AX)=1无效的移动方式,(AX)=6无效的文件标记删除文件(41H)功能:删除文件入口参数:DS:DX=代表文件名的字符串首地址出口参数:CF=0成功,CF=1失败,AX=错误代码3/9/2023253.扩充文件管理应用举例【例8-11】利用文件扩充功能完成下列工作:

1.建立C:\MASM\FILE1.DAT文件;

2.打开该文件并写入字符串“012……ABC……IJ”,然后关闭文件;

3.打开文件,读10个字符到缓冲区;

4.建立并打开文件FILE2.DAT,将缓冲区中的10个字符写入该文件3/9/202326DATASEGMENTF1DB‘C:\MASM\FILE1.DAT’,0F2DB‘C:\MASM\FILE2.DAT’,0ZFDB‘0123456789ABCDEFGHIJ’HCDB200DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXMOVDX,OFFSETF1MOVCX,0MOVAH,3CH INT21HMOVSI,AXMOVDX,OFFSETZFMOVCX,20MOVBX,AX MOVAH,40H INT21H MOVBX,SI MOVAH,3EHINT21H MOVDX,OFFSETF1 MOVAL,0 MOVAH,3DH

INT21HMOVSI,AX MOVBX,AXMOVCX,10 MOVDX,OFFSETHCMOVAH,3FH INT21H MOVDI,AX MOVDX,OFFSETF2MOVCX,0 MOVAH,3CH INT21HMOVDX,OFFSETHCMOVCX,DI MOVBX,AX MOVAH,40H INT21H MOVAH,3EH INT21H MOVBX,SIMOVAH,3EHINT21HMOVAH,4CHINT21HCODEENDSENDBEGIN3/9/202327【例8-12】设当前目录下有两个文件TEST1和TEST2,写一个程序,将TEST2连接到TEST1后面DSEGSEGMENT FNAME1DB’TEST1’,0 FNAME2DB’TEST2’,0HANDLE1DW0HANDLE2DW0ERRMESS1DB‘Cannotopenfile’,07h,’$’ERRMESS2DB‘Readingerror’,07h,’$’ERRMESS3DB‘Writingerror’,07H,’$’BUFFERDB512DUP(0)DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEG MOVDS,AX MOVDX,OFFSETFNAME1 MOVAX,3D01H INT21HJNCOPENOK1 ERR1:MOVDX,OFFSETERRMESS1CALLDISPMESS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论