北邮微原作业中断实验与编程.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微原第二次软件实验实验要求编写一程序,在显示器上显示时、分、秒。具体要求如下:借用计数器8253的Timer()作为中断源,通过8259A向CPU发中断,每10ms产生一次中断;在中断服务程序中管理刷新时、分、秒;输入文件名后清屏显示:Current time is : XX:XX:XX(时、分、秒键盘输入);当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。设计思路数据段定义四个字符串,分别用于显示程序功能、提示用户输入,显示当前时间以及错误格式输入提示。同时定义六个变量用于存储当前显示的的时、分、秒的十位及个位,一个变量count100用以中断计数;在BIOS功能调用中,令AH=6,设置窗口左上角、右下角行列位置使当前页上滚,从而实现程序一开始的清屏功能;提示用户输入起始时间时,需要对输入格式进行判断,严格要求输入在00:00:00至23:59:59,正确输入时则存入相应的变量中,输入任意键开始计时,错误时则屏幕显示输入错误,提示用户重新进行输入,若输入为“CTRL+C”时退出程序;利用8253作为中断源,输入控制字36H,时间常数为11932,使其选用通道0计数,产生频率100Hz的方波,即中断100次时间间隔为1s,时间刷新显示;8253中断源每中断一次,进入timer中断子程序,将其段基地址及段内偏移量存入中断向量表,利用8259向CPU发出中断;timer子程序会对中断次数进行判断,每中断满100次时根据当前时间进行相应的时、分、秒修改,若不满100次时直接退出中断;屏幕显示时将时、分、秒的十位和个位分别送人al中,在BIOS功能调用中令ah=14h,实现将al中的字符写到光标位置,并将光标进一,8次循环直到时钟完全显示,同时比对second,中断满100次时,即时间间隔1s时second变化,当检测到这一变化时重新进入disp刷新显示;在每秒变化需要刷新显示时,都先进行键盘输入判断,当有输入且输入为“ctrl+c”时,退出程序。程序流程主要程序流程图中断程序流程图源代码data segmentcount100 db100tenhour db0hour db0,:tenmin db0minute db0,:tensec db0second db0s1 db(00:00:00~23:59:59 Ctrl+C to exit key to start)$s4 dbStarting time is:$s2 db(Ctrl+C to exit)Current time is:$s3 db Error!,0dh,0ah,$data endsstack segment stack db256dup(0)stack ends;回车换行宏定义CRLF MACROmovah,02hmovdl,0dhint21hmovdl,0ahint21hENDMcode segmentassumeds:data,cs:code,ss:stack start:movax,data movds,axmoves,ax;清屏moval,0;整个窗口为空白movch,0;窗口左上角的行位置movcl,0;窗口左上角的列位置movdh,24;窗口右下角的行位置movdl,79;窗口右下角的列位置movbh,7;正常显示属性movah,6;当前显示页上滚功能调用号int10h;I/O中断调用begin:movdx,offset s1 movah,09h;程序提示int21hCRLFmovdx,offset s4 movah,09h;提示输入int21hmovbp,0;分输入正确后加一,跳转为秒输入判断movdi,offset tenhour movah,01hint21hcmpal,03hjnz goon1;读取第一位,不为ctrl+c则继续键入movah,4chint21hgoon1:movbl,0;第一位为0到2 cmpal,bljl tiaoban movbl,2cmpal,bljg tiaoban mov[di],al;存入tenhour movbh,alincdimovah,01hint21hcmpal,03hjnz goon2;读取第二位,不为ctrl+c则继续键入movah,4chint21hgoon2:cmpbh,2;如果第一位为2,则第二位为0到3 je tenhour2 movbl,0;第二位为0到9 cmpal,bljl tiaoban movbl,9cmpal,bljgerrormov[di],al;存入hourjmp nextchar tiaoban:jmperror;用于跳转tenhour2:mo

文档评论(0)

1112111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档