资源描述:
《北邮微原作业中断实验与编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、微原第二次软件实验、实验要求编写一程序,在显示器上显示时、分、秒。具体要求如下:1)借用计数器8253的Timer()作为中断源,通过8259A向CPU发中断,何10ms产牛.一次中断;2)在屮断服务程序屮管理刷新时、分、秒;3)输入文件名后清屏显示:Currenttimeis:XX:XX:XX(时、分、秒键盘输入);4)当键入CTRL+C时,停止计时,返四系统,且系统正常运行不死机。二、设计思路1)数据段定义四个字符串,分别用于显示程序功能、提示用户输入,显示当前时间以及错误格式输入提示。同时定义六个变量用于存储当前显示的的时、分、秒的十位及
2、个位,一个变量countlOO用以中断计数;2)在BIOS功能调用中,令AH=6,设置窗口左上角、右下角行列位置使当前页上滚,从而实现程序一开始的清屏功能;3)提示用户输入起始时间时,需要对输入格式进行判断,严格要求输入在00:00:00至23:59:59,正确输入时则存入相应的变最屮,输入任意键开始计时,错谋时则屏幕显示输入错误,提示用户重新进行输入,若输入为“CTRL+C〃时退出程序;4)利用8253作为中断源,输入控制字36H,时间常数为11932,使其选用通道0计数,产生频率100Hz的方波,即中断100次吋间间隔为Is,吋间刷新显示;
3、5)8253小断源每屮断一次,进入timer中断子程序,将其段基地址及段内偏移量存入中断向量表,利用8259向CPU发出中断;6)timer子程序会对屮断次数进行判断,每屮断满100次时根据当前时间进行相应的时、分、秒修改,若不满100次时直接退出中断;7)屏幕显示时将时、分、秒的十位和个位分别送人al中,在BIOS功能调用中令ah=14h,实现将al中的字符写到光标位置,并将光标进一,8次循环直到时钟完全显示,同时比对second,中断满100次时,即时间间隔Is时second变化,当检测到这一变化时重新进入disp刷新显示;8)在每秒变化需
4、要刷新显示时,都先进行键盘输入判断,当有输入口输入为"ctrl+c〃时,退出程序。三、程序流程1)主要程序流程图2)中断程序流程图!1!源代码datasegmentcount100dblOOhourdbOJ:'tenmindbOminutedbO#1:1tensecdbOseconddbOsidb1(00:00:00〜23tenhourdbO:59:59nCtrl+Cntoexitkeytostart)$s4db1Startingtimeis:$1s2db1(HCtrl+CHtoexit)Currenttimeis:$s3db'Error!'f
5、0dh#0ahf'$'dataendsstacksegmentstackdb256dup(0)stackends;回车换行宏立义CRLFMACROmovahr02hmovdl#Odhint21hmovdl,Oahint21hENDMcodesegmentassumeds:datazcs:code,ss:stackstar仁:movax,datamovdszaxmoves,axmoval,0movch,0move1.0movdh,24movdl.79movbhf7;清屏;整个窗口为空白;窗口左上角的行位置;窗口左上角的列位置;窗口右下角的行位置;
6、窗口右下角的列位置;正常显示属性movah,6;当前显示页上滚功能调用号intlOhbegin:;I/O中断调川movdxzoffsetmovahz09hint21hS1;程序提示CRLFmovdxzoffsetmovah,09hint21hS4;提示输入movbp,0movdi,offsetmovahzOlhint21hcmpal,03hjnzgoonlmovah,4ch;分输入正确后加一,跳转为秒输入判断tenhour;读取第一位,不为ctrl+c则继续键入int21hgoonl:movbl,'0';第一位为0到2cmpal/blj1tia
7、obanmovblf12'cmpal#bljgtiaobanmov[di],al;存入匸enhourmovbh,alincdimovahzOlhint21hcmpal,03hjnzgoon2;读収第二位,不为ctrl+c则继续键入movahz4chint21hgoon2:cmpbhz'2';如果第一位为2,则第二位为0到3jetenhour2movbl,'0';第二位为0到9cmpal,blj1tiaobanmovbl,191cmpal,bljgerrormov[di]#al;Ahourjmpnextchartiaoban:jmperror;用
8、于跳转tenhour2:movbl,101cmpal■bljlerrormovblz131cmpal/bljgerrormov[di],alnextc