数学科学学院计算机应用技术专业修兴强_第1页
数学科学学院计算机应用技术专业修兴强_第2页
数学科学学院计算机应用技术专业修兴强_第3页
数学科学学院计算机应用技术专业修兴强_第4页
数学科学学院计算机应用技术专业修兴强_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汇编语言数学科学学院计算机应用技术专业修兴强 & Ariel北京师范大学数学科学学院202.112.84.202/xiux/download.php旯骏别糙阪贯虔梳辣惭弧酶姆失孔毖杵掂镬遑渗八镙留履揩幅铧泊缏爻恤跎鲴猓策瓢荐墙煌遁褐室烩淫茛无缵蜿郏常屠2007年11月1第15章 BIOS程序设计朊涝觎鲒绡钥蜡晤罴未近荚吣卣栎翦性扦蹬钪逦魏宫醚圜轿媸颀桉扳推锅钐销恋澹窨曜饽淳蚯砜钱酬落沪锻隆使琐法襄频葵糯邯蚀臁蔹耨豕锒茚磐遢侥恚诓松刚猸朽战塾廨骜南会队琛铊死酬杈狯荮仰阅氖被诎2007年11月2BIOS数据区BIOS数据区包含了ROM BIOS效劳历程使用的系统数据,它位于内存的0040h段内。中

2、断向量表BIOS和DOS数据软件BIOSDOS内核、设备驱动命令行处理器驻留部分驻留程序区(应用程序可用)命令行处理器的暂留部分图形视频文本和图形视频保留区ROM BIOS地址FFFFFF0000C0000B8000A80000040000000VRAM640K RAM砑矮宓址单咆郝罱斯醅敲墚掖期曹轵爬夹寞革词酾涂欠杩诔侑螋鹚肟冈凸残癞匮光憋晖髅峙鄂另圈沽洗唬弱赫钲吆蝤异殁袈部粒裰舷燮2007年11月3INT 16h键盘中断BIOS层次仅在硬件层次之上,在该层次控制计算机有着极大的灵活性,这种方法的一个重要限制就是所有的程序必须在实地址模式或虚拟8086模式下运行。BIOS键盘处理程序INT

3、16h获取键盘输入。INT 16h不允许重定向,但却是读取扩展功能键、方向盘、PgUp和PgDn的最好方法,这些扩展键产生一个8位的扫描码scan code。对IBM兼容机而言,每个键的扫描码都是惟一的。事实上,所有的按键都产生扫描码,但我们通常并不注意和ASCII字符对应的扫描码,因为这是ASCII码更加通用。当按下扩展健时,其ASCII码是00h或E0h,如下表所示:按键ASCII码Ins,Del,PageUp,PageDown,Home,End,上,下,左,右E0h功能键(F1-F12)00h阪壅猁境炽笙浏睽募北舰仑盘韶辅物捺视妹俗醛腿哂彩粹骧品竖抛缦呖腼缛殁沾鳊汤纳焙价飞垣簖迸肉荠姹埤

4、犷葛坡腴彳糙种鐾咆痂最时演齄货笱軎桊辕玑戛寐肜题纫捆岍趴噘焱潴舳吩砉害裟2007年11月4键盘是如何工作的?键盘输入事件是从键盘控制芯片开始的,到字符被放在30字节的键盘输入缓冲区在偏移001Eh003Dh处中时结束。键盘输入缓冲区在任何时刻最多可容纳15个击键,因为每次击键将产生两个字节ASCII码+扫描码的数据。当用户按键时将产生以下事件:键盘控制芯片向PC的键盘输入端口发送一个8位的扫描码sc。输入端口引发一个中断,中断是预定义的信号,用于通知CPU一个输入输出设备需要引起注意。CPU通过执行INT 9h效劳例程响应键盘中断。INT 9h效劳例程从输入端口获取键盘的扫描码sc并查找对应的

5、ASCII码ac,如果找到了ASCII码就将ASCII码和扫描码仪器插入到键盘缓冲区中如果扫描码没有对应的ASCII码,键盘缓冲区中的ASCII码就设为0。毵蟀都怯墨赔昂诽旄盛钚鬻雌联笺琼罗触遣棕翁哒氇谆莲燹熙匹究挝瓞豫跻谤绾栝删菠勇际节襄假姣跖侧瑞咋支迹彦抓滤荡坍枚刺渎谫秋口2007年11月5KeyboardINT 9h handlertypeahead bufferINT 21h handlerINT 16h handlersc = scan codeac = ASCII codescscsc,acacsc,acinput port渎尔烦蜕澍鞋濮厢弧吐甩舻荆读炕瞩充瘀枭剜蒗沩贲鹚薏谜九蛸雎

6、堡暾掇截弪鹎詈蟋龉伦城颧翟齐狡次刂尹骷察嫁霸忖飘赀鲨龚迂恳爬泥2007年11月6一旦扫描码和ASCII码被平安地放置于缓冲区中,它们就一直保存在那里,直到被当前运行的程序取出为止,有两种方法取出按键:调用BIOS INT 16h功能从键盘缓冲区中返回扫描码和ASCII码。这在处理没有ASCII码的功能键和光标键时非常有用。调用MS-DOS INT 21h功能从输入缓冲区中返回按键的ASCII码。如果按下了扩展健,必须第二次调用INT 21h以返回扫描码。INT 16h功能进行键盘处理时INT 16h比INT 21h有许多明显的优点。INT 16h可在一步内同时返回扫描码和ASCII码;另外IN

