第7章输入输出和中断_第1页
第7章输入输出和中断_第2页
第7章输入输出和中断_第3页
第7章输入输出和中断_第4页
第7章输入输出和中断_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、(1)答:中断和子程序调用之间有相似之处,也有不同之处。它们的工作过程非常相似,即暂停当前程序的执行,转而执行另一个程序段,当该程序段执行完时,CPU都自动恢复源程序的执行。它们的主要差异有以下几个方面:1子程序调用一定是程序员在编写源程序时事先安排好的,是可知的,而中断是由中断源根据自身的需要产生的,是不可预见的(用指令INT引起的中断除外)。2子程序调用是用CALL指令来实现的,但中断是没有调用指令的,只有发出中断请求的事件(指令INT是发出内部中断信号,不要理解为调用中断服务程序)。3子程序的返回指令是RET,而中断服务程序的返回指令是IRET/IRETD。4在通常情况下,子程序是由应用

2、系统的开发者编写的,而中断服务程序是由系统软件设计者编写的。(2)答:响应中断的过程是先保护现场和返回地址的,然后再进入中断响应程序的运行。现场包括通用寄存器和标志位寄存器的内容,而调用子程序一般有用户自己来保护特定的寄存器,通常不保护标志位寄存器。由于保护内容的不同,在返回时,从堆栈中弹出的内容也就不同。所以为了区别返回指令的功能,需要分别设置中断返回指令IRET指令和子程序返回RET指令。(3)程序如下:DISPLAY PROC USES AX BX ;子句USES在MASM6。X中有效, NEXT: MOV BX ,DX MOV D1 ,BYTE PRT BX CMP D1 , 0 JE

3、 FINISH MOVAH ,2 INT21HINC BX JMP NEXT FINISH :RETDISPIAY ENDP (4)程序如下:CODE1 SEGMENT CODEASSUME CS:CODE1DISPLAY PROCUSES AX ;以十六进制的形式显示寄存器 DL 低4 位二进制AND DL, OFHCMP DL, 9JB BELOW1ADD DL, 7HBELOW1:ADD DL, 30HMOV AH, 2INT 21HRETDISPLAY ENDPDISPKEY PROC USES AX CX DXMOV AH, 0INT 16H ;从键盘读入字符CMP AL, 0;如果

4、为普通字符则子程序结束JNE OVERMOV DL, AHMOV CL, 4SHR DL, CLCALL DISPLAY ;按十六进制显示高 4 位二进制MOV DL, AHCALL DISPLAY ;按十六进制显示低 4 位二进制OVER:RETDISPKEY ENDPSTART:CALL DISPKEY ;调用子程序MOV AX, 4C00H;程序结束INT 21HCODE1 ENDSEND START(5)程序如下:DATA1 SEGMENTNAME1 DB ZHANG SANDISPMODE DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:

5、DATA1START:MOV AX, DATA1;初始化数据段寄存器MOV DS, AXMOV AH, 0FH ;保存当前显示模式INT 10HMOV DISPMODE, ALMOV AH, 0MOV AL, 3 ;设置为8025 彩色文本显示模式INT 10HMOV AX, DSMOV ES, AXMOV BP, OFFSET NAME1MOV DX, 1849H ;坐标(24,73)MOV CX, 6MOV BH, 0MOV BL, 9AH;显示字符的颜色MOV AH, 13HMOV AL, 0INT 10H ;在屏幕右下角显示姓名MOV AH, 0;等待键盘输入INT 16HMOV AH

6、, 0 ;恢复原先的显示模式MOV AL, DISPMODEINT 10HMOV AX, 4C00H ;程序结束INT 21HCODE1 ENDSEND START(6)程序如下:.MODEL SMALL.CODE.STARTUPMOV AX, OB800HMOV DS, AXMOV CX, 2000 ;屏幕上所有字母个数:2580XOR BX, BX ;屏幕缓冲区中的第 0 个字节AGAIN:MOV AL, BX.IF(AL=A)&(AL=A)&(AL=0)&(AL=0)&(AL=A)&(AL=A)&(AL=Z)CALL WRITEKEYJMP NEXTKEY.ENDIFJMP NEXTKE

7、YFINSH:MOV AX, 4C00HINT 21HCODE1 ENDS(9)程序如下:DATA1 SEGMENTDISPMODE DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1START:MOV AX, DATA1MOV DS, AXMOV AH, 0FH ;SAVE CURRENT DISPLAY MODEINT 10HMOV DISPMODE, ALMOV AH, 0MOV AL, 12HINT 10HMOV DX, 0NEXT:MOV AH, 0CHMOV AL, 9 ;BRIGHT BLUEMOV CX, 320INT 10

