资源描述:
《PC汇编语言程序设计课件 第6章 系统功能子程序的调用.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章系统功能子程序的调用6.1DOS系统功能子程序的调用6.2BIOS功能子程序的调用习题六6.1DOS系统功能子程序的调用6.1.1DOS(INT21H)的常用功能调用1.01号功能——从键盘输入一个字符并显示其格式为:MOVAH,01HINT21H当程序执行到INT21H后,等待用户从键盘输入一个字符,将输入字符的码值装入AL寄存器,并在屏幕上显示该字符。若按下Ctrl-C组合键,则停止程序执行,返回DOS。1号功能不用入口参数,执行的结果在寄存器AL中。需要特别注意的是:AL寄存器中的值是输入字符的ASCII码值。例如,当用户按下数字键“1”时,AL中的值是31H,
2、程序中要想真正取得数字1,还需作(AL)-30H的处理。当用户输入一个字符后,机器自动执行INT21H下面的指令。和1号功能基本类同的还有7号功能、8号功能。其中,8号功能与1号功能的差别只是输入的字符不在屏幕上显示。7号功能与1号功能的差别,除了在屏幕上不显示输入字符外也不检查Ctrl-C组合键是否被按下。2.0AH号功能——从键盘输入一个字符串该功能要求在调用前,先在数据段中建立一个缓冲区,缓冲区的第一个字节用以存放缓冲区能输入的最大字符数(1~255个),该值由用户预先设定,第二个字节用以存放本次调用该功能时实际输入的字符个数(不包括回车键),并由DOS自动填入。用户真正
3、输入的字符串从第三个字节开始存放,直到输入回车键为止,而且回车键(0DH)是在字符串的最后面,也存入其中。因此,缓冲区的最大长度应是实际输入的字符个数(不包括回车键)加1。实际输入时,若输入的字符个数超过缓冲区的最大长度,则后面输入的字符被忽略,且响铃,直至输入一个回车键才结束。若输入的字符个数小于缓冲区的最大长度,则可用回车键结束本次输入。实际输入的字符个数(不包括回车键)仍由DOS自动填入第二字节。输入的字符串及回车键仍存放在从第三个字节开始的缓冲区内。另外,0AH功能要求将入口参数DS:DX的值分别指向缓冲区段基址和段内偏移地址。调用格式为:BUFCDB11DB?DB1
4、1DUP(?)MOVAX,SEGBUFCMOVDS,AX;缓冲区段基址送DSMOVDX,OFFSETBUFC ;缓冲区偏移地址送DXMOVAH,0AHINT21H……使用0A功能可输入字符串,输入的数字型字符串也作为字符串对待,若需要的是数字,则应在程序中再加以处理。例如要求输入131(十进制数),该功能输入的是“131”,即131的ASCII码。要得到数131,应分别将每个字符的ASCII码减去30H,然后百位乘100加十位乘10,然后再加个位,才能得到131这个数。3.2号功能——单字符的显示输出该功能将单个字符在显示器上输出,要求将要显示的字符预先装入DL
5、寄存器(可用字符形式或ASCII码形式)。调用格式为:MOVDL,′X′;X表示任何一个要显示的字符MOVAH,2INT21H或为:MOVDL,X;X表示要显示字符的ASCII码MOVAH,2INT21H4.9号功能——字符串的显示输出该功能将存放在数据区中以“$”字符为结束标记的字符串在屏幕上显示输出。调用该功能前先要将显示的字符串存放在数据区,将入口参数,字符串首地址的段基址和段内偏移地址要分别装入DS和DX寄存器中。若想将字符串分行显示,则也可以插入回车和换行(0DH,0AH)码。调用格式为:DISCHADB′OPENTHEDOOR.′,0AH,0DH,′O
6、K′,′$′MOVAX,SEGDISCHAMOVDS,AXMOVDX,OFFSETDISCHAMOVAH,9INT21H本例的输出为:OPENTHEDOOROK…9号功能除可以显示提示信息外,还可以显示计算结果,但计算结果须转换成ASCII码,存放在数据区内,最后加上“$”。例如,要显示运算结果(123)10,应将每位数加30H后依次存放在DISCHA开始的内存单元中,即DISCHADB31H,32H,33H,′$′。然后按前述调用格式编写程序,当程序执行9号功能调用后,屏幕上就会显示123。5.5号功能——单个字符的打印输出该功能将DL寄存器中的字符(或AS
7、CII码)送到打印机,打印输出。调用格式为:MOVDL,′X′MOVAH,5INT21H或为:MOVDL,字符X的ASCII码MOVAH,5INT21H打印往往是要求连续输出的,使用该功能时,只要选择循环程序和适当的寻址方式就能达到连续打印的目的。下例是连续打印字符串的程序段。PRINTDB′WELCOME′COUNTEQU$-PRINTMOVCX,COUNT;(CX)←待输出的字符个数MOVSI,0NEXT:MOVDL,PRINT[SI];