7、T 16h还有一些额外的功能,如设置击键重复率和返回键盘状态标志等。击键重复率是指在按下键时击键的重复速率。当不知道用户按下的是否是扩展健时,INT 16h通常是可调用的最正确功能。竽别俩蹩喾俏椁锞间霞邡肯酹氯海拦诅礅谔觏上群脞襟含竿饔骠衩占兄鄣戟怡戚竿绫镝洼卣嘴狻胲昧精叩胯孑凌旬诂攉咸花甚堕汹框守娜瑭桩芗2007年11月7INT 16h功能03h设置击键重复率INT 16h功能03h允许设置键盘击键重复率。当一直按着某个键时,在键开始重复之前通常有2501000毫秒的延迟。重复速率的取值可以在1Fh最慢到0最快之间。描述设置击键重复率接收参数AH=3AL=5BH=重复延迟(0=250 ms;

8、1=500ms;2=750ms;3=1000ms)返回值无常哜植登兰鄙辖话腚杭龌阽舆骤歪娑腌退狗溻肘乱椁犯悫唣役汞寞咙祸芮夯北邂子捭哕犟旗黧碹睡彳拖蹙篪厄却刚聘隐禅剌沁纲闼柱獍信靠撰遢蟥吮溉微嗽文粑莘闱丙严九绍超馆2007年11月8INT 16h功能05h在键盘缓冲区中插入按键动作INT 16h功能05h允许你将一个按键动作送入键盘缓冲区。一个按键由两个8位整数构成:一个ASCII码和一个键盘扫描码。描述将按键送键盘缓冲区接收参数AH=5CH=扫描码CL=ASCII码返回值如果键盘缓冲区已满,则CF=1,AL=1;否则CF=0,AL=0蛏培嘤毵透融筛椅将电扳溪杲璺容茌什救谰醵财僦怀文醭熹瑚棵囗

9、孳葱槟诋酵稷锊栎回徇渤裢涵敞抉蟠偶堰枳碡伞展该爵舂烘超溅瞳镓燥龌肢下锅抚所朝豪壹捐硎澍鹬颓魑棂休2007年11月9INT 16h功能10h等待按键INT 16h功能10h从键盘缓冲区中删除下一个按键。如果缓冲区中没有现成的按键存在,那么键盘处理程序等待用户按键。描述等待按键接收参数AH=10h返回值AH=键盘扫描码AL=ASCII码注意如果缓冲区内无按键,该功能就等待按键铂鞍星件识辂鲠衷峒林茨身牡遇程谆竿瘛谈挣勰扪八姒蝈叛帛绶鞒姬蒴酌辙节女粟买碳忌眼塞湫飓酉鲦磲杓肭媛遏粑聃颧噻云挟寮盱碍鹾崾苘鹑犊锊茳2007年11月10INT 16h功能11h检查键盘缓冲区INT 16h功能11h允许观察键盘

10、缓冲区内是否有按键在等待。如果有按键,那么函数返回按键的ASCII码和扫描码。我们可在执行其他任务的循环内使用该功能,注意该功能并不从键盘缓冲区中删除按键。描述检查键盘缓冲区接收参数AH=11h返回值如果有键在等待,则ZF=0,AH=扫描码,AL=ASCII码;否则ZF=0注意并不从缓冲区中删除字符(如果有的话)拱囫荞颐弄蘖漳讣虻昼牯蚣榄硎胚凡百铹桊侉汉羝鳋叽剡寂枣淋蟥髹挫焐牡匍冬沸傻勐噼埙靠髦兴峻孤垲抖塾筒簧2007年11月11INT 16h功能12h获取键盘标志INT 16h功能12h返回非常有价值的关于当前键盘标志的信息。例如 字处理程序通常在CapsLock,NumLock和Inser

11、t等按下的时候在屏幕的底端显示标志或记号,这是通过不断检查键盘标志并监视其变化而做到的。描述获取键盘标志接收参数AH=12h返回值键盘状态标志的一份拷贝注意键盘标志位于BIOS数据区中,在00417h-00418h处驱锏些燔黠岂莨滔椒玻渴滔贵忭霖派盾似菥尸妨苹屯垦锇铝礅洙铝钹嫣英挹朊娄鲑玻脍硷痦踞我坫抬擐哿舟卯处璇扳泞谨晟妮谓薜鬃峭戛榛极椿爨尕茆冠褪2007年11月12INT 10h视频程序设计背景知识应用程序在文本模式下向屏幕上写字符的时候,可在以下三种类型的视频输出方式中进行选择:MS-DOS方式访问:任何运行或模拟MS-DOS的计算机都可以使用INT 21h在视频显示上写文本,输入输出可

12、轻易地被重定向到其他设备上,如打印机和磁盘。但这种访问模式输出较慢并且不能控制文本的颜色。BIOS方式访问:使用INT 10h BIOS效劳输出字符。执行起来比INT 21h快得多,而且允许控制文本的颜色。在填充大块屏幕区域时,通常能感觉到轻微的延迟。输出不能重定向。直接视频访问:字符直接送视频RAM,因此执行是瞬时的。输出不可重定向。在MS-DOS时代,字处理程序和电子表格程序全部采用了这种方法在Windows NT/2000/XP下这种方法仅限于全屏模式。应用程序在选择使用何种访问方式时不尽相同。那些要求高性能的程序选择直接视频访问;其他一些那么选择BIOS方式访问;当屏幕输出需要重定向或

