您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 汇编语言第9章BIOS和DOS中断
第9章BIOS和DOS中断如何控制键盘的操作?输入并回显Movah,1Int21h输入不回显Movah,7Int21h如何知道按过什么键?是KeyDown,还是KeyUp?功能键F1—F12键如何使用?与CTRL、ALT及SHIFT键又如何使用?串输入操作:略屏幕显示方法单字符显示MOVAH,2MOVDL,’G’INT21H字符串显示MOVAH,0AHLEADX,STRINGMOVDS,SEGSTRINGINT21H如何在指定位置显示?如何选定字符颜色和背景颜色?BIOS功能调用、DOS模块I/O请求IBMDOS.COMIBMBIO.COMBIOS外设BIOS功能调用1.可不必了解硬件I/O接口的特性,直接用指令设置参数,然后中断调用BIOS中的程序2.编写的程序简洁、可读性好,而且易于移植DOS模块1.IBMBIO.COM:输入/输出设备处理程序,它提供了DOS到ROMBIOS的低级接口,完成将数据从外设读入内存,或把数据从内存写到外设去的工作2.IBMDOS.COM:包括一个文件管理程序和一些处理程序DOS中断和BIOS中断1.一些DOS中断和BIOS中断可执行同样的功能。也有些不同。2.BIOS比DOS更靠近硬件,但尽可能使用DOS功能。3.DOS中断能处理大多数的I/O,有些功能还没有提供BIOS中断类型•CPU中断类型•8259中断类型•BIOS中断类型•用户应用程序表9.1BIOS中断类型(1)CPU中断类型0除法错4溢出1单步5打印屏幕2非屏蔽中断6保留3断点7保留表9.1BIOS中断类型(2)8259中断类型88254系统定时器C保留(通讯)9键盘IRQ1D保留(ALT打印机)A保留E软盘B保留(通讯)F打印机表9.1BIOS中断类型(3)BIOS中断类型10显示器16键盘I/O11设备检验17打印机12内存大小18驻留BASIC13磁盘19引导14通讯1A时钟15I/O系统扩充40软盘表9.1BIOS中断类型(4)用户应用程序1B键盘Break1C定时器4A报警数据表指针1D显示器参量411#硬盘参量1E软盘参量462#硬盘参量1F图形字符扩充49指向键盘增强服务变换表表9.2DOS中断类型20程序结束26绝对盘写入21功能调用27结束并留在内存22结束地址28--2E保留给DOS23Ctrl_Break出口地址2F打印机24严重错处理30--3F保留给DOS25绝对盘读取DOS中断和BIOS中断的使用•设定一些参数•MOVAH,功能号N•MOVAL,子功能号M•调用DOS中断或BIOS中断9.1键盘I/O键盘及三种基本类型的键•三种基本类型的键1.字符键:如字母A到Z,数字0到9,%,$,#等2.扩展功能键:如Home,End,Backspace,Arrows,Return,Del,Ins,PgUp,PgDn以及程序功能键等。3.控制键:和其它键组合使用的控制键,如ALT,Ctrl和Shift。9.1.1字符码与扫描码--来源1.键盘上“按下”或“放开”一个键2.若键盘中断允许的(21H端口第1位=0),就会产生一个类型9的中断,并转入到BIOS的键盘中断处理程序。3.该处理程序从8255可编程序外围接口芯片的输入端口60H读取一个字节中断屏蔽寄存器几种码1、扫描码:是字节的低7位。最高位为0:表示键是“按下”状态获得通码最高位为1:表示键是“放开”状态获得断码2、通码:按下时,取得的字节,最高位为0。3、断码:放开时,取得的字节,最高位为1。键盘上的每个键都对应一个扫描码:从01(ESC)到83(DEL),或从01H到53H根据扫描码就能唯一地确定哪一个键改变了状态。4、字符码:BIOS键盘处理程序将取得的扫描码转换成相应的字符码字符码1.大部分键的字符码是一个标准的ASCII码2.没有对应ASCII码的键,字符码为03.例:ALT和功能键(F1--F10),字符码为09.1.2BIOS键盘中断•键盘操作:用类型16(键盘)中断•3个不同的功能:AH功能返回参数0从键盘读一字符AL=字符码AH=扫描码1读键盘缓冲区的字符如ZF=0AL=字符码AH=扫描码如ZF=1,缓冲区空2取键盘状态字节AL=键盘状态字节举例movah,0;从键盘读一字符int16h;类型16中断cmpal,3;字符是ctrl+c吗jzexit;thenexitmovah,2movdl,alint21h程序m900key.asmgo键盘状态字节•(功能)AH=2INT16H•可把表示键状态的字节回送到AL寄存器读取键盘状态字节•读取键盘状态字节的内容,并显示该字节的内容(十六进制)•程序:m901stat.asm9.1.3DOS键盘功能调用•DOS类型21H中断提供的键盘功能调用:AH功能调用参数返回参数1从键盘输入一个字符并回显在屏幕上AL=字符6读键盘字符DL=0FFHAL=字符(如果可取)AL=0(未准备好)7从键盘输入一个字符不回显AL=字符9.1.3DOS键盘功能调用(续)AH功能调用参数返回参数8从键盘输入一个字符,不回显,检测Ctrl_BreakAL=字符A输入字符到缓冲区DS:DX=缓冲区首址B读键盘状态AL=0FFH有键入AL=00无键入C清除键盘缓冲区并调用一种键盘功能AL=键盘功能号(1,6,7,8或A)(一)单字符输入-回顾GET_KEY:MOVAH,1;回显,检测ctl_BreakINT21HCMPAL,’Y’;按了‘Y’?JEYES;是,跳转到YESCMPAL,’N’;按了‘N’?JENO;是,跳转到NOJNEGET_KEY;否则,等待Y或N检测Enter(Return)键WAIT_HERE:MOVAH,7;不回显INT21HCMPAL,0DHJNEWAIT_HERE接收功能键或数字组合键•进行两次DOS调用–第一次回送00–第二次回送扫描码•例:程序显示出一个菜单,要求用户通过键入F1,F2或F3来选择l、2或3项,按其它键则产生错误信息•程序:(二)输入字符串-回顾•21H中断的功能A能从键盘读入一串字符并把它存入用户定义的缓冲区中•数据区定义的字符缓冲区如下:MAXLENDB50ACTLENDB?STRINGDB32HDUP(?)或array1db50,?,50dup(?)输入字符串的指令LEADX,MAXLENMOVAH,0AHINT21h328Iloveyou0dMAXLENdb50,?,50dup(?)存储格式:输入后(三)清除键盘缓冲区•INT21H的功能0CH能清除键盘缓冲区•然后执行如AL中指定的功能•AL=1、6、7、8或0AH•功能0CH的用法如下:MOVAH,0CHMOVAL,08HINT21H先清再输(四)检验键盘状态•DOS21H的功能0BH能检验一个键是否被按动–如果按下一个键,则在AL寄存器中放入0FFH–如没有按下键,则在AL中放00•无论哪种情况都将继续执行程序中的下一条指令9.2显示器I/O显示器的屏幕•划分成80列25行•屏幕的行号从0至24,列号从0到79•在这2000个(2580)网格位置上显示字符•屏幕上的每个网格位置称为一个“象素”。对应屏幕上的每个象素,存储器中都有一个相应单元,屏幕是“存储器映象”9.2.1字符属性•单色显示屏幕上的每个字符在存储器中由两个字节表示–一个字节保存字符的ASCII码–另一个字节保存字符的属性•字符的属性确定了每个要显示字符的特性:–字符是否闪烁显示,是否被加亮,是否反相显示单色显示的属性字节正常显示属性:07(二进制00000111)背景为黑色(000),前景为白色(111),闪烁位为正常(0),加强亮度位正常(0)一些典型的属性值二进制十六进制效果0000000000不显示000000010F0000011107000011110F0111000070白底黑字,反相显示1000011187黑底白字,闪烁11110000F0白底黑字,反相闪烁黑底白字,高亮度黑底白字,正常显示黑底白字,下划线单色显存•单色显示存储器容量为4K字节•存储区域:段地址为B000H,偏移地址0即:B000:0000H~B000:0F9FH彩色字符显示属性字节可选择:背景颜色和显示字符的前景颜色背景:8色000~111前景:16色0000~1111闪烁位BL:正常0,闪烁1亮度位I:正常0,加强1BLRGBIRGB闪烁背景前景显示存储器•MDA单色显示存储器:–存储区域:段地址为B000H,偏移地址0即:B000:0000H~B000:0F9FH•CGA、EGA、VGA显示存储器–注:各显示适配器起始地址可能不同•存储区域:段地址为B800H,偏移地址0000H–0页起始地址B800:0000H–1页起始地址B800:1000H–2页起始地址B800:2000H–3页起始地址B800:3000H屏幕上一个位置在显存中的偏移地址Char_offset=Page_offset+((row×width)+column)×byte其中:Page_offset:页偏移地址Width:80byte:2(字符显示)Column:列坐标row:行坐标9.2.2BIOS显示中断•中断类型10H•表9.8列出了部分显示操作及所用的寄存器1.控制光标2.读光标位置3.选择显示页4.清屏和卷屏、开窗口5.字符显示6.彩色和字符串显示1.控制光标•INT10H的功能1:•使光标显现或关闭、控制光标的大小(控制光标行的开始和结束)•光标行开始:CH的低4位(0~3),光标顶部•光标行结束:CL的低4位(0~3),光标底部•当CH的第4位为1时,光标不显现出来(关闭)•当CH的第4位为0时,光标在屏幕上显现出来•单色显示器的光标大小的范围从0~13•注:VGA13:14单色6:7INT10H的功能2•设置光标位置1.DH:光标新位置的行号2.DL:光标新位置的列号3.BH中必须包含被输出的页号•单色显示器,页号总是0例9.8设置光标光标开始行为5,结束行为7,设置在第5行第6列MOVCH,5;开始行为5MOVCL,7;结束行为7MOVAH,1;控制光标的大小INT10H;MOVDH,4;第5行MOVDL,5;第6列MOVBH,0;0页MOVAH,2;INT10H;2.读光标位置•10H的功能3:读光标位置•页号必须由BH指定•返回:光标位置的行号送给DH,列号送给DL,光标大小的参数填入CH和CL3.选择显示页•10H的功能5•AL定页号–0页起始地址B800:0000H–1页起始地址B800:1000H–2页起始地址B800:2000H–3页起始地址B800:3000H4.清屏和卷屏、开窗口•10H的功能6能使屏幕内容上卷指定的行•10H的功能7能使屏幕内容下卷指定的行•参数:–AL:上(下)卷的行数–左上角为:(CH,CL)–右下角为:(DH,DL)–BH:显示属性•全屏:AL=0,清屏功能例9.12清除窗口•清除左上角为(0,0),右下角为(24,39)的窗口,初始化为反相显示MOVAH,7MOVAL,0MOVBH,70H;反相MOVCH,0MOVCL,0MOVDH,24MOVDL,39INT10H开窗口、输入、卷屏•例9.13:在屏幕中间建立一个20列宽、9行高的窗口,然后把键入的内容在这个窗口显示出来。键入的字符将被显示在窗口的最下面一行,每当输入20个字符,该行就向上卷动,9行字符输入完后,顶端行的内容丢失•开窗口程序:m913wind.asm5.字符显示•10H的功能9和功能A都能把一个字符传送到显示屏幕,然后光标返回到它的初始位置•区别:1.AH=9的功能把字符及其属性输出到当前光标位置上2.AH=0AH的功能只输出字符,它的属性值就是这一位置上先前已具有的属性例9.14置光标、显示星号•置光标到0显示页的(20,25)位置,并以正常属性显示一个星号•程序:m914char.asm6.彩色和字符串显示•10H的功能9显示彩色字符,13显示彩色字符串•BL设置前景和背景的属性值•程序:m916colr.asm比较MOVdx,1023h;(10h,23
本文标题:汇编语言第9章BIOS和DOS中断
链接地址:https://www.777doc.com/doc-567 .html