8、HINC DXCMP DX, 480JB NEXTMOV AH, 0 ;WAIT FOR ANY KEY BE PRESSEDINT 16HMOV AH, 0 ;RESTORE DISPLAY MODEMOV AL, DISPMODEINT 10HMOV AX, 4C00HINT 21HCODE1 ENDSEND STARTDATA1 SEGMENTDISPMODE DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1START:MOV AX, DATA1MOV DS, AXMOV AH, 0FH ;SAVE CURRENT DISPLAY

9、MODEINT 10HMOVDISPMODE, ALMOV AH, 0MOV AL, 12HINT 10HMOV DX, 478NEXT1:MOV CX, 0NEXT:MOV AH, 0CHMOV AL, 2 ;GREENINT 10HINC CXCMP CX, 640JB NEXTINC DXCMP DX, 480JB NEXT1MOV AH, 0 ;WAIT FOR ANY KEY BE PRESSEDINT 16HMOV AH, 0 ;RESTORE DISPLAY MODEMOV AL, DISPMODEINT 10HMOV AX, 4C00HINT 21HCODE1 ENDSEND

10、STARTDATA1 SEGMENTDISPMODE DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1;DRAW A VERTICAL LINE;INPUT: CXCOLUMN NUMBER, ALCOLORDRAWVLINE PROC USES DX BX AXPUSH BXPUSH AXMOV DX, 0NEXTPOINT:MOV AH, 0CHINT 10HINC DXCMP DX, 480JB NEXTPOINTRETDRAWVLINE ENDPSTART:MOV AX, DATA1MOV DS, AXMOV AH, 0FH ;S

11、AVE CURRENT DISPLAY MODEINT 10HMOV DISPMODE, ALMOV AH, 0 ;SET TO 64048016 MODEMOV AL, 12HINT 10HMOV AL, 0MOV CX, 0MOV SI, 0NEXT1:CALLDRAWVLINEINC CXCMP CX, 640JE OVERINC SICMP SI, 40JB NEXT1MOV SI, 0INC ALJMP NEXT1OVER:MOV AH, 0 ;WAIT FOR ANY KEY BE PRESSEDINT 16HMOV AH, 0 ;RESTORE DISPLAY MODEMOV A

12、L, DISPMODEINT 10HMOV AX, 4C00HINT 21HCODE1 ENDSEND STARTDATA1 SEGMENTDISPMODE DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1;DRAW A VERTICAL LINE;INPUT: CXCOLUMN NUMBER, ALCOLORDRAWVLINE PROC USES AX BX DXMOV DX, 0NEXTPOINT:MOV AH, 0CHINT 10HINCDXCMP DX, 480JBNEXTPOINTRETDRAWVLINE ENDPSTART:M

13、OV AX, DATA1MOV DS, AXMOV AH, 0FH ;SAVE CURRENT DISPLAY MODEINT 10HMOV DISPMODE, ALMOV AH, 0 ;SET TO 64048016 MODEMOV AL, 12HINT 10HMOV CX, 0MOV AL, 15 ;WHITE COLORNEXT1:CALL DRAWVLINEINC CXCMP CX, 640JB NEXT1MOV CX, 315MOV AL, 11NEXT2:CALL DRAWVLINEINC CXCMP CX, 325JB NEXT2MOV AH, 0 ;WAIT FOR ANY K

14、EY BE PRESSEDINT 16HMOV AH, 0 ;RESTORE DISPLAY MODEMOV AL, DISPMODEINT 10HMOV AX, 4C00HINT 21HCODE1 ENDSEND START(10)答:表达 256 种颜色需要一个字节。因此,一屏信息需要的内存字节数=320 200=64 000。(11)程序如下:DATA1 SEGMENTFCB DB 0, * EXE, 26 DUP(?) ;*与EXE之间有7 个空格NEWDIR DB , 0BUFFER DB 128 DUP(?)FILENAME DB 15 DUP(?)NOFILE DB FILES

15、NOT FOUND, 13, 10, ERR1 DB NO SUCH DIRECTORY, 13, 10, CURDIR DB 256 DUP(?)CURDRV DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1SHOWFILENAME PROC USES AX CX DX DI SI ESPUSH DSPOP ESCLDMOV SI, OFFSET BUFFER1MOV DI, OFFSET FILENAMEMOV CX, 8NEXTCHAR:MOVSBMOV AL, BYTE PTR SICMP AL, 20HJE NAMEENDLOO

