您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 微型计算机原理与接口技术第五版(中国科学技术大学出版社)第4章
4-4DOS系统功能调用和BIOS中断调用和所有的计算机一样,微型计算机的硬件环境必须在操作系统的管理下,才能进行工作。缺少操作系统的计算机,即所谓裸机,是一个无生命的壳体。微机上所配的磁盘操作系统(DiskOperatingSystem)简称DOS或MS-DOS。DOS向用户提供了许多命令及系统功能,其中命令有内部命令,如DIR,TYPE,CD等,用户可以在DOS提示符下键入这些命令来使用。另外有外部命令,如PRINT、XCOPY、FORMAT等,用户也可以键入它们的名称由磁盘调入内存执行。此外,DOS还具有对I/O设备管理及磁盘与文件管理的功能,它们一部分被固化在系统的ROM中,可作为ROMBIOS模块。另一部分存放在系统磁盘上,在系统启动时被装入内存,用户的应用程序及MS-DOS的大部分命令都将通过软件中断来调用它们。表4-6列出了DOS常用的软中断指令,主要有INT20H~INT2FH。调用这些软件中断时,只要给定入口参数,接着写一条中断指令INTn就可以了。软中断指令功能入口参数出口参数INT20H程序正常退出INT21H系统功能调用AH=功能号INT22H结束退出INT23HCtrl-Break处理INT24H出错处理INT25H读磁盘INT26H写磁盘INT27H驻留退出表4-6DOS常用的软中断命令第四章宏汇编语言程序设计一、DOS系统功能调用DOS系统功能调用分别实现设备管理、文件读/写、文件管理和目录管理等功能。每个子程序对应一个功能号,所有的系统功能调用的格式是一致的,按下面4步进行:(1)系统功能号送到AH寄存器;(2)入口参数送到指定寄存器中;(3)用INT21H指令执行功能调用;(4)根据出口参数分析功能调用执行情况。有些系统功能调用比较简单,不需要设置入口参数或没有出口参数。DOS系统功能调用的功能及入口/出口参数表,详细见附录。例4-502号功能调用,结果在屏幕上显示‘A’。MOVDL,‘A’MOVAH,2INT21H1.DOS键盘功能调用键盘提供了字符键、功能键和控制键。每个键都有对应的键值,即标准ASCII码值,通过DOS功能调用可读入键值到AL寄存器或存储器中,表4-7列出DOS键盘功能调用的有关命令。AH功能入口参数出口参数1从键盘输入一个字符,并在屏幕上显示,检查Ctrl-Break键AL=字符8键盘输入一个字符,无回显AL=字符6直接键盘输入/输出字符,不检查Ctrl-Break键DL=0FFHAL=字符7直接键盘输入/输出字符,无回显,不检查Ctrl-Break键AL=字符0AH输入字符串到内存缓冲区DS:DX=缓冲首址0BH检查键盘输入状态AL=0FFH有键入,AL=0,无键入0CH清键盘缓冲区,调用键盘输入功能AL=键盘功能号(1,6,7,8,A)表4-7DOS键盘功能调用(1)键入单字符DOS功能调用中1,6,7,8号功能调用都能完从键盘输入一个字符到AL寄存器,差别在1号和6号功能调用键入同时在屏幕上显示字符,8号和7号功能调用不回显。①1号功能调用:从键盘输入字符并显示,调用命令为:MOVAH,1INT21H执行上述命令后,系统扫描键盘等待有键按下,若有键按下,就将键值(ASCII码)读入到AL寄存器,先检查是否为Ctrl-Break键,若是就自动调用中断INT23H,执行退出命令,否则就将键值送AL寄存器并在屏幕上显示该字符。例4-51交互式程序中用户按下数字键1,2,3,程序转入相应的服务子程序,若按下其它键就继续等待。KEY:MOVAH,1;读入键值→ALINT21HCMPAL,‘1’;键值为‘1’吗?JEONECMPAL,‘2’;键值为‘2’吗?JETWOCMPAL,‘3’;键值为‘3’吗?JETHREEJMPKEY;其它键则继续等待按键ONE:┋TWO:┋THREE:┋②8号功能调用:从键盘输入字符但不回显,命令为:MOVAH,8INT21H它与1号功能类同,检查输入是否为Ctrl-Break键,但屏幕无显示。③6号功能调用:直接控制台输入/输出,命令为:MOVDL,0FFHMOVAH,6INT21H它可以从键盘输入字符,也可以向屏幕输出字符,并且不检查是否为Ctrl-Break键。当DL=0FFH时,表示从键盘输入,若标志位ZF=0,AL中为键值,若ZF=1,表示无键按下,AL中不是键值。DL≠0FFH时,表示屏幕输出。④7号功能调用:直接控制台输入/输出但无回显,命令格式为:MOVAH,7INT21H7号功能与6号功能调用相同,但屏幕不显示,并且不检查是否为Ctrl-Break键。(2)输入字符串0AH功能调用:能从键盘接收字符串到内存的输入缓冲区。要求预先定义一个内存缓冲区:①缓冲区的第一个字节指出能容纳的最大字符个数,由用户给出;②第二个字节存放实际输入的字符个数,由系统最后填入;③从第三个字节开始存放从键盘接收的字符,直到回车键结束。若实际输入的字符数大于给定的最大字符数,就会发出“嘟嘟”声,并且光标不再向右移动,后面输入的字符将丢失。若输入的字符数小于给定的最大字符数,缓冲区其余部分都填0。0AH功能调用时,要求将DS:DX指向缓冲区第一个字节。定义接收缓冲区BUFFDB100;用户定义最大字符数100DB;系统存放实际字符个数单元DB100DUP(?);定义100;个字节单元存放输入的字符串例4-52开辟一个缓冲区,从键盘输入一个字符串,将输入的字符数→CL寄存器,并将指针指向字符串的第一个字符。MOVAX,DATAMOVDS,AXMOVDX,OFFSETBUFFMOVAH,0AHINT21HMOVBX,DXMOVCL,[BX+1];去取实际输入字符数到CLADDDX,2;使指针指向第一个字符(3)检验键盘状态0BH功能调用:检验是否有键按下,若有键按下AL=0FFH,若没有键按下,AL=0,无论检测到是否有键按下,程序将继续执行下一条指令。例4-53检测键盘工作,若用户未按键,程序循环执行,若用户按下任何键,程序转去调用发声子程序。LOOP:MOVAH,0BHINT21HCMPAL,0FFHJNZLOOPCALLSOUND(4)清除键盘缓冲区0CH功能调用:先清除键盘缓冲区,然后执行AL中指定的功能,AL中可以指定1,6,7,8或0AH功能号,使程序在输入字符前将以前键入的字符清掉。例4-54MOVAH,0CHMOVAL,7INT21H2.DOS显示功能调用DOS显示功能调用能够显示字符或字符串,这些功能都自动向前移动光标,表4-8给出了DOS显示功能调用的有关命令。AH功能入口参数说明2显示一个字符,检验Ctrl-Break键DL=字符光标随字符移动6显示一个字符,不检验Ctrl-Break键DL=字符光标随字符移动9显示字符串DS:DX=串地址串以‘$’结束,光标随串移动(1)单字符显示①2号功能调用:2号功能调用实现将字符送到屏幕显示出来。它要求将要显示字符的ASCII码值送到DL寄存器中。MOVDL,‘%’MOVAH,2INT21H②6号功能调用:是直接控制台输入/输出调用,除前面谈到的键盘输入功能外,在DL不等于0FFH时,表示向屏幕输出。它要求将要显示字符的ASCII码值送到DL寄存器中。MOVDL,‘9’MOVAH,6INT21H(2)字符串显示9号功能调用:显示字符串,要求DS:DX指向串地址首址,并且字符串必须以‘$’字符为结束符。若要求显示字符串后光标自动回车换行,则在‘$’字符前再加上0DH(回车),0AH(换行)字符。例4-55在屏幕上显示‘HOWDOYOUDO?’字符串,且光标换行。MESDB‘HOWDOYOUDO?’,0DH,0AH,‘$’┋MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESMOVAH,9INT21H4-5程序设计方法前面几章已讨论了指令系统和汇编语言设计基础,而设计出一个好的程序不仅要能正常运行,完成要求的功能,还应该具有下列特点:(1)程序结构模块化,程序易读,易调试及维护。(2)执行速度快。(3)占用内存空间小。尤其是结构化设计,在程序复杂的情况下尤为重要。一般来说设计汇编语言源程序的基本步骤如下:(1)分析问题,抽象出描述问题的数学模型,并确定实现数学模型的算法。(2)绘制程序流程图,通常先画粗框图,在结构模块中再细画框图。框图一般有起始框,执行框,判断框和终止框。起始框终止框执行框判断框YN(3)分配存储空间及工作单元。分配数据段,堆栈段,代码段各在内存什么位置,各个寄存器主要起什么作用。(4)按流程图设计编写程序。(5)静态检查,上机调试。(6)程序运行,结果分析。在进行汇编语言源程序设计时,通常用到四种程序结构:①顺序结构;②分支结构③循环结构;④子程序结构。下面分别加以说明。一、顺序结构顺序结构的程序一般是简单程序,程序顺序执行,无分支,无循环,也无转移,图中没有判断框。例4-55内存中TABLE开始存放0~9的平方值,通过人机对话,当任给定一个数X(0~9),查表得X的平方值,放在AL中。(见程序流程图).MODELSMALL.386.STACK100H.DATATABLEDB0,1,4,9,16,25,36DB49,64,81BUFDB‘Pleaseinputonenumber(0~9):’DB0DH,0AH,’$’.CODE.STARTUP定义一个0~9的平方表格定义一个提示文本代码段开始,同时设置DS,SSMOVDX,OFFSETBUF;显示字符串MOVAH,9INT21HMOVAH,1;1号功能调用,键入数送AL中INT21HMOVAH,0;查表得键入数的平方值ANDAL,0FHMOVBX,OFFSETTABLEADDBX,AXMOVAL,[BX].EXIT0END显示提示文本读入按键值→AL查表得键入数的平方值二、分支结构1.分支结构一般情况下,程序顺序执行,但经常要求程序根据不同条件选择不同的处理方法,这就需要用到分支结构。执行框判断条件YN执行框单分支结构框图多分支结构框图执行框执行框执行框判断框例4-56编程实现以下函数:Y=X+3(X0)X-5(X≤0)核心代码如下:MOVAL,XCMPAL,0JGZHSHUSUBAL,5JMPOUTZHSHU:ADDAL,3OUT:MOVY,ALX0?X-5→YX+3→YYNX0?X-5→YX+3→YYN2.多分支有的分支结构为多分支,可以利用多个条件转移指令来实现,依次测试条件是否满足,若满足转入相应分支入口,若不满足继续向下测试,直到全部测试完。这种方法编程简单、直观,但运行速度慢,要依次检查才能进入要求的入口。例4-57有8个加工子程序,入口地址分别为P1,P2,…P8编程实现检测键盘输入命令,使系统分别转向8个加工子程序。(键值为1转向P1,键值为2转向P2,等等。)MOVAH,1INT21HCMPAL,’1’JEP1CMPAL,’2’JEP2┋1号功能调用,从键盘输入一个字符到AL中输入的字符与‘1’作比较;为‘1’则转向P1,否则继续判断。输入的字符与‘2’作比较;为‘2’则转向P2,否则继续判断。CMPAL,’8’JEP8JMPSTP1:…P2:…P3:…┋P8:…ST:HLT3.跳转表实现多分支利用跳转表实现多分支,就克服了上面的缺点,可以直接找到相应入口。利用这种方法要在存储器中先建立一个跳转表,表中包括每个分支的入口地址,跳转指令或关键字,利用此表就可以实现分支结构。(1)根据表中入口地址实现分支跳转表中存放了每个分支程序的入口地址,只要找到表地址,在将其内容取出,即可得到每个分支的入口地址。表地址=跳转表的首地址+偏移量P1低位P1高位P2低位P2高位┋P1P2┋┋代码段数据段BASEBASE+2开始取编号求表地址求偏移量分支转到相应的加工子程序图4-13跳转表在内存中的存放方法图4-14跳转表分支流程图例4-58将例4-57中程序改成用跳转表来实现:BASEDWP1,P2,P3,P4DWP5,P6,P7,P8┋定义跳转表MOVAH,1INT21HANDAL,0FH;屏蔽
本文标题:微型计算机原理与接口技术第五版(中国科学技术大学出版社)第4章
链接地址:https://www.777doc.com/doc-3178107 .html