当前位置:文档之家› 河南农业大学-10级电子时钟(汇编语言)实验报告

河南农业大学-10级电子时钟(汇编语言)实验报告

姓名成绩LLGKFGS河南农业大学课程设计报告题目:电子时钟显示设计课程:微型计算机原理专业:电子信息工程班级: 10电信(1)班学生姓名: LL GKF GS学号:指导教师: ZJH完成日期: 2012.12.30机电工程学院目 录第一章 前言 (3)1.1实习目的…………………………………………………………………………………31.2实习要求 (3)1.3设计所需设备 (3)第二章 软件系统介绍 (4)2.1 DOS及BIOS功能调用 (4)2.2 DOS及BIOS功能中断的用途和好处 (4)2.3 DOS及BIOS功能中断的调用方法 (4)2.4介绍中断技术 (4)第三章 系统介绍…………………………………………………………………………………53.1流程图 (5)3.2程序设计原理 (5)第四章 实习设计分析 (7)第五章 系统实现………………………………………………………………………………85.1程序源代码清单及详细注释 (8)5.2实验结果…………………………………………………………………………………第六章总结................................................................................................参考文献 (14)第一章前言1.1实习目的汇编语言是面向机器的程序设计语言。

在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码。

这样用符号代替机器语言的二进制代码,就把机器语言变成了汇编语言。

汇编语言能够最大限度的发挥硬件的性能。

本次实习主要是为了了解定时/计数器和中断的使用。

掌握微机常用的输入输出方式及接口技术。

掌握一定的汇编语言,增强自己动手的能力。

掌握程序设计的一般方法和步骤,能调试和修改程序。

1.2实习要求根据实习的要求,可知需要设计的计算机时钟模拟显示程序是基于汇编语言的WINDOWS应用程序设计,程序运行成功后,页面出现数字式的时钟。

首先在数据段开辟一显示缓冲区,用来存储系统时间。

调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。

分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。

调用DOS字符串显示功能将时间显示出来。

并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。

由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。

时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再跳回到初始位置,再显示,由此循环下去。

程序的最后还设计一了个按“ESC”键就退出的功能,采取了判断键值的方法。

为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。

本程序具有很强的扩展功能,我们可以在此基础上进行一些输入、输出扩展,显示的扩展,比如可以做成计时器,并设计一个精美的运动的图形界面,时间到了会自动调用PC喇叭发出报警声等等。

但是由于时间的原因,所以只做了核心的部分,这不得不说是一个遗憾。

此模拟时钟外观简洁明了,功能和实际运用到的时钟的基本功能一样,用起来非常方便、快捷。

1.3设计所需设备PC机 emu8086模拟仿真软件第二章 软件系统介绍一、DOS及BIOS功能调用系统软件中提供的功能调用有两种,一种称为DOS功能调用(也叫低级调用)。

用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INT n来实现。

另外,用户程序也不必与这些服务程序代码连接,因为这些系统服务程序在系统启动时已被加载到内存中,程序入口也被放到中断向量表中。

DOS和BIOS功能调用,会使编写的程序简单、清晰,可读性好 而且代码紧凑,调试方便。

通过调用DOS系统的8好功能实现控制字符的输入,通过调用延时程序实现十分之一秒的定时。

通过调用DOS系统的2号功能实现光标定位,调用DOS系统的2号实现符号输出,通过调用DOS系统的9号功能实现字符串的输出。

二、DOS及BIOS功能中断的用途和好处DOS是PC机上最重要的操作系统,它和BIOS一样包括有近百个设备管理、目录管理和文件管理程序,是一个功能齐全、使用方便的中断例行程序的集合。

使用DOS操作比使用相应功能的BIOS操作更简易,而且对硬件的依赖性更少些。

BIOS是系统提供的基本输入输出例行程序,它包括系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块。

BIOS有两个基本用途:一是给不同系列的微处理器提供兼容的I/O服务,使程序员在编程时不必考虑不同型号机器的具体差别。

二是给程序员提供文件化的,直接对硬件进行操作的子功能,程序员可不必了解硬件操作的具体细节。

所以利用BIOS功能编写程序简单方便,可读性好。

三、DOS及BIOS功能中断的调用方法BIOS功能与DOS功能都是通过软件中断调用的。

在中断调用前需要把功能号装入AH寄存器,把子功能号装入AL寄存器,除此而外,通常还需在CPU寄存器中提供专门的调用参数。