16、P NEXTCHARNAMEEND:MOV BYTE PTR ES:DI, .INC DIMOV SI, OFFSET BUFFER9MOV CX, 3REP MOVSBMOV BYTE PTR ES:DI, 13MOV BYTE PTR ES:DI+1, 10MOV BYTE PTR ES:DI+2, MOV AH, 9MOV DX, OFFSET FILENAMEINT 21HRETSHOWFILENAME ENDPSTART:MOV AX, DATA1MOV DS, AXMOV AH, 19H ;SAVE CURRENT DIRINT 21HMOV CURDRV, ALMOV DL, 2

17、 ;CHANGE TO DRIVER CMOV AH, 0EHINT 21HMOV AH, 47HMOV DL, 0MOV SI, OFFSET CURDIR ;SAVE CURRENT DIRECTORYINT 21HMOV DX, OFFSET NEWDIR ;CHANGE DIRECTORY TO MOV AH, 3BHINT 21HJNC CHANGEOKMOV DX, OFFSET ERR1MOV AH, 9INT 21HJMP OVERCHANGEOK:MOV DX, OFFSET BUFFER ;SET DATA TRANSFER AREA(DTA)MOV AH, 1AHINT

18、21HMOV DX, OFFSET FCBMOV AH, 11HINT 21HCMP AL, 0JE FOUNDMOV DX, OFFSET NOFILEMOV AH, 9INT 21HJMP OVERFOUND:CALL SHOWFILENAMEMOV AH, 12H ;FIND NEXT FILEMOV DX, OFFSET FCBINT 21HCMP AL, 0JE FOUNDOVER:MOV DL, CURDRV ;RESTORE CURRENT DRIVERMOV AH, 0EHINT 21HMOV DX, OFFSET CURDIR ;RESTORE CURRENT DIRECTO

19、RYMOV AH, 3BHINT 21HMOV AX, 4C00HINT 21HCODE1 ENDSEND START(12)程序如下:说明:使用中断 21H的11H号子功能搜索子目录要使用扩展FCB。DATA1 SEGMENT;下面第一个“*”后面7 个空格,第二个“*”后面2 个空格EXPANDFCB DB -1, 5 DUP(?), 16, 0, * * , 26 DUP(0)NEWDIR DB , 0BUFFER DB 128 DUP(?)FILENAME DB 15 DUP(?)NOFILE DB DIRECTIONS NOT FOUND, 13, 10, ERR1 DB NO SU

20、CH DIRECTORY, 13, 10, CURDIR DB 256 DUP(?)CURDRV DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1GETFILENAME PROC USES AX CX DX DI SI ESPUSH DSPOP ESCLDMOV SI, OFFSET BUFFER8MOV DI, OFFSET FILENAMEMOV CX, 8NEXTCHAR:MOVSBMOV AL, BYTE PTR SICMP AL, 20HJE NAMEENDLOOP NEXTCHARNAMEEND:MOV BYTE PTR ES

21、:DI, .INC DIMOV SI, OFFSET BUFFER16MOV CX, 3REP MOVSBMOV BYTE PTR ES:DI, 0MOV BYTE PTR ES:DI+1, 13MOV BYTE PTR ES:DI+2, 10MOV BYTE PTR ES:DI+3, RETGETFILENAME ENDPSHOWFILENAME PROC USES AX DXMOV AH, 9MOVDX, OFFSET FILENAMEINT 21HRETSHOWFILENAME ENDPSTART:MOV AX, DATA1MOV DS, AXMOV AH, 19H ;SAVE CURR

22、ENT DIRINT 21HMOV CURDRV, ALMOV DL, 2 ;CHANGE TO DRIVER CMOV AH, 0EHINT 21HMOV AH, 47HMOV DL, 0MOV SI, OFFSET CURDIR ;SAVE CURRENT DIRECTORYINT 21HMOV DX, OFFSET NEWDIR ;CHANGE DIRECTORY TO MOV AH, 3BHINT 21HJNC CHANGEOKMOV DX, OFFSET ERR1MOV AH, 9INT 21HJMP OVERCHANGEOK:MOV DX, OFFSET BUFFER ;SET D

23、ATA TRANSFER AREA(DTA)MOV AH, 1AHINT 21HMOV DX, OFFSET EXPANDFCBMOV AH, 11HINT 21HCMP AL, 0JE FOUNDMOV DX, OFFSET NOFILEMOV AH, 9INT 21HJMP OVERFOUND:CALL GETFILENAMEMOV AX, 4300HMOV DX, OFFSET FILENAMEINT 21HJB FAILUREAND CX, 10HJE FAILURECALL SHOWFILENAMEFAILURE:MOV AH, 12H ;FIND NEXT FILEMOV DX,