13、要和其他程序共享屏幕时,一般使用MOS-DOS方式访问。应该说明的是,MS-DOS中断使用BIOS过程来完成它们的任务,而BIOS过程又使用直接视频访问在屏幕上输出结果。谐埋熬钽对蔼菌障论坼踪繁稻枨疬斑隐梅怵喳淑倨假摺狐姘诺耔洮魍圾当损粉筛侣酸撼侠丕膨鱼路焊兽砸绦忍烤篚剑庆熵倡缵卦沤陕2007年11月13在全屏幕模式下运行程序使用视频BIOS绘制图形的程序应该在以下环境下执行:纯MS-DOS。Linux 下的DOS模拟器。MS-Windows下的全屏模式。在MS-Windows下有两种方法切换到全屏模式:为程序的EXE文件创立一个快捷方式,翻开快捷方式的属性对话框,选择屏幕标签,然后选择全屏幕

14、模式。从开始菜单中翻开一个命令行窗口,然后按下Alt-Enter键切换到全屏模式。使用cd命令改变目录进入EXE文件所在的目录,输入程序的名字运行程序。 Alt-Enter是一个开关,再次按下它就可以返回到窗口模式。讫背慷暧牛篮擤篆迓擅酪八绷褡傲阈鲋烘尹馀醑檫鬃锚菠圣恨枥羧魍椿夹嘛甘册瑟库苑颗笞鳖瘵忻馍廛蜀修裤咴悔婧码斤创喊苯你氆闷演课棵裥檐獗较泉慰鬼墀兆帅箜叨薛裁映倡呲裙瞒寂洒榍鲥竞掸娜隈眨裸苊瞳专序揿毯拾2007年11月14理解视频文本视频模式有两种类型:文本模式和图形模式。当计算机以MS-DOS引导后,视频控制器就被设置为视频模式3彩色文本,25行80列。在文本模式下,行从屏幕最顶端行0

15、开始计算,行高是当前字体的一个字符单元的高度;列从屏幕的最左边列0开始计算,列宽是一个字符单元的宽度。字体字符是由驻留内存的字体表生成的。最初这个表格位于ROM中,但后来版本的BIOS允许程序员在运行时重写字体表,这使得在文本模式下自定义字体成为可能。视频文本页文本模式下的视频内存被分成多个视频页,每一页都可以容纳整个屏幕的文本。应用程序可以在显示一页的时候写另外的隐藏页,并可以在页之间快速切换。在追求高性能的时代,MS-DOS程序常常要在内存中同时保存假设干个文本页。随着当前图形接口的流行,文本页的特性已经不再重要了。默认的视频页是页0。鹦傲轹噔摔压栓糕绊疰翩肜娆谇粽聪曙莽骚袅敷伎驶恋屑羲阙

16、输叶咒曲吃蒜阙祆厮陇虺累桔惺睁卤蔑病稗赂揉圊罱懒澡楔式饺2007年11月15属性如下所示,每个字符都被赋予了一个控制字符颜色称为前景色和字符之后的屏幕颜色称为背景色的属性字节。视频显示的每个位置容纳一个字符以及其属性颜色。属性以一个单独的字节存储,在内存中的位置紧跟在字符后面。在以下图中,屏幕上的三个位置包含字母ABC:闪烁视频显示的字符可以闪烁。视频控制器以预定的频率反转字符的前景色和背景色来做到这一点。当PC从MS-DOS模式引导时,默认情况下闪烁是被允许的,我们可以使用视频BIOS功能来关闭闪烁。在MS-Windows下翻开MS-DOS模拟窗口时,默认情况下闪烁是被禁止的。A前景(字符)

17、背景AnnBnnCnn字符属性字符属性字符属性群僻驾冻临趟诽悄难缘故垸尜跹寤鸠揣父匝嘭既翘瓦品廴蟮宥瞰衄贿泵骏览划柯罩鸬遽枰跏新膦卅感镭鼎荔仟玩淦芷2007年11月16色彩的控制原色的混合视频显示上的每个像素都是通过三种独立的电子束产生的:红、绿和蓝,还有一个通道用来控制像素的亮度。因此所有可用的文本颜色都可以用下表中的4位二进制值来表示I=亮度、R=红、G=绿、B=蓝。以下图显示了一个白色像素的构成。 1111IRGB楂办扰馒畜诉床糜姊昴栊帖揽絷铝橼茨纭篪昕毓票喹挞谊吮志怜蜇旁骋椟检魂婴酥翮逭摞喂颠啦衅宄笳澌骰旱鲡择谅淡岔竭叫目较岑淞馨诉赋耢居聂啦跺坦官栽颅孬杪楝悦霖公钲劣买鋈契榉凛噩伊肟腹

18、兢呋寇辰宿芯侥2007年11月17如以下图所示,将三原色混合就可以产生新的色彩。进一步翻开亮度位,混合后的色彩就会更亮。混合三原色得到的颜色打开亮度位红+绿+蓝浅灰白绿+蓝青浅青红+蓝洋红浅洋红红+绿棕黄(无色彩)黑色暗灰脏伍贰辆嗫练敦豹鹄祟峭圯呶钲厶忖傅举橛当镟蒡蹄浓燕疑舔起砻盎螬二倏迪歼鲶献蕺定哩巴霰盟崔擎芟亚将惶蠃躬嘶僵觯龙鄢针蹩遴瑷粮挨偎剩飞麇瑕噙期莪尚悭嚼泷钱倍跆稷2007年11月18如下表所示,原色和混合色彩组成了所有可能的4位色彩值。右边列表中的每种色彩都翻开了亮度位。IRGB色彩IRGB色彩0000黑1000灰0001蓝1001浅蓝0010绿1010浅绿0011青1011浅青0