一般地说,调用DOS或BIOS功能时,有以下几个基本步骤:(1)把调用参数装入指定的寄存器中;(2)如需功能号,把它装入AH;(3)如需子功能号,把它装入AL;(4)按中断号调用DOS或BIOS中断;(5)检查返回参数是否正确。

四、介绍中断技术简单来说,中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。

这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。

更具体地,我们定义CPU中断为这样一个过程:在特定的事件(中断源,也称中断请求信号)触发下引起CPU暂停正在运行的程序(主程序),转而先去处理一段为特定事件而编写的处理程序(中断处理程序),等中断处理程序处理完成后,再回到主程序被打断的地方继续运行。

一方面,有了中断功能,PC系统就可以使CPU和外设同时工作,使系统可以及时地响应外部事件。

而且有了中断功能,CPU可允许多个外设同时工作。

这样就大大提高了CPU的利用率,也提高了数据输入、输出的速度。

另一方面,有了中断功能,就可以使CPU及时处理各种软硬件故障。

计算机在运行过程中,往往会出现事先预料不到的情况或出现一些故障,如电源掉电、存储出错,运算溢出等等。

计算机可以利用中断系统自行处理,而不必停机或报告工作人。

第三章系统介绍(1)流程图清屏调用DOS中断取系统时间2进制转ACSII码将转换好的系统时间存入时间显示缓冲区显示时间与界面ESC键按下?调用延时子程序返回DOS程序结束YN(二).程序设计原理:调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。

分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。

调用DOS字符串显示功能将时间显示出来。

并调用屏幕I/O中断,定位光标的起始位置,结合着将时间显示在我们预先定义好的位置上。

由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。

时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再跳回到初始位置,再显示,由此循环下去。

程序的最后还设计一了个按“ESC”键就退出的功能,采取了判断键值的方法。

为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。

本程序具有很强的扩展功能,我们可以在此基础上进行一些输入、输出扩展,显示的扩展,比如可以做成计时器,并设计一个精美的运动的图形界面,时间到了会自动调用PC喇叭发出报警声等等。

但是由于时间的原因,所以只做了核心的部分,这不得不说是一个遗憾。

本设计借用EMU 8086仿真平台。

第四章:实习设计分析(一)程序原理:程序先调用系统时间,然后将返回的二进制数转化成ASCII码,再通过dos显示功能显示出来,并通过循环不断刷新显示的时间。

在二进制转化成ASCII码的过程中,我进一步地了解到,在转化过程中,二进制数首先转化为双四位的BCD码,再将高四位低四位分别相加30H,从而转化为ASCII码,此时要对照书本的附录了解电脑cup如何将ASCII码的信息转换成显示字符。

(二)时间刷新:我们的程序是不断对显示屏进行刷新的,所以我们调用了bctd程序,这是一个精确的计时程序,计数时间约为1秒,然后我们用了jmp display指令,刷新显示屏,从而达到时间的每秒显示。

(三)屏幕显示:开始做完程序的时候由于采用了光标定位的方法,发现运行了程序后显示光标不停地在不同的位置上跳动,严重影响了程序的可看性。

检查了解到光标的跳动跟程序的刷新频率还有人眼的视觉残象成影原理有关,只要系统的刷新频率大于1/25秒,那么人眼就会认为图象在改变,这跟电影为什么要设成25帧/秒的播放速率的原理是一样的。

这样一来,就必须设计一较为精确的延时程序来改善画面的显示了,只要不让屏幕刷新得太快就可以打到要求,具体的显示时间是通过延时程序里的DX值决定的,通过调整DX的值,我们发现当DX等于04FF的时候显示效果是最好的。

(四)系统退出:开始本程序是使用了DOS中断的键盘功能调用,可是当加了比较跳转指令后整个程序就停了在那里,最后换成了键盘I/O功能调用,问题得到解决。

