收藏 分销(赏)

东南大学信息学院微机时钟实验.docx

上传人:精*** 文档编号:4496622 上传时间:2024-09-25 格式:DOCX 页数:14 大小:98.93KB
下载 相关 举报
东南大学信息学院微机时钟实验.docx_第1页
第1页 / 共14页
东南大学信息学院微机时钟实验.docx_第2页
第2页 / 共14页
点击查看更多>>
资源描述
东南大学信息学院微机时钟实验 微机实验报告 实验九 实验名称:时钟实验 院系:信息科学和工程学院 学号: 姓名: 实验时间:2016.5 一、 实验目的 1. 熟悉系统功能调用INT 21H的有关功能 2. 编写时钟程序 二、 实验任务 1.执行时钟程序时,屏幕上显示提示符“:”,由键盘输入当前时、分、秒值,即XX:XX:XX√,随即显示时间并不停计时。 三、 实验代码 DATA SEGMENT ;定义数据段 NUM DB 9 ;输入时间的最大长度,包含回车 DB ? ;实际输入时间长度 DB 9 DUP(?) ;开辟的长度 DATA ENDS STACK1 SEGMENT STACK ;定义栈段 DB 200 DUP(0) STACK1 ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV DL,':' MOV AH,2 INT 21H ;显示冒号,表明输入开始 MOV DX,OFFSET NUM MOV AH,0AH ;将ASCII码转换为16进制数 INT 21H MOV BX,OFFSET NUM+2 CALL ERR1 ;检查输入时间是否正确,若不正确,返回START AND AL,0FH MOV [BX],AL INC BX CALL ERR1 ;检查输入时间是否正确,若不正确,返回START AND AL,0FH MOV [BX],AL INC BX CALL ERR2 ;检查时分之间是否以:相隔,若不是,返回START INC BX CALL ERR1 ;检查输入时间是否正确,若不正确,返回START AND AL,0FH MOV [BX],AL INC BX CALL ERR1 ;检查输入时间是否正确,若不正确,返回START AND AL,0FH MOV [BX],AL INC BX CALL ERR2 ;检查分秒之间是否以:相隔,若不是,返回START INC BX CALL ERR1 ;检查输入时间是否正确,若不正确,返回START AND AL,[BX] MOV [BX],AL INC BX CALL ERR1 ;检查输入时间是否正确,若不正确,返回START AND AL,0FH MOV [BX],AL MOV BX,OFFSET NUM+2 CALL TOBCD ;调用转换BCD函数 MOV CH,AL CMP CH,24H ;若输入小时数大于等于24,重输 JAE START ADD BX,3 CALL TOBCD MOV DH,AL CMP DH,60H ;若输入大于等于60,重输 JAE START ADD BX,3 CALL TOBCD MOV DL,AL CMP DL,60H JAE START ;若输入秒数大于等于60,重输 AGAIN: CALL DELAY ;调用延时函数 MOV AL,DL ADD AL,1 DAA MOV DL,AL CMP AL,60H JNE DISPY ;比较秒数是否达到60,若没有,跳转DISPY MOV DL,0 MOV AL,DH ADD AL,1 DAA MOV DH,AL CMP AL,60H ;比较分数是否达到60,若没有,跳转DISPY JNE DISPY MOV DH,0 MOV AL,CH ADD AL,1 DAA MOV CH,AL CMP AL,24H ;比较小时数是否达到24,若没有,跳转DISPY JNE DISPY MOV CH,0 DISPY: MOV BX,OFFSET NUM MOV AL,0DH MOV [BX],AL INC BX MOV AL,0AH MOV [BX],AL INC BX MOV AL,CH CALL TOASC ;调用ASCII码转换函数 INC BX MOV AL,':' MOV [BX],AL INC BX MOV AL,DH CALL TOASC ;调用ASCII码转换函数 INC BX MOV AL,':' MOV [BX],AL INC BX MOV AL,DL CALL TOASC ;调用ASCII码转换函数 INC BX MOV AL,'$' MOV [BX],AL PUSH BX PUSH CX PUSH DX MOV DX,OFFSET NUM MOV AH,9 INT 21H ;显示字符串 MOV AH,06H MOV DL,0FFH INT 21H ;判断是否有按键按下,如果有,转至GO,即调用DOS中断 POP DX POP CX POP BX JNZ GO JMP AGAIN GO: MOV AH,4CH INT 21H ;调用DOS中断 TOBCD PROC MOV AL,[BX] SHL AL,1 SHL AL,1 SHL AL,1 SHL AL,1 OR AL,[BX+1] RET TOBCD ENDP ;转换为BCD码 err1 PROC ;定义错误1:输入时间不是数字 MOV AL,[BX] CMP AL,39H JA START CMP AL,30H JB START RET ERR1 ENDP ERR2 PROC ;定义错误2:时分秒没有用:表示 MOV AL,[BX] CMP AL,3AH JNE START RET err2 ENDP TOASC PROC ;ASCII码转换程序 MOV CL,AL SHR AL,1 SHR AL,1 SHR AL,1 SHR AL,1 ;AL右移四位 OR AL,30H MOV [BX],AL INC BX MOV AL,CL AND AL,0FH OR AL,30H MOV [BX],AL RET TOASC ENDP DELAY PROC ;延时程序 PUSH CX PUSH AX MOV AX,0FFFFH MOV CX,08FFFH G1: DEC AX JNZ G1 DEC CX JNZ G1 POP AX POP CX RET DELAY ENDP CODE ENDS END START 四、 实验结果 键入正确的时间,程序将进行计时 e.g.1 若没有键入正确的时间(超出时间表示范围或出现其他非法字符时),指针将会跳转至开头重新输入 e.g.2 e.g.3 五、 分析问题并解释原因 问题1:延迟时间很难掌握 问题2:在判断输入字符时,能判断“?”却不能判断“!” 原因:只考虑了大于数字ASCII码部分,没有考虑小于数字ASCII码的部分 六、 思考题 时钟实验中存在时间误差吗?若有误差,其来源于何处?如何进行误差校正? 答:存在误差。出栈入栈指令占用时钟周期,不同的CPU的主频不同,机器周期也会有一定的误差。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服