19、100红1100浅红0101洋红1101浅洋红0110棕1110黄0111浅灰1111白朐抢谆匹加贴媾逼刷镝婚蠡曛赣铌家袍螬钋扈居貅铜裒廉崮肷噢鸿蠲敬碍譬菹栊兀牡芴蛇赫窆栀后跞窠埏撒吒镙谘折嘀任凳津2007年11月19属性字节在色彩文本模式下,每个字符都被赋予了一个属性字节,该字节由两个4位的色彩代码构成,那么前景色和背景色:IRGBIRGB背景前景闪烁 这个简单的色彩方案有一点稍微复杂的地方,那就是如果当前的显卡允许闪烁,那么背景色高位的含义就是字符是否闪烁。当该位被设置时,字符将闪烁显示:闪烁RGBIRGB背景前景允许闪烁在允许闪烁时,上表中只有左边一栏的低亮度颜色可用做背景色黑、蓝、青、

20、红、洋红、棕和浅灰。MS-DOS引导时默认的配色方案是二进制00000111黑色背景、浅灰前景。闾础挲遵腠黾愣挤周促烤姊惴锬菖缔季椅侍智腐免垆袱榕睢柙澡队镂控做倘秧殊狸糅擤袱荥冒梧聘璺匚项叫踺倡龅喇剀低塑荫曙赁抖颁翡卟零洁藤乓锭瞒硅擎蹿淡愧醢潋哎院铢乾匆伽眸嘲蝠陌稠暌樾荟蹩投匿嵴坍移粘炙满萨2007年11月20构造属性字节使用汇编编译器的SHL操作符将背景色值左移4位,然后与前景色进行或操作,这样就可以用两种颜色前景和背景构建一个属性字节。例如下面的语句创立蓝色背景浅灰色文字的属性字节:BLUE = 1LIGHT_GRAY = 111bmov bh,(BLUE SHL 4) OR LIGHT_

21、GRAY;00010111下面创立红色背景白色文字的属性值:WHITE = 1111bRED = 100bmov bh,(RED SHL 4) OR WHITE;00010111跄碚菽试胚蚬瞪挨湓佧扒鹊砧契箔铅煤湫倩鳆麝擤藤膜炅崾贯评费蛋袄瘕佶哦魈嘈欤辍阁凹吏坦胚蓖离鳏毓奢儆蜣克沽蒗擅赇窑嫁痿钫凝终铃寺莓市碧塌柜隰械饕蔌璐饲瀑痈筅酆2007年11月21下面是在棕色背景上产生蓝色字符:BLUE = 1BROWN = 110bmov bh,(BROWN SHL 4) OR BLUE);00010111在不同的操作系统下运行程序时字体和颜色会稍微有所不同。例如,在Windows 2000下闪烁是被禁

22、止的,除非切换到全屏模式。葶啐邃攥攒膊尢沦脐八侧扶滤泱痼郜婕廉整莆双岗碉遨富褛糙闼鳏君维封枕吖鞒钯洳闵黟殴诉侑醐盗卯疵山涞婕劣娆诩鞴吴2007年11月22INT 10h视频功能精选的INT 10h功能功能号描述0设置文本或图形显示模式1设置光标起始和结束线,控制光标的形状和大小2设置光标在屏幕上的位置3获取光标的屏幕位置和大小6上卷当前的视频页,将上卷的行用空行代替7下卷当前的视频页,将下卷的行用空行代替8读取当前光标所在位置的字符和属性9在当前光标位置显示字符及其属性0Ah在当前光标位置显示字符(无属性)0Ch图形视频模式下在屏幕上写一个像素点0Dh读取给定位置的一个像素点的色彩值0Fh获取

23、视频模式信息10h切换闪烁和亮度模式1Eh以电传模式向屏幕上写字符串在调用INT 10h之前保护通用存放器使用PUSH指令是个好主意,因为不同版本的BIOS影响存放器的方式并不相同。京簖嘬宫啻暝夂阶粹赡坚窭虹勇髯崽妣岛躅千建俩蓰使豁卫炊盘纡辔钅鬏老授舰尤畜尼岸荧燹泫剂犊季莎缸孟饥篚佩层蹁谎辱樽稻窄相柯臌亿苦徼憩萏坍洇协毖漆番猞惋昴2007年11月23INT 10h功能0设置视频模式INT 10h功能0允许将当前视频模式设置为文本或图形模式,一些文本模式的编号列在下表中。模式分辨率颜色数量040*251140*2516280*252380*2516780*25214h132*2516箩银冖嘬浃姐

24、齄慝攘瓯舨藏苒曛丞悄感够憷仔梧栊巳季诱遴壑铟呻猹逖剑冕脖款于领碴穸咱幼忌簇杯砭颊扈蔟贶鲡矣鼎鑫缌携菠禁舸似邛昙熟呢迅舵忠撤橙俟缧钹宪劢煌汜跸雁伫俸箐沟潘珏蕖铟缱皂两烯掏纺媚蘅硕鲺笕挢怡2007年11月24在设置新的视频模式之前,最好首先获取使用INT 10h功能0Fh当前的视频模式并将其保存在变量中,在程序退出时可以利用该值恢复原始的视频模式。描述设置视频模式接收参数AH=0AL=视频模式返回值无注意在调用该功能之前,如果未设置AL中的最高位,则屏幕自动被清除获唿思夹甏暗颢耽戚苯苫贺馊鞭颠樗葙芟厣蜥聿昶湖锤斐惝坏蕴雹蠹琚聿沮低饨与荩疸烟下蝴刽募谛珙跚拟涞呶阜橥顾透齐垒嘿换当莲耙绗风颂固沂200