24、OFFSET EXPANDFCBINT 21HCMP AL, 0JE FOUNDOVER:MOV DL, CURDRV ;RESTORE CURRENT DRIVERMOV AH, 0EHINT 21HMOV DX, OFFSET CURDIR ;RESTORE CURRENT DIRECTORYMOV AH, 3BHINT 21HMOV AX, 4C00HINT 21HCODE1 ENDSEND START(13)程序如下:DATA1 SEGMENT;下面第一个“*”后面7 个空格,第二个后面2 个空格FCB DB 0, * * , 26 DUP(?)NEWDRIVER DB 4 ;指定的驱

25、动器号为ENEWDIR DB , 0 ;指定的目录为BUFFER DB 128 DUP(?)FILENAME DB 15 DUP(?)NOFILE DB FILES NOT FOUND, 13, 10, ERR1 DB NO SUCH DIRECTORY, 13, 10, CURDIR DB 256 DUP(?)CURDRV DB ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1GETFILENAME PROC USES AX CX DX DI SI ESPUSH DSPOP ESCLDMOV SI, OFFSET BUFFER1MOV DI,

26、 OFFSET FILENAMEMOV CX, 8NEXTCHAR:MOVSBMOV AL, BYTE PTR SICMP AL, 20HJE NAMEENDLOOP NEXTCHARNAMEEND:MOV BYTE PTR ES:DI, .INC DIMOV SI, OFFSET BUFFER9MOV CX, 3REP MOVSBMOV BYTE PTR ES:DI, 0MOV BYTE PTR ES:DI+1, 13MOV BYTE PTR ES:DI+2, 10MOV BYTE PTR ES:DI+3, RETGETFILENAME ENDPSTART:MOV AX, DATA1MOV

27、DS, AXMOV AH, 19H ;SAVE CURRENT DIRINT 21HMOV CURDRV, ALMOV DL, NEWDRIVER ;CHANGE TO DRIVER NEWDRIVERMOV AH, 0EHINT 21HMOV AH, 47HMOV DL, 0MOV SI, OFFSET CURDIR ;SAVE CURRENT DIRECTORYINT 21HMOV DX, OFFSET NEWDIR ;CHANGE DIRECTORY TO NEWDIRMOV AH, 3BHINT 21HJNC CHANGEOKMOV DX, OFFSET ERR1MOV AH, 9IN

28、T 21HJMP OVERCHANGEOK:MOV DX, OFFSET BUFFER ;SET DATA TRANSFER AREA(DTA)MOV AH, 1AHINT 21HMOV DX, OFFSET FCBMOV AH, 11HINT 21HCMP AL, 0JE FOUNDMOV DX, OFFSET NOFILEMOV AH, 9INT 21HJMP OVERFOUND:CALL GETFILENAMEMOV AX, 4300HMOV DX, OFFSET FILENAMEINT 21HJB FAILUREOR CX, 1MOV AX, 4301HMOV DX, OFFSET F

29、ILENAMEINT 21HFAILURE:MOV AH, 12H ;FIND NEXT FILEMOV DX, OFFSET FCBINT 21HCMP AL, 0JE FOUNDOVER:MOV DL, CURDRV ;RESTORE CURRENT DRIVERMOV AH, 0EHINT 21HMOV DX, OFFSET CURDIR ;RESTORE CURRENT DIRECTORYMOV AH, 3BHINT 21HMOV AX, 4C00HINT 21HCODE1 ENDSEND START(14)程序如下:DATA1 SEGMENTBUFFER DB 128 DUP(?)F

30、ILENAME DB DATA.TXT, 0MSG1 DB CREATE SUCCEED!, 13,10, MSG2 DB CREATE FAILURE!, 13,10, FILEHANDLE DW ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1START:MOV AX, DATA1MOV DS, AXMOV DX, OFFSET FILENAMEMOV CX, 2MOV AH, 3CHINT 21HJC FAILUREMOV AX, FILEHANDLEMOV DX, OFFSET MSG1MOV AH, 9INT 21HMOV BX, F

31、ILEHANDLEMOV AH, 3EHINT 21HJMP OVERFAILURE:MOV DX, OFFSET MSG2MOV AH, 9INT 21HOVER:MOV AX, 4C00HINT 21HCODE1 ENDSEND START(15)程序如下:DATA1 SEGMENTBUFFERLEN DB 255CHARNUM DB 0BUFFER DB 256 DUP(?)CRLF DB 13, 10, FILENAME DB FILE.TXT, 0HINT DB INPUT CHARACTERS PLEASE, PRESS CTRL-Z TO SAVEFILE, DB PRESS CTRL-C TO CANCEL., 13, 10, MSG1 DB CREATE SUCCEED!, 13,10, MSG2 DB CREATE FAILURE!, 13,10, FILEHANDLE DW ?DATA1 ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA1;CREATE A FILE NAMED BY VARIABLE FILENAME;INPUT: NONE;OUTPUT:

温馨提示

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

评论

0/150

提交评论