您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 东南大学信息学院微机时钟实验
微机实验报告实验九实验名称:时钟实验院系:信息科学和工程学院学号:姓名:实验时间:2016.5一、实验目的1.熟悉系统功能调用INT21H的有关功能2.编写时钟程序二、实验任务1.执行时钟程序时,屏幕上显示提示符“:”,由键盘输入当前时、分、秒值,即XX:XX:XX√,随即显示时间并不停计时。三、实验代码DATASEGMENT;定义数据段NUMDB9;输入时间的最大长度,包含回车DB?;实际输入时间长度DB9DUP(?);开辟的长度DATAENDSSTACK1SEGMENTSTACK;定义栈段DB200DUP(0)STACK1ENDSCODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVDL,':'MOVAH,2INT21H;显示冒号,表明输入开始MOVDX,OFFSETNUMMOVAH,0AH;将ASCII码转换为16进制数INT21HMOVBX,OFFSETNUM+2CALLERR1;检查输入时间是否正确,若不正确,返回STARTANDAL,0FHMOV[BX],ALINCBXCALLERR1;检查输入时间是否正确,若不正确,返回STARTANDAL,0FHMOV[BX],ALINCBXCALLERR2;检查时分之间是否以:相隔,若不是,返回STARTINCBXCALLERR1;检查输入时间是否正确,若不正确,返回STARTANDAL,0FHMOV[BX],ALINCBXCALLERR1;检查输入时间是否正确,若不正确,返回STARTANDAL,0FHMOV[BX],ALINCBXCALLERR2;检查分秒之间是否以:相隔,若不是,返回STARTINCBXCALLERR1;检查输入时间是否正确,若不正确,返回STARTANDAL,[BX]MOV[BX],ALINCBXCALLERR1;检查输入时间是否正确,若不正确,返回STARTANDAL,0FHMOV[BX],ALMOVBX,OFFSETNUM+2CALLTOBCD;调用转换BCD函数MOVCH,ALCMPCH,24H;若输入小时数大于等于24,重输JAESTARTADDBX,3CALLTOBCDMOVDH,ALCMPDH,60H;若输入大于等于60,重输JAESTARTADDBX,3CALLTOBCDMOVDL,ALCMPDL,60HJAESTART;若输入秒数大于等于60,重输AGAIN:CALLDELAY;调用延时函数MOVAL,DLADDAL,1DAAMOVDL,ALCMPAL,60HJNEDISPY;比较秒数是否达到60,若没有,跳转DISPYMOVDL,0MOVAL,DHADDAL,1DAAMOVDH,ALCMPAL,60H;比较分数是否达到60,若没有,跳转DISPYJNEDISPYMOVDH,0MOVAL,CHADDAL,1DAAMOVCH,ALCMPAL,24H;比较小时数是否达到24,若没有,跳转DISPYJNEDISPYMOVCH,0DISPY:MOVBX,OFFSETNUMMOVAL,0DHMOV[BX],ALINCBXMOVAL,0AHMOV[BX],ALINCBXMOVAL,CHCALLTOASC;调用ASCII码转换函数INCBXMOVAL,':'MOV[BX],ALINCBXMOVAL,DHCALLTOASC;调用ASCII码转换函数INCBXMOVAL,':'MOV[BX],ALINCBXMOVAL,DLCALLTOASC;调用ASCII码转换函数INCBXMOVAL,'$'MOV[BX],ALPUSHBXPUSHCXPUSHDXMOVDX,OFFSETNUMMOVAH,9INT21H;显示字符串MOVAH,06HMOVDL,0FFHINT21H;判断是否有按键按下,如果有,转至GO,即调用DOS中断POPDXPOPCXPOPBXJNZGOJMPAGAINGO:MOVAH,4CHINT21H;调用DOS中断TOBCDPROCMOVAL,[BX]SHLAL,1SHLAL,1SHLAL,1SHLAL,1ORAL,[BX+1]RETTOBCDENDP;转换为BCD码err1PROC;定义错误1:输入时间不是数字MOVAL,[BX]CMPAL,39HJASTARTCMPAL,30HJBSTARTRETERR1ENDPERR2PROC;定义错误2:时分秒没有用:表示MOVAL,[BX]CMPAL,3AHJNESTARTRETerr2ENDPTOASCPROC;ASCII码转换程序MOVCL,ALSHRAL,1SHRAL,1SHRAL,1SHRAL,1;AL右移四位ORAL,30HMOV[BX],ALINCBXMOVAL,CLANDAL,0FHORAL,30HMOV[BX],ALRETTOASCENDPDELAYPROC;延时程序PUSHCXPUSHAXMOVAX,0FFFFHMOVCX,08FFFHG1:DECAXJNZG1DECCXJNZG1POPAXPOPCXRETDELAYENDPCODEENDSENDSTART四、实验结果键入正确的时间,程序将进行计时e.g.1若没有键入正确的时间(超出时间表示范围或出现其他非法字符时),指针将会跳转至开头重新输入e.g.2e.g.3五、分析问题并解释原因问题1:延迟时间很难掌握问题2:在判断输入字符时,能判断“?”却不能判断“!”原因:只考虑了大于数字ASCII码部分,没有考虑小于数字ASCII码的部分六、思考题时钟实验中存在时间误差吗?若有误差,其来源于何处?如何进行误差校正?答:存在误差。出栈入栈指令占用时钟周期,不同的CPU的主频不同,机器周期也会有一定的误差。
本文标题:东南大学信息学院微机时钟实验
链接地址:https://www.777doc.com/doc-5070029 .html