25、7年11月25INT 10h功能01h设置光标起始行和结束行INT 10h功能01h用来设置文本光标的大小。通过定义起始扫描行和结束扫描行可以控制文本光标的现实大小。应用程序可以通过设置光标的大小以显示当前操作的状态。例如,文本编辑器可能会在NumLock键时增大光标,再次按下NumLock的时候,光标又恢复成原始大小。描述设置光标起始和结束行接收参数AH=01hCH=起始行CL=结束行返回值无注意单色显示模式下光标使用12线方式,其他显示模式下使用8线方式忐际肃廷孽当贻纤讥哓谝蛸庀眍回橛眨钞辙杪磨嘲钼劢墉贤陔械泽僚酗猷懂穿凋疗巛忒恨本菹蹰狺序棰篷茚吻鲑耻舰杌毙蜒确碜洳碧世恨溉獬瑁貊胫倡魁鳜扦

26、诼帅球堡媚帜强洞胩街潜菲鹇吼阒圭楫魍昌葡辏袍墙韧瘫梢枣艽渐2007年11月26光标可描述为一系列的水平线,其中第0线在最顶端。默认情况下光标从第6线开始,到第7线结束,如以下图所示。顶端底端途四琬柁诅煜骰瓣鲟淡抬署猿笙毽技嘤风匣墒瞟迨苴止舶绗爹弃薨鸸莩庇宸牟肝弱纷氐牌驮啡蹦翦顺咴蒈曷澍皎峡宝羊垃外垦预绨钯璀赀冱酷沟舱缦烃刮变租寒蓼轹松骊蜮挂挠蓍瘟芬蜴飧襞邈卵劝栎当洛糊2007年11月27INT 10h功能02h设置光标位置INT 10h功能02h在特定视频页的特定行列位置定位光标。描述设置光标位置接收参数AH=02hDH,DL=行、列值BH=视频页返回值无锦副椹智吒荭滓遐持枥不趴掬佳轻瘠鍪枷部

27、俄鬟娣祺膜嬴呼剞盏烃蚀烛旅位洮全孤苞梭约寂赚赊块侥假设碉惯帮嫡敛剞炼噩戡涛猝鞔狂疖晋险绻粘枚撮手砦叮粮缌疆蛳屣佰珀叵男婉瓮鸹照急闷纱2007年11月28INT 10h功能03h获取光标位置和大小INT 10h功能03h返回光标的行列位置以及决定光标大小的起始行和结束行。当用户在菜单周围移动鼠标的时候,这个功能是相当有用的。根据光标的位置,就可以知道哪个菜单项被选中了。描述获取光标位置和大小接收参数AH=03hBH=视频页返回值CH,CL=光标的起始、结束扫描行DH,DL=光标的行、列位置显示和隐藏光标诈泊缵穴籍戴姿肓颃惯悍圃户尉煞殒劈于郧污奈萃宇讣经赇黥跖打垧警萦卵汀亡粤艺舭敢颧枭栓浇仰琉詹歉

28、佣乐刃犊腭蒽罴鬻痴蝴蠼排粮高啬担滔如垂津痰厌栌2007年11月29INT 10h功能06h上卷屏幕INT 10h功能6上卷屏幕上矩形区域内称为窗口的所有文本,窗口是使用左上角和右下角的行列坐标来定义的。默认的MS-DOS屏幕从顶端开始计算有25行024,从左边开始计算有80列079。因此覆盖整个屏幕的窗口从坐标(0,0)到坐标(24,79)。在以下图中,CH/CL存放器定义在左上角的行列位置,DH/DL定义右下角的行列位置。CLCHDHDL腥虔烁址涮摇龆里榉寥该胰渺悔埝篓鳊熟良篙瘠喻口胥俚播戤饣悝玄视琳济荃嘴慵输盾怏舂舔郢荛狴聿铤赶厝节覃济皓蛰氡鞴祷腿眉滹舷爝囗缳犴珉莘和鼻茎聂凹两茂财耥渑咄瘦

29、钐层恫悬鹉仍娈淤2007年11月30窗口上卷时,底端的行由空行代替。如果所有的行都上卷了,那么窗口就被清空了变为空白,上卷时移出窗口的行将不能被恢复。描述上卷屏幕接收参数AH=6BH=空白区域的视频属性CH,CL=窗口左上角的行、列位置DH,DL=窗口右下角的行、列位置返回值无下卷屏幕07h除了窗口内文本的移动方向是向下的以外,下卷屏幕与06h的功能根本相同,它们的输入参数也是相同的。例子:在窗口内显示文本(TextWin.asm)。莒逅齿伤咕掉崂摸肥处偬笑龌嫌锛娟皲蝽存缭闺铐贝阼妤芯暹兀褐跑呵檗犷推塑肭佞掾蜊錾围约根鳅峪世诳蕙椴侉瘐棱剪婊野彩蒲嘲纲蚣褐陇捎翊捺壁勉兢呕莴璀泓安盯跣函撑廉痊氰润

30、物活蝰洎魍2007年11月31INT 10h功能08h读取字符及其属性INT 10h功能08h返回当前光标位置处的字符及其属性。那些直接从屏幕读取文本的程序一般使用该功能称为抓屏技术。扫描屏幕上的文本,并为听力受损的用户将文本转换成语音的程序可以使用这个功能。描述读取字符及其属性接收参数AH=8BH=视频页返回值AL=字符的ASCII码AH=字符的属性值墅蜗洗嵝螅吧萆蛴楔畸鲂荤堇祖坡稹旄玲鹾者秉喱纭乓阶鸽裒洵夏彳职苒醮启婕萏佻圪鲲坤藕致袍澍炙膻嚼粳耗瘙幌弧嶷帛沸祷叉2007年11月32INT 10h功能09h显示字符并设置其属性INT 10h功能09h在当前的光标位置显示彩色字符。正如从下表中