5第五章:系统实现一、程序源代码清单及详细注释;name: ELECTRONIC CLOCK;design by lianglong gongshuai gaokefandata segmentmess1 db 'Press ESC button to quit ',0ah,0dhdb ' ',0ah,0dhdb ' ',0ah,0dhdb ' ',0ah,0dhdb ' ELECTRONIC CLOCK ',0ah,0dhdb ' ********** ',0ah,0dh db ' ********** ',0ah,0dhdb ' Henan Agricultural University',0ah,0dhdb ' design by lianglong gongshuai gaokefan ',0ah,0dhdb ' ',0ah,0dhdb ' ',0ah,0dhdb ' ','$'mess2 db '',0ah,0dh,'$'t_buff db 20 ;在数据段开辟一时间显示缓冲区data endsstack segmentdb 100 dup(?)stack endscode segmentassume cs:code,ss:stack,ds:datamain:call clear ;调用清屏子程序display: ;----------------------------时间显示部分--------------mov ax, datamov ds,axmov bx,offset t_buff ;送t_buff的偏移地址到BXmov ah,2ch ;调用DOS时间调用功能,功能号:2cH,小时,分钟,秒数分别保存在CH,CL,DH中int 21hmov al,ch ;小时数设定mov ah,0call bctd ;调用进制转换子程序push axand al,0f0h ;选取al高四位mov cl,4 ;设置右循环的次数rol al,cl ;右循环or al,30h ;加30h得到ACSII码mov [bx],al ;将得到的结果送到t_buff缓冲区inc bx ;BX自加1,指针指向下一个缓冲区的下一个地址pop axand al,0fh ;选取低四位,道理同上or al,30hmov [bx],al ;将转换后的低四位值送入缓冲区的第二个地址inc bx;----------------------------------------------------------mov al,':' ;显示分号mov [bx],alinc bx;-------------------------------------------------------mov ah,2chint 21hmov al,cl ;分钟数设定mov ah,0call bctdpush axand al,0f0hmov cl,4rol al,clor al,30hmov [bx],alinc bxpop axand al,0fhor al,30hmov [bx],alinc bx;-------------------------------------------------------------------------mov al,':' ;显示;号mov [bx],alinc bx;-------------------------------------------------------------------------mov ah,2ch ;秒设定int 21hmov al,dhmov ah,0call bctdpush axand al,0f0hmov cl,4rol al,clor al,30hmov [bx],alinc bxpop axand al,0fhor al,30hmov [bx],alinc bx;----------------------------------------------------------------------mov al,'$' ;将字符串的结束位送至显示缓冲区的最后一位mov [bx],al;------------------------------------------------------------------------push bx ;置光标位置 ,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BXmov ah,2mov bh,0mov dh,11mov dl,33int 10hpop bxlea dx,t_buff ;送t_buff偏移地址到DX,并调用DOS显示功能,功能号为9 mov ah,9int 21hpush bx ;置光标位置mov ah,2mov bh,0mov dh,0mov dl,0int 10hpop bxlea dx,mess1mov ah,9int 21hpush bx ;置光标位置mov ah,2mov bh,0mov dh,17mov dl,21int 10hpop bxlea dx,mess2mov ah,9int 21h;-----------------------------call delay1mov ah,1 ;按任意键结束,调用键盘I/O中断功能号1,获取键值到AL int 16hcmp al,1bhjz quit ;是ESC键的话就跳转jmp displayquit:mov ah,4chint 21hret;-------------------------------bctd proc near;二进制转BCD码子程序;AX输入参数;AX输出参数,存放调整过的BCD码;mov dx,axmov ax,0mov cx,16 ;设循环次数bctd1:clc ;清进位标志Crcl dx,1 ;通过进位的循环右移adc al,al ;带进位加法daa ;加法的十进制调整xchg al,ah ;交换高,低八位adc al,aldaaxchg al,ahloop bctd1 ;循环,次数保存在CX里retbctd endp;-------------------------------------------clear proc nearpush ax ;入栈保护现场push bxpush cxpush dxmov ax,0600h;ah=06(滚动)al=00(全屏空白) mov bh,6ah ;背景颜色(6),绿色前景(a)sub cx,cxmov dx,5f5fhint 10hpop dx ;出栈恢复现场pop cxpop bxpop axretclear endp;-----------------------------------------delay1 PROC ;精确延迟时间子程序MOV DX,04ffh ;循环次数up: XOR CX,CXa: NOPLOOP aDEC DXJNZ upRETdelay1 ENDP;----------------------------code endsend main二、实验结果点击运行后,出现运行结果如下:第六章总结心得体会:经过以上步骤,课程设计所要求设计的电子钟显示设计软件便成功完成了,它能显示数字式的时钟,并且能设置初值和时钟进制。

相关主题