版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言上机实验指导书一、概述上机实验总学时为16学时,其中综合性实验为2学时。实验共有6项暂定为8次,每次2学时。1.实验辅导的主要内容实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。2.实验的软硬件要求关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。3.加强实践能力的培养实验目的不光是为了验
2、证书本理论,更重要的是对实践能力的培养。其中包括:实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等;开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。实验一 汇编语言运行环境及方法、简单程序设计(2学时、验证性)1.实验目的:(1) 熟悉汇编语言运行环境和方法(2)了解如何使用汇编语言编制程序(3)
3、160;熟悉DEBUG有关命令的使用方法(4) 利用DEBUG掌握有关指令的功能(5) 利用DEBUG运行简单的程序段2.实验内容(1)学会输入、编辑汇编语言程序(2)学会对汇编语言程序进行汇编、连接和运行(3)进入和退出DEBUG程序(4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。3.实验准备(1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。(2)准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。(3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示Match.,
4、否则显示No match!;(1)仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。4.实验步骤(1)在DOS提示符下,进入MASM目录。(2)在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc不断修改错误,直至汇编通过为止。用连接程序link产生执行文件exe.例:link abc执行程序可直接从DOS执行程序,即在DOS环境中,输入文件名即可。(3)详细记录每一步所用的命令,以及查看结果的方法和
5、具体结果。5.实验报告要求(1)源程序清单。(2) 如何启动和退出EDIT程序。(3) 如何对源程序进行汇编及编辑。(4)如何启动和退出DEBUG程序。(5)整理每个DEBUG命令使用的方法,实际示例及执行结果。(6)启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?实验二 循环程序、分支程序程序设计实验(4学时、验证性)1.实验目的:(1)掌握循环、分支程序的设计方法(2)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。(3)学会针对不同的问题,选用不同的组织循环的方法。2.实验内容(1)编写一个程序S21,将内存中一组有符号的字数组按递增的序列排序,并将
6、其中的二进制数以十六进制的形式显示在屏幕上。(2)编写一个程序S22,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。3.实验准备(1)编写实验内容要求的两个程序。(2)写出调试以上程序,即修改程序参数,检查结果的操作方法。(3)熟悉源程序汇编、连接命令的使用方法即要回答的内容。4.实验步骤(1)用EDIT或其它编辑软件,编写.ASM源程序,例如S21.ASM及S22.ASM。(2)对其进行汇编及连接,产生.EXE文件。(3)对.EXE文件进
7、行调试运行。a.用DEBUG调试运行,学会修改AL内容的方法。b.对DSPKEY.EXE键入不同的字符,分别进行调试。c.在MS-DOS下运行这两个.EXE文件。5.实验报告要求(1)画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。(2)说明本实验是如何利用DEBUG进行调试的。实验三 子程序设计(4学时、验证性)实验3.1、本实验的目的在于让同学们掌握同一模块调用的方法。1.实验目的(1)掌握主程序与子程序之间的调用关系及调用方法。(2)掌握子程序调用过程中近程调用与远程调用的区别。(3)掌握通过堆栈转送参数的方法。2实验内容(1)编写程序S31,将BUF开始的10个单元中的二
8、进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,在转换过程中,通过子程序DISP实现显示.(2)编写一个主程序S32,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符b的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。3实验说明(1)第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两
9、个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。(2)第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。(3)第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。4实验准备(1)预
10、习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图。(2)熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。5实验步骤(1)编辑、汇编两个源程序,生成相应的可执行文件(.EXE)(2)用DEBUG的R 命令,T 命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。(3)检查程序执行的结果是否正确。6实验报告要求 (1)分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。(2)说明用堆栈传送参数的过程及其具体方法。(3)分析实验结果及所遇到问题,并说明解决的方法。实验3.2、本程序的
11、目的在于使读者掌握模块间调用子程序的编写方法.1.实验目的 (1) 了解多模块程序设计方法。(2) 学会使用PUBLEC和EXTRN 伪指令解决模块间的符号(如变量名,标号等)通信问题。2. 实验内容(1)编写一个子程序,将主程序设定的内存中字符串的小写字母转换成大写字母并显示出来.主程序S33用另一个模块编写。(2)编写一个子程序,将主程序S34指定的字符所在的地址返回给主程序,字符串(字符串以$为结束标志)与主程序在同一个模块。3.实验准备(1)仔细阅读教材中有关模块间通信的方法及模块程序设计的方法。(2)弄清伪指令PUBLIC及EXTRN的功能及用法。4.实
12、验步骤(1)分别对实验1和实验2的主、子模块进行汇编,在连接时,将它们装配成一个以 .EXE为扩展名的可执行文件.观察汇编及连接过程中有无错误.(2)对.EXE 文件进行调试及运行.(3)将实验1中的原字符串改为由键盘输入,然后由子模块将源串中的小写字母转换为大写字母,并将源串与转换后的两个字串分两行显示出来(设键入字串长度小于80个字符).5.实验报告要求(1) 画出相应的程序流程图。(2)扼要总结多模块程序的特点和编写方法。实验四 输入/输出实验(2学时 综合性实验)1 实验目的(1) 掌握输入输出程序设计的概念和方法。(2) 了解PC
13、机外围芯片8255、8259的功能。(3)学习如何在PC机上编写具有输入输出功能的程序,包括8255、8259芯片的使用方法。2 实验说明 本实验要求自行编写一个键盘输入处理程序,它可以完成键盘字符的读入并进行屏幕显示,本实验要利用IBMPC系统的硬件结构,分别使用外围芯片8255及8259。 在本例中,利用8255A的A端做数据输入,对应的端口地址为60H;利用B端口作控制端输入,端口地址为61H。8255A的控制端口地址为63H 。本例的8259中断控制器,其IRQ1端用于键盘中断请求线。键盘通过它可以响CPU发出中断请求。8259的I/O端口地址为21H,可以写入中断屏蔽字,以
14、对8个中断源是否容许中断进行控制。在每次中断结束时,要通过I/O端口地址20H写回一个中断结束命令EOI ,使8259可以清除本次中断。 因此本实验既属于输入输出实验,也属于中断实验。 有关说明将详细地附在参考程序中。3实验内容 利用pc机键盘,编写一个读入并显示键盘输入的演示程序。该程序只接受常规字符(包括回车键及退格键),对特殊功能键不进行处理。在程序中设置这些特殊功能键对应0编号即可,凡是检测到键位编号为0值时,均忽略对它们的处理。有键按下时,送出的扫描码的D7位为0时,当键抬起时,扫描的码D7位为1,以判定键是否被按下。4实验准备(1) 预习输入输出程序设计的特点和方法。(2
15、) 仔细阅读参考程序,弄清外围芯片接口初始化的意义和方法。5实验步骤(1) 建立源文件,并通过汇编和连接,产生可执行文件。(2) 运行程序,观察常规字符键及功能键按下时程序的反应,6实验报告要求(1) 给出程序框图,包括主程序框图、中断处理程序框图。(2)说明输入输出程序设计的特点。(3)讨论:将SHIFT键及右SHIFT 键也进行判别处理,它们的扫描码为42及54。为记录SHIFT键的按动状态,可设一个标志单元KBFLAG,右SHIFT按下,KBFLAG的D0位置1,左SHIFT按下,KBFLAG的D1位置1,放下左右的SHIFT键,KBFL
16、AG的相应恢复为0。当程序工作时,应能显示上档键的字符。实验五 字符处理程序实验1. 实验目的(1)熟悉串操作指令的功能与应用(2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。2实验内容(1) 字符串统计。自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。(2)在给定的字符串中,删除重复的字符,其余的字符向前递补。3. 实验准备(1)熟悉字符处理的方法和字符处理程序的设计;(2)认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。(3)按正常的方法将删除字符程序编成子程序,规定子程序的入口和
17、出口参数。4实验步骤(1)用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。程序每次执行,都能得到不同的结果。(2)编写一个在同一个字符串中删除字符,并将其余字符向前递补的程序。5实验报告要求(1)对照参考程序,画出程序流程图。(2)总结字符串处理的编程方法,提出改进和完善此类程序的设计方案。实验六BIOS和DOS中断调用应用程序设计1. 实验目的 (1)了解 DOS、BIOS调用的基本功能、调用参数、返回参数。以及数据定义 掌握中断通信程序的设计方法。(2)掌握如何利用扫描码进行功能控制。2. 实验内容编写一个可以进行光标左右移动和插入字符的简单字
18、处理程序。3.实验准备(1) 复习相关内容(2)了解键盘的扫描码、ASCII码及其显示字符(如果存在可显示字符形式)之间的对应关系。4. 实验步骤(1) 建立源文件,汇编、连接产生可执行文件。(2) 运行程序,使得可以输入字符和光标左右移动及字符的插入。5. 实验报告要求(1) 由参考程序,画出简单字处理程序框图。(2) 讨论如何实现光标的上下移动和字符的删除。源程序清单实验2(1)编写一个程序S21,将内存中一组有符号的字数组按递增的序列排序,并将其中的二进制数以十六进制的形式显示在屏幕上。;S21.ASM DSEG SEGMENT
19、 X DW 234H,32FH,90DH,123EH,-78EH,0ACFH,-234H,98H,-23DFH COUNT DW 9DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGMAIN PROC FARSTART: PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV CX,COUNTLAB0: MOV BX,1 DEC CX JZ LAB3 PUSH CX LEA DI,XLAB1: MOV AX,DI CMP AX,DI+2 JLE LAB2 XOR BX,BX XCHG AX,DI+2 MOV
20、DI,AXLAB2: ADD DI,2 LOOP LAB1 POP CX CMP BX,0 JZ LAB0LAB3: LEA DI,X MOV CX,COUNTLAB4: PUSH CX MOV CH,4 MOV BX,DILAB5: MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH CMP DL,9 JBE LAB6 ADD DL,7LAB6: ADD DL,30H MOV AH,2 INT 21H DEC CH JNZ LAB5 MOV DL,20H MOV AH,2 INT 21H ADD DI,2 POP CX LOOP LAB4 MOV DL,0DH M
21、OV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H LEA DI,X MOV CX,COUNTLAB7: MOV BX,DI PUSH CX MOV CX,16LAB8: XOR DL,DL ROL BX,1 RCL DL,1 ADD DL,30H MOV AH,2 INT 21H LOOP LAB8 MOV DL,'B' MOV AH,2 INT 21H MOV DL,' ' MOV AH,2 INT 21H ADD DI,2 POP CX LOOP LAB7 RETMAIN ENDPCSEG ENDSEND START其中
22、斜体字部分为以二进制输出。(2)编写一个程序S22,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。;S22.ASM CODE SEGMENT ASSUME CS:CODE START: MOVAH,1 INT21H ;等待键入字符,送AL CMPAL,0DH ;是否是回车符? JZDONE ;是则转DONE退出程序 CMPAL,'0' JBNEXT CMPAL,'9' JACHARUP MOVDL,AL MO
23、VAH,2 INT21H JMPSTART CHARUP: CMPAL,41H JBNEXT CMPAL,5AH JACHRDN DISPC: MOVDL,'c' MOVAH,2 INT21H NEXT: JMPSTART CHRDN: CMPAL,61H JBNEXT CMPAL,7AH JANEXT JMPDISPC DONE: MOVAH,4CH INT21H CODE ENDS END START实验3.1(1)编写程序S31,将BUF开始的10个字节单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,在转换过程
24、中,通过子程序DISP实现显示。;S31.ASMDATA SEGMENT BUFDB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FHDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV CX,10LEABX,BUF AGAIN:MOV AL, BXCALLHEXASCINCBXLOOP AGAINMOV AH,4CHINT21H HEXASC PROC NEARPUSH AXMOV DL,ALPUSHCXMOV CL,4SHRDL,CLPOPCXCALL
25、DISP ;显示高位HEX数POPAXMOV DL,ALAND DL,0FHCALL DISPRET HEXASC ENDPDISP PROCCMP DL,9JBE NEXTADD DL,7 NEXT: ADD DL,30HMOV AH,2INT 21H ;显示RETDISP ENDPCODE ENDS END START(2)编写一个主程序S32,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符b的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十
26、六进制数)。DATA SEGMENTCHAR DB 'b' BUF DB 50H, ?,50H DUP(?)CRLF DB 0DH,0AH,'$'DATA ENDS MCODE SEGMENT ASSUME CS:MCODE, DS:DATA START:MOVAX,DATAMOVDS,AXLEADX,BUFMOVAH,0AHINT21HLEADX,CRLFMOVAH,9INT21HLEASI,BUFMOVCL, SI+1MOVCH, 0 ;CX中为字符串长度INCSIINCSI ;SI指向串首址TABLEMOVAL,CHARMOVAH,0 ;AX中为待查字符P
27、USHSIPUSHCXPUSHAX ; 参数送堆栈CALLFAR PTR CHECKMOVDL,CHARMOVAH,2INT21HPOPAX ;统计个数在AL中,个数不能超过一位16进制数MOVDL,ALANDDL, 0FHCMPDL,9JBENEXTADDDL,7 NEXT:ADDDL,30HMOVAH,2INT21H ;显示统计个数MOVAH,4CHINT21H MCODE ENDS SCODE SEGMENT ASSUME CS:SCODE CHECK PROC FARPUSHBPMOVBP,SPMOVSI,BP+10MOVCX, BP+8MOVAX, BP+6XORAH, AH AGA
28、IN:CMPAL,SIJNENEXT1INCAH NEXT1: INCSILOOPAGAINMOVAL, AHMOVBP+10,AXPOPBPRET4 CHECK ENDP SCODE ENDS END START实验3.2(1)编写一个子程序,将主程序设定的内存中字符串的小写字母转换成大写字母并显示出来.主程序S33用另一个模块编写。EXTRN DNTOUP:FAR PUBLIC STRING1,STRING2 DATA SEGMENT STRING1 DB 'thIs is A book','$' STRING2 DB 80 DUP(?) DATA ENDS
29、 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX CALL FAR PTR DNTOUP MOV AH,4CH INT 21H CODE ENDS END START;DNTOUP.SM为子模块的文件名 PUBLIC DNTOUP EXTRN STRING1:BYTE,STRING2:BYTE CODE SEGMENT DNTOUP PROC FAR ASSUME CS:CODE MOVBX,0 CYCLE: MOVAL,STRING1BX CMPAL,24H ;是否是STRING1结尾 JZDONE ;是&q
30、uot;$",转DONE CMPAL,61H ;是小写字母吗? JBNEXT ;不是转NEXT CMPAL,7AH JANEXT SUBAL, 20H ;转为大写字母 NEXT: MOVSTRING2BX,AL INCBX JMPCYCLE DONE: MOVAL,'$' MOVSTRING2BX,AL ;补一个$ MOVDL,0DH MOVAH, 2 INT21H MOVDL,0AH INT21H ;显示回车换行 LEADX, STRING1 MOVAH,9 INT21H ;显示源串内容 MOVDL,0AH MOVAH,2 INT21H ;回车换行 MOVDX,OF
31、FSET STRING2 MOVAH,9 INT21H ;显示转换后的大写串 RET DNTOUP ENDP CODE ENDS END DNTOUP(2)编写一个子程序,将主程序S34指定的字符所在的地址返回给主程序,字符串与主程序在同一个模块。;S34.ASM为主模块程序名 EXTRN FINDC:FAR PUBLIC STRN DATA SEGMENT STRN DB 'LINK DISPLAY SUBROUTING$' ADDR DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOV
32、DS,AX MOVAH,1 INT21H CALLFAR PTR FINDC MOVADDR, DI MOVAH,4CH INT21H CODE ENDS END START;FINDC.ASM为子模块程序名 PUBLIC FINDC EXTRN STRN:BYTE CODE SEGMENT ASSUME CS:CODE FINDC PROC FAR START: LEADI,STRN AGAIN:CMPBYTE PTRDI,'$' JZDONE CMPAL,DI JNZNEXT DONE1:RET NEXT:INCDI JMPAGAIN DONE:MOVDI,0FFFFH ;
33、找不到返回0FFFFH JMPDONE1 FINDC ENDP CODE ENDS END START实验4S4利用pc机键盘,编写一个读入并显示键盘输入的演示程序。该程序只接受常规字符(包括回车键及退格键),对特殊功能键不进行处理。在程序中设置这些特殊功能键对应0编号即可,凡是检测到键位编号为0值时,均忽略对它们的处理。有键按下时,送出的扫描码的D7位为0时,当键抬起时,扫描的码D7位为1,以判定键是否被按下。PUBLIC SCANTAB,BUFFER,BUFPT1,BUFPT2 ,KBFLAGSTACK1 SEGMENTDB 256 DUP(?)STACK1 ENDSDATA SEGMEN
34、TBUFFERDB 16 DUP(0) ;定义10个字节的键盘缓冲区BUFPT1DW 0 ;指向键盘缓冲区的起点,头取BUFPT2DW 0 ;指向键盘缓冲区的终点,尾存;注意当BUFPT1=BUFPT2时,表明缓冲区空KBFLAGDB 0PROMPTDB '-kbd_io program begin -',0DH,0AH,'$'SCANTABDB 0,0,'1234567890-=',8,0 DB 'QWERTYUIOP',0,0DB 'ASDFGHJKL',3BH,27H,0DHDB 'ZXCVBNM,.
35、/',0DB 20H,0,0,0,0,0,0,0,0,0,0,0,0,0;由于不同键盘按键及分布各不相同,因此在调试时可能产生按键和显示有差异 DB '789-456+1230.'EVEN OLDIP9 DW ? OLDCS9 DW ? DATA ENDS EXTRN KBINT: FAR ;外部引用说明 CODE SEGMENT ;主程序段 ASSUME CS:CODE ,DS:DATA START:MOVAX,DATAMOVDS,AX;建立自行设计的中断服务程序,写自行设计的中断处理程序入口偏移量到矢量表中CLI ;关中断,以防引起混乱MOVAX,3509H ;取类
36、型9的中断向量INT21HMOVOLDCS9,ESMOVOLDIP9,BXPUSHDSLEADX,KBINTMOVAX,SEG KBINTMOVDS,AXMOVAX,2509H ;设置类型9的中断向量INT21HPOPDSINAL,21HANDAL,0FDH ;允许定时器和键盘中断的控制字送8259OUT21H,ALLEADX,PROMPT ;在屏幕上显示-kbd_io program begin -MOVAH,9 INT21H STI ;开中断;程序功能:读键盘并显示字符 FOREVER: CALL KBGET ;读缓冲区字符 TESTKBFLAG,80H ;如果输入任意功能键,则使KBFL
37、AG=80,退出 JNZENDINT PUSHAX CALLDISPCHAR ;显示接收字符 POPAX CMPAL,'A' JZENDINT ;输入A结束程序 CMPAL,0DH ;是回车符吗? JNZFOREVER ;不是再接收 MOVAL,0AH CALLDISPCHAR ;是,换行 JMPFOREVER ;接收下一行字符 ENDINT:MOVDX ,OLDIP9 MOVAX ,OLDCS9 MOVDS,AX MOVAH,25H MOVAL,9 INT21H MOVAH,4CH INT21H;KBGET1取缓冲区字符->(返回) KBGET PROC NEAR PU
38、SHBX CLI MOVBX,BUFPT1 CMPBX,BUFPT2 JNZKBGET2 ;缓冲区不空,转KBGET2,取字符 CMPKBFLAG,0 JNZKBGET3 STI ;开中断 POPBX JMPKBGET ;当输入缓冲区为空,且没有按键时循环等待 ; 取缓冲区字符 KBGET2:MOVAL,BUFFER+BX ;取缓冲区字符 INCBX ; 首指针加1 CMPBX,16 ;到缓冲区尾吗? JCKBGET3 ; 未到,转,KBGET3 MOVBX,0 ;到,指向缓冲区首 KBGET3:MOVBUFPT1,BX ;保护首指针 POPBX ;恢复BX寄存器 RET KBGET ENDP
39、 ;CHAR字符显示子程序 DISPCHAR PROC NEAR PUSHBX MOVBX,0 MOVAH,0EH INT10H POPBX RET DISPCHAR ENDP CODE ENDS END START;S41;KBINT键盘中断处理程序EXTRN SCANTAB:BYTE,BUFFER:BYTE,KBFLAG:BYTE,BUFPT1:WORD,BUFPT2:WORDCSEG SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CSEGPUBLIC KBINTKBINT PROC FARPUSHBXPUSHAX;读键盘数据,并发确认信号INAL,60H ;读8255A 口,即键盘扫描码PUSHAXINAL,61H ;为置确认信号ORAL,80H ;置键盘确认信号OUT61H,AL ;置PB7位并送键盘ANDAL,7FH ;恢复键盘确认信号,亦即选通信号OUT61H,AL;将接收的扫描码译为ASCII码POPAXTESTAL ,80H ;检查是否按下?最高位为0或为1,分别表示键是按下还是放开JNZKBINT2 ;键抬起放弃本次输入MOVBX ,OFFSET SCANTABXLAT ;查表找对应ASCII码CMPAL,0 ;是有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年超市季节性促销员劳动合同3篇
- 二零二五版智能家居砌墙装修承包合同范本2篇
- 二零二五版3海上货物运输合同-海上货物运输事故处理及赔偿协议2篇
- 二零二五版综合性博士后研究人员聘用合同书3篇
- 二零二五版物联网技术培训服务合同样本2篇
- 二零二五年度版权买卖合同(图书)5篇
- 二零二五版劳动合同法下社保购买期限及权益保障协议3篇
- 二零二五年度餐厅线上线下融合推广承包合同2篇
- 二零二五年网络广告投放合同封面素材2篇
- 二零二五版电影IP授权与赞助合同3篇
- 税前工资反算表模板
- 广东省深圳市2023年中考英语试题(含答案与解析)
- MOOC 电工学(电气工程学概论)-天津大学 中国大学慕课答案
- 2019级水电站动力设备专业三年制人才培养方案
- 室内装饰装修施工组织设计方案
- 洗浴中心活动方案
- 送电线路工程施工流程及组织措施
- 肝素诱导的血小板减少症培训课件
- 韩国文化特征课件
- 抖音认证承诺函
- 清洁剂知识培训课件
评论
0/150
提交评论