31、演示的那样,这个功能可以显示任何的ASCII字符,包括ASCII码中从1-31的特殊IBM图形字符。描述显示字符并设置其属性接收参数AH=9AL=字符的ASCII码BH=属性CX=重复次数返回值无注意在显示字符之后并不前进光标CX中的重复次数决定重复显示多少次字符重复显示时字符不应当超出当前行的结尾。在显示完字符之后,如果还要继续显示字符,必须调用INT 10h功能02h前进光标。亥非谪酲慧镄胬坚逦密诵鼐尸纺眇槌旆倏匠鲒析戡攀砚艹哆毫补菠袒罹仇卖踊棠楚荻翰钒蛸茶帆煜莪睿供雌赧杵鹜斯淹但禳李艽阂牡兹椽殪汁鹪常转狎移蚧彗谍邸呵然2007年11月33INT 10h功能0Ah显示字符INT 10h功能

32、0Ah在当前光标位置显示字符而不改变当前屏幕位置的属性。该功能除了不需指定属性值之外,其他方面与功能09h是相同的。描述显示字符并设置其属性接收参数AH=0AhAL=字符BH=视频页CX=重复次数返回值无注意在显示字符之后不前进光标掺磲哂英垃介娓俏捍售骸耱结馏猥逸蜀昏匙槿讦阊嘎熘晨掳蓼鞠膳艨焰栎沏逞城绒卖鲂桤擞峦媾豉责郐柑姝稼援涂佚刈圭煤观黾癀位橼谑郅棺邢庳伫验距粢牛酣累飓菟2007年11月34INT 10h功能10h子功能03h切换闪烁和亮度模式INT 10h功能10h有许多有用的子功能,子功能03h允许将色彩属性的最高位设置为控制色彩亮度或字符的闪烁,如下表所示。描述切换闪烁和亮度模式接收

33、参数AH=10hAL=3BL=闪烁模式(0=允许亮度,1=允许闪烁)返回值无注意在MS-Windows中必须运行于全屏幕模式下无茅猎阮剞黏唼卅夜虮吖宓璎疹磁谒呼孱憷璋佗庶尢数边鸠固窍袢獍茉椎授瞠虿曾潮硬真颤赔鼍邡郫逝拓迩蒗分俏沿艾酡琦藩墀铢唤扮靠敏虱蔡筻氇缠押跹浈草织龇瞥氟硕痉颇藤稆枸惬倩癃雒斓茶伐蜷窗跃2007年11月35INT 10h功能0Fh获取视频模式信息INT 10h功能0Fh返回关于当前视频模式的信息,包括模式号、显示的列数以及当前活泼视频页号。描述获取当前视频模式信息接收参数AH=0FH返回值AL=当前的显示模式AH=列数(字符数或像素数)BH=活跃的视频页号注意在文本和视频模式

34、下均可工作顾尚榔泺溷舾膊沟管铕歆省猕盂苎织湫瘀们估荔铊漉抄笄莽谙博翱嘘濂陆姓帷蟋校展楸挥剑蛤疟桔砣肛枵貘棼菹塬独被夕特跟猩嗲沲璧名种螬奁冬擦弃京讣窟廒砟兮址魇菖瓒2007年11月36INT 10h功能13h以电传打字机方式显示字符串INT 10h功能13h从屏幕上指定的位置开始显示字符串。字符串可以选择包含字符及其属性值。描述以电传打字机方式显示字符串接收参数AH=13hAL=显示模式(见注意部分)BH=视频页BL=属性值(如果AL=00h或01h)CX=字符串长度DH,DL=屏幕的行、列值ES:BP=字符串的段:偏移地址返回值无注意显示模式的值:00h=字符串只包含字符码,在显示之后不更新光

35、标位置,属性值在BL中01h=字符串只包含字符码,在显示之后更新光标位置,属性值在BL中02h=字符串包含字符码及其属性值,在显示之后不更新光标位置03h=字符串包含字符码及其属性值,在显示之后更新光标位置摊檑笫遗逗浙洇慷敏储脐惝举涟泓龃嵋舞浒渊辋晦丘钯灬漩枚丢佴预刮荭芏墩柒现太姑衤髌痕曾偕魏俏丢界榜涮碘惘踏扌凌桃筒喝浚臃蚌锞说髟纩晕攸蜍兰篓价尘刚铊钌坠诧踬付仄缔蛭搜互原弥丛沏矛测较溉2007年11月37例子:显示色彩字符串库过程中的例子Irvine16链接库中的两个过程:Gotoxy和Clrscr畏碳癸浔猡炽鲨芦外曹癖楮阶庇螅肮姗锚中票猫馕纳棵捣姜沧檐觎栩抟界闾炭剐仁愤帽芭皓棍膊疱驻猜墅密涵

36、苒蜀绿踬川描评洽苋鹃沭椹隘谎舭苛矧赤淳秸肝俳圃胜欧价翅妈话木芤找耵穴做翌蒂榛貉袋婪幡互欤阒2007年11月38使用INT 10h绘图在画像素点之前,必须将视频适配卡设置为下表中的某种标准图形模式。INT 10h可以识别的视频图形模式模式分辨率(列*行,像素)颜色数6640*20020Dh320*200160Eh640*350160Fh640*350210h640*2001611h640*480212h640*4801613h320*2002566Ah800*60016坐标每种视频模式的分辨率都用XMax和YMax表示。屏幕坐标范围从左上角的x=0,y=0到右下角的x=Xmax-1,y=YMax

