您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > IBM-PC汇编语言程序设计(第二版)电子教案 第9章
●键盘I/O●显示器I/O●打印机I/O●串行通信口I/O第九章BIOS和DOS中断子程序调用主程序……CALLSUBP……子程序…………RETDOS/BIOS调用源程序……INTn……DOS/BIOS例行程序…………IRET实现机制不同BIOS和DOS基本调用调用方法:1、将调用参数装入指定的寄存器中;2、BIOS或DOS功能号装入AH;3、如需子功能号,把它装入AL;4、按中断号调用DOS或BIOS中断(INT);5、检查或取得返回参数。例:DOS调用:键盘输入,显示输出MOVAH,01;DOS功能号:键盘输入INT21H;DOS调用MOVCHAR,AL;返回参数:(AL)MOVDL,’A’;调用参数:输出字符MOVAH,02;DOS功能号:显示输出INT21H;DOS调用1.键盘I/O(1)BIOS键盘中断(INT16H)AH功能返回参数0从键盘读一字符AL=字符码,AH=扫描码1读键盘缓冲区的字符如ZF=0,AL=字符码,AH=扫描码如ZF=1,缓冲区空2取键盘状态字节AL=键盘状态字节字符数字键字符码为ASCII码功能键、控制键字符码为0对应一个扫描码(2)DOS键盘中断(INT21H)AH功能调用参数返回参数1从键盘输入一个字符并回显在屏幕上AL=字符6读键盘字符,不回显DL=0FFH若有字符可取,AL=字符,ZF=0若无字符可取,AL=0,ZF=17从键盘输入一个字符,不回显AL=字符8从键盘输入一个字符,不回显,AL=字符检测Ctrl-BreakA输入字符到缓冲区DS:DX=缓冲区首址B读键盘状态AL=0FFH有键入,AL=00无键入C清除键盘缓冲区,AL=键盘功能号并调用一种键盘功能(1,6,7,8或A)例:输入字符串到缓冲区STRINGDATASEGMENTMAXLENDB32MAXLENDB32,0,32DUP(?)ACTLENDB?MAXLENDB32,33DUP(?)STRINGDB32DUP(?)DATAENDSCODESEGMENT…LEADX,MAXLENMOVAH,0AHINT21H…CODEENDSEND32568H61H70H70H79H0DHMAXLENACTLENSTRING2.显示器I/O文本方式ASCII字符7654321076543210前景000=黑111=白亮度0=正常亮度1=加强亮度闪烁0=正常显示1=闪烁显示背景000=黑111=白单色属性76543210前景闪烁背景BLRGBIRGB16色属性(1)BIOS显示中断INT10H功能号AH=0,1,2,3,5,6,7,8,9,0AH,0EH13H(p.328)例:清除屏幕movah,6;屏幕初始化moval,0;全屏空白movbh,7;卷入行属性movch,0;左上角行号movcl,0;左上角列号movdh,24;右下角行号movdl,79;右下角列号int10h;BIOS调用定义窗口例:在品红背景下,显示5个浅绿色闪烁的星号。MOVAH,09;光标位置下显示MOVAL,’*’;显示字符MOVBH,0;显示页0MOVBL,0DAH;11011010(表9.7)MOVCX,05;显示次数INT10H;BIOS调用例:在屏幕上以红底兰字显示字符串:“WORLDSCENERY”STRINGDB‘WORLDSCENERY’;定义在ES段LEN_TRDW13┇MOVAL,3;80×25,16色文本方式MOVAH,0INT10HMOVBP,SEGSTRINGMOVES,BP;串地址ES:BPMOVBP,OFFSETSTRINGMOVCX,LEN_STR;串长度MOVDX,0;起始行列MOVBX,0041H;01000001(属性)MOVAL,1;子功能MOVAH,13H;显示字符串INT10H(2)DOS显示功能调用中断INT21HAH功能调用参数2显示一个字符(检验Ctrl-Break)DL=字符光标跟随字符移动6显示一个字符(不检验Ctrl-Break)DL=字符光标跟随字符移动9显示字符串DS:DX=串地址串必须以$结束,光标跟随串移动例:显示字符串MESSAGEDB‘Thesortoperationisfinished.’,13,10,’$’……MOVAH,9MOVDX,SEGMESSAGEMOVDS,DXMOVDX,OFFSETMESSAGEINT21H3.打印机I/O(p.336)INTAH功能调用参数返回参数21H5打印一个字符DL=字符17H0打印一个字符AL=字符AH=状态字节并回送状态字节DX=打印机号17H1初始化打印机DX=打印机号AH=状态字节回送状态字节17H2回送状态字节DX=打印机号AH=状态字节例:打印字符串TEXT(DOS)TEXTDB‘Hello,everybody!’COUNTEQU$-TEXT;COUNT=17……MOVCX,COUNTMOVBX,0NEXT:MOVAH,5MOVDL,TEXT[BX]INT21HINCBXLOOPNEXT例:打印字符串TEXT(BIOS)TEXTDB‘Hello,everybody!’COUNTEQU$-TEXT……MOVCX,COUNTMOVBX,0NEXT:MOVAH,0MOVAL,TEXT[BX]MOVDX,0;打印机号INT17HINCBXLOOPNEXT4.串行通信口I/O(1)DOS串行通信口功能(INT21H)AH功能调用参数返回参数3读字符AL=读入的数据4写字符DL=写入的数据(2)BIOS串行通信口功能(INT14H)AH功能调用参数返回参数0初始化串行通信口AL=初始化参数AH=通信口状态DX=通信口号AL=modem状态1向通信口写字符AL=所写字符成功:AL=字符DX=通信口号失败:AH=口状态2从通信口读字符DX=通信口号成功:AL=字符COM1=0,COM2=1失败:AH=口状态3取通信口状态DX=通信口号AH=通信口状态COM1=0,COM2=1AL=modem状态例1.从串行口输入字符MOVAH,3;读字符INT21H;DOS调用MOVCHAR,AL;(AL)=读入字符……CHARDB0例2.初始化COM1端口MOVAH,0;读字符MOVDX,0;COM1MOVAL,0C3H;4800,n,1,8INT14H;BIOS调用—END—
本文标题:IBM-PC汇编语言程序设计(第二版)电子教案 第9章
链接地址:https://www.777doc.com/doc-3920384 .html