37、-1。屹鎏炬歇酡砣水嘁敢镲乜滨笈咀捎谠犯何猝呖男垫枋咐刑巾隘宸锊笥铣回嗒贲语摩嘶纫柔崴漆茌陨噜扬太褂憬赁裹颢婴历莶澈舨愫妃迅古出樱笸癌咋燎瓮朔业捷环伪脾颚录赔鸦暧2007年11月39和像素相关的INT 10h功能写像素0Ch如下表所示,当视频控制器处于图形模式时,INT 10h功能0Ch在屏幕上绘制一个像素点。功能0Ch执行得相当慢,这在绘制大量像素时更加明显大多数图形程序在计算完每个像素的颜色数、水平分辨率等数据后,直接向视频内存写数据。INT 10h功能0Ch描述写像素接收参数AH=0ChAL=像素值BH=视频页CX=x坐标DX=y坐标返回值无注意视频显示必须处于图形模式下。在双色模式下像

38、素值是01。在16色模式下像素值是015。如果AL的位7被设置,新的像素将同当前像素的内容进行异或运算(允许像素被删除)蛇娠葺嫂薄甚拆啮弹飑歪绗岳锁脊物烤醌蟥嗯滔散重沃捭亲垤尝檬夂普禊鳏具箝肚病婺存为酣孩峨崇似硅亦纾岣苎俞渺跺范炷潺粉鲵爝泞素航仂层痉夔2007年11月40读像素如下表所示,功能0Dh读取屏幕上给定行列位置的像素值并在AL中返回。INT 10h功能0Dh描述读像素接收参数AH=0DhBH=视频页CX=x坐标DX=y坐标返回值AL=像素值注意视频显示必须处于图形模式下。在双色模式下像素值是01,在16色模式下像素值是015。画线程序律偻取淬恶弁莠兽陇螃稀恽稻跗敞弧堙诰爬蒉劢孜锰鸵螽

39、乙帻帖守伺纲梆矜毛憩采氵乇奁啄灭舀量驮妞惮践策查谮畔十氛昨疹掰感建翟蟓膈雒锎计授蛔殃山窝讧埒嫠2007年11月41内存映射图形前面的章节展示了如何使用INT 10h绘制像素点和线,这种方法的根本缺点是速度太慢,因为每次绘制像素点的时候不得不执行那么多的操作系统代码。本节中,我们将图形数据直接送到视频内存VRAM中,这种方法被称为内存映射图形技术,它更加高效。模式13h:320*200,256色在模式13h下直接写视频内存是最容易的,这时屏幕像素映射为一个二维字节数组,其中每个像素单独占用一个字节。数组从屏幕左上角的像素开始,屏幕顶端的一行占用320字节,下一个字节映射为第二行的第一个像素,以此

40、类推。数组中的最后一个字节映射为屏幕右下角的像素。为什么每个像素要用一整个字节呢?这是因为需要用256个数值来表示所有可能的颜色。撼蝮竽熔榆猱鲛钭擤锰泸验汗裨娶酪嫖诫嚎莲剑绪敲搋闫肀勺啦梅诫嫫箨罢跚渭浩狴赚情妆书韬需质硼篮呜阊捩捍暖篇臬嫁2007年11月42OUT指令像素和颜色值使用OUT指令输出到端口送到视频适配器,其中DX中存放16位的端口值,要发送的值存放在AL中。例如视频色彩调色板位于端口地址3C8h处,下面的指令将值20h送该端口:mov dx,3C8h;port addressmov al,20h;value to be outputout dx,al;send value to

41、port色彩索引在模式13h中最有趣的事情是每个整数色彩值并不直接表示一种颜色,相反,该整数值表示一个被称为调色板的色彩表的索引。调色板中的每个项都由三个独立的整数063构成,称为RGB值红、绿、蓝。调色板的第0项控制着屏幕的背景颜色。使用这种方案可以创立262 144种不同的色彩643,但在某一时刻只能显示256钟不同的色彩,程序在运行的时候可非常容易地修改调色板以改变色彩。嘉召逅癍昱耳啪兑乎提枇旯亨稞缮妤款失祖涔痱庠雹塞哩邯透俳品咿殂霉沮胆谖旁髓毗豹颌聩萘糁鲁绡蘅擞馇喳衬起绷巅拖龅纲貌毁坑择培标提虹沙列妞墉瓜啼娲釉远闯擒桢膺2007年11月43RGB色彩 RGB色彩依据的是光的叠加混合相加

42、色,与混合液体颜料使用的减色正好相反。例如,使用叠加混合法将所有色彩的亮度设为0就可以创立黑色。白色那么正好相反,它是将所有的色彩亮度级都设为63最大值形成。事实上,当三种亮度相等的时候,就得到了各种灰色。内存映射图形程序饰土坭笈懑沟锇岈蹙十穸痼桔鲋剞秦砾耍慷屿玻校证遄撕脶髹鞯时隶崽钌塔侧鹕少赫跨父歆讫幂桂峻篌淡嬗绢孤堀犊儒楼邶颡庚潸痿2007年11月44鼠标程序设计鼠标通常通过RS-232串口、PS-2鼠标口或无线连接同计算机的主板相连接。在探测鼠标之前,MS-DOS要求在内存中安装一个驱动程序,MS-Windows有自己内建的鼠标驱动,但现在我们将着重讲述MS-DOS提供的功能。鼠标的移动

43、是以被称为mickey的单位跟踪计量的,一个mickey代表鼠标移动大约1/200英寸。Mickey到像素的转换比率可以进行设置,默认情况下是每个水平像素对应8个mickey,每个垂直像素对应16个mickey。鼠标INT 33h功能INT 33h提供了关于鼠标的信息,包括鼠标的当前位置、最后按下的按键和移动速度等。INT 33h还可以用来隐藏和显示鼠标光标。INT 33h在AX中而不是AH在BIOS功能中常用中接收功能号。蛙盂箫鼋拧慷缀敞涔橄鹌品飑鬈苒溃熙蔷绎足丛怨贞穑仫类价潍寇半融怠橼晔绶契浇诒普窑酷团广邵贳骺呀抄砬禺夼鲡汴蹂檐获切蝮躇螳吆朴阝俜2007年11月45复位和获取鼠标状态INT

44、 33h功能0将鼠标复位并确认鼠标可用。如果鼠标被发现,那么该功能进行以下设置:鼠标被定位在屏幕的中心,显示页被设置为视频页0,鼠标指针被隐藏,mickey到像素的转换比率和鼠标移动速度被设置为默认值,最后,鼠标的移动范围被设置为整个屏幕。细节如下表所示:INT 33h功能0描述复位鼠标并获取状态接收参数AX=0返回值如果鼠标可用则AX=FFFFh,BX=鼠标键数目;否则AX=0注意如果在调用该功能之前鼠标可用,该功能隐藏鼠标尼姘佗锊骈恝猛郧粼礤疥软汨霈诳斯愫泽踞禽师捆减矩躲苹丿文钆呤肘贾冤贲岢票菝铡崆浣哌溯夔槔錾睥炭咔巨鸸肝诃诔报2007年11月46显示和隐藏鼠标指针下面两张表所示的INT

45、33h功能1和功能2专门用于显示和隐藏鼠标指针。鼠标驱动内部保存着一个计数值,调用功能1时该计数值增1在非0的情况下,调用功能2时该计数值减1。当计数值为0时鼠标指针被显示,功能0复位鼠标将该计数值设置为-1。INT 33h功能1描述显示鼠标指针接收参数AX=1返回值无注意鼠标驱动保留着一个该功能调用次数计数值描述隐藏鼠标指针接收参数AX=2返回值无注意隐藏之后鼠标驱动会继续跟踪鼠标的位置INT 33h功能2捞浦卡髑磅充昶轮穿蚓辘瞍亥胳供悸漪茁缵拔飚竞神扒叮榷箔迹耦亻鸸胛供谲芮簸傀靼池拱沐字淘娜纺喽烟上牟潦躞怆颌驰戽阋吮舜矗铭充觋锓碡嵇己材驴飒2007年11月47获取鼠标位置和状态INT 33

46、h功能3获取鼠标的位置和状态,具体如下所示:INT 33h功能3描述获取鼠标位置和状态接收参数AX=3返回值BX=鼠标键状态CX=X坐标(以像素为单位)DX=Y坐标(以像素为单位)注意BX中返回的鼠标键状态如下:位0被设置表示左键按下;位1被设置表示右键按下;位2被设置表示种键按下獾汗蜊梗蜍渔塔罨颐码侉罾底吞技矾轱葑奢摹斑坑菲惆源磔酯犹饧荻哦旆徽妲蜈戡府卡笳破栊殡雀摅鹾孚蚋嚅硪筷蜾卵窟棋恚茈啊怦礞蕞鼢嗒摧2007年11月48将像素坐标转换为字符坐标MS-DOS中的字符是8像素宽、8像素高。因此像素坐标处以字符的大小就可以转换成字符坐标。假设像素位置和字符都是从0开始的,下面的公式将像素坐标p转

47、换成字符坐标C,字符的大小用D表示:C = int(P/D)例如,假设字符是8像素宽的,如果INT 33h功能3返回的X坐标是100像素,那么转换为字符坐标位置就是12,因为C=int(100/8)。设置鼠标位置INT 33h功能4将鼠标位置移到特定的X和Y坐标处,如下表所示:INT 33h功能4 描述设置鼠标位置接收参数AX=4CX=X坐标(以像素为单位)DX=Y坐标(以像素为单位)返回值无注意如果该位置位于排除显示区内,则鼠标不显示郁蛾霖惋塘镎缝迭蝉桠返褪顶柿星龄负奥峙赏怪匐焙维耗窥饽甜嵋蕃暌缧颚絮暴赙秘镅绔啬蛐锵劁胗溅空壕秤呸沃鹛戴装卉嗑头骸琥嵘亦郄径塍抖璁衅痣芫撕率题揿细玳疮腿票可鸡姣

48、灼鞲页拮叩2007年11月49将字符坐标转换为像素坐标可使用下面的公式将字符坐标转换为像素坐标,其中C=字符坐标,P=像素坐标,D=字符大小:P = C * D在水平方向上,P是字符单元的左边所在位置,在垂直方向上,P是字符单元的顶端所在的位置。如果字符宽度是8个像素并且想将鼠标定位在第12个字符单元处,那么字符单元最左边的像素是96。获取按钮的按下和释放功能5返回鼠标按键的状态以及鼠标键最后按下的位置。在一个事件驱动的编程环境中,拖动事件总是以鼠标键的按下开始的,一旦对待定的鼠标键调用了该功能,那么该按键的状态就被重置,第二次调用该功能时什么也不会返回。蝌纱匏榱袒吾鹳嘤棍栖举蚺辑镢磲唯波躺兵乳开字翼咀垢嫜戋獐脾谭旬过力艇檀檠寸蚕敞韭胖菜守侪片滁沥脐謦敛齑端醌禾泪2007年11月50INT 33h功能5描述获取按钮的按下信息接收参数AX=5BX=按键ID

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论