河南农业大学10级电子时钟汇编语言实验报告.docx
《河南农业大学10级电子时钟汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《河南农业大学10级电子时钟汇编语言实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
河南农业大学10级电子时钟汇编语言实验报告
姓名
成绩
LL
GKF
GS
河南农业大学
课程设计报告
题目:
电子时钟显示设计
课程:
微型计算机原理
专业:
电子信息工程
班级:
10电信
(1)班
学生姓名:
LLGKFGS
学号:
指导教师:
ZJH
完成日期:
2012.12.30
机电工程学院
目录
第一章前言………………………………………………………………………………………3
1.1实习目的…………………………………………………………………………………3
1.2实习要求………………………………………………………………………………3
1.3设计所需设备……………………………………………………………………………3
第二章软件系统介绍……………………………………………………………………4
2.1DOS及BIOS功能调用……………………………………………………………………4
2.2DOS及BIOS功能中断的用途和好处……………………………………………………4
2.3DOS及BIOS功能中断的调用方法………………………………………………………4
2.4介绍中断技术……………………………………………………………………………4
第三章系统介绍…………………………………………………………………………………5
3.1流程图……………………………………………………………………………………5
3.2程序设计原理……………………………………………………………………………5
第四章实习设计分析……………………………………………………………………………7
第五章系统实现………………………………………………………………………………8
5.1程序源代码清单及详细注释…………………………………………………………8
5.2实验结果…………………………………………………………………………………13
第六章总结……………………………………………………………………………………14
参考文献…………………………………………………………………………………………14
第一章前言
1.1实习目的
汇编语言是面向机器的程序设计语言。
在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码。
这样用符号代替机器语言的二进制代码,就把机器语言变成了汇编语言。
汇编语言能够最大限度的发挥硬件的性能。
本次实习主要是为了了解定时/计数器和中断的使用。
掌握微机常用的输入输出方式及接口技术。
掌握一定的汇编语言,增强自己动手的能力。
掌握程序设计的一般方法和步骤,能调试和修改程序。
1.2实习要求
根据实习的要求,可知需要设计的计算机时钟模拟显示程序是基于汇编语言的WINDOWS应用程序设计,程序运行成功后,页面出现数字式的时钟。
首先在数据段开辟一显示缓冲区,用来存储系统时间。
调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。
分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。
调用DOS字符串显示功能将时间显示出来。
并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。
由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。
时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再跳回到初始位置,再显示,由此循环下去。
程序的最后还设计一了个按“ESC”键就退出的功能,采取了判断键值的方法。
为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。
本程序具有很强的扩展功能,我们可以在此基础上进行一些输入、输出扩展,显示的扩展,比如可以做成计时器,并设计一个精美的运动的图形界面,时间到了会自动调用PC喇叭发出报警声等等。
。
。
但是由于时间的原因,所以只做了核心的部分,这不得不说是一个遗憾。
此模拟时钟外观简洁明了,功能和实际运用到的时钟的基本功能一样,用起来非常方便、快捷。
1.3设计所需设备
PC机emu8086模拟仿真软件
第二章软件系统介绍
一、DOS及BIOS功能调用
系统软件中提供的功能调用有两种,一种称为DOS功能调用(也叫低级调用)。
用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INTn来实现。
另外,用户程序也不必与这些服务程序代码连接,因为这些系统服务程序在系统启动时已被加载到内存中,程序入口也被放到中断向量表中。
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及时处理各种软硬件故障。
计算机在运行过程中,往往会出现事先预料不到的情况或出现一些故障,如电源掉电、存储出错,运算溢出等等。
计算机可以利用中断系统自行处理,而不必停机或报告工作人。
第三章系统介绍
(一)流程图
(二).程序设计原理:
调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间
显示时的调用。
分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。
调用DOS字符串显示功能将时间显示出来。
并调用屏幕I/O中断,定位光标的起始位置,结合着将时间显示在我们预先定义好的位置上。
由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。
时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再跳回到初始位置,再显示,由此循环下去。
程序的最后还设计一了个按“ESC”键就退出的功能,采取了判断键值的方法。
为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。
本程序具有很强的扩展功能,我们可以在此基础上进行一些输入、输出扩展,显示的扩展,比如可以做成计时器,并设计一个精美的运动的图形界面,时间到了会自动调用PC喇叭发出报警声等等。
但是由于时间的原因,所以只做了核心的部分,这不得不说是一个遗憾。
本设计借用EMU8086仿真平台。
第四章:
实习设计分析
(一)程序原理:
程序先调用系统时间,然后将返回的二进制数转化成ASCII码,再通过dos显示功能显示出来,并通过循环不断刷新显示的时间。
在二进制转化成ASCII码的过程中,我进一步地了解到,在转化过程中,二进制数首先转化为双四位的BCD码,再将高四位低四位分别相加30H,从而转化为ASCII码,此时要对照书本的附录了解电脑cup如何将ASCII码的信息转换成显示字符。
(二)时间刷新:
我们的程序是不断对显示屏进行刷新的,所以我们调用了bctd程序,这是一个精确的计时程序,计数时间约为1秒,然后我们用了jmpdisplay指令,刷新显示屏,从而达到时间的每秒显示。
(三)屏幕显示:
开始做完程序的时候由于采用了光标定位的方法,发现运行了程序后显示光标不停地在不同的位置上跳动,严重影响了程序的可看性。
检查了解到光标的跳动跟程序的刷新频率还有人眼的视觉残象成影原理有关,只要系统的刷新频率大于1/25秒,那么人眼就会认为图象在改变,这跟电影为什么要设成25帧/秒的播放速率的原理是一样的。
这样一来,就必须设计一较为精确的延时程序来改善画面的显示了,只要不让屏幕刷新得太快就可以打到要求,具体的显示时间是通过延时程序里的DX值决定的,通过调整DX的值,我们发现当DX等于04FF的时候显示效果是最好的。
(四)系统退出:
开始本程序是使用了DOS中断的键盘功能调用,可是当加了比较跳转指令后整个程序就停了在那里,最后换成了键盘I/O功能调用,问题得到解决。
5
第五章:
系统实现
一、程序源代码清单及详细注释
;name:
ELECTRONICCLOCK
;designbylianglonggongshuaigaokefan
datasegment
mess1db'PressESCbuttontoquit',0ah,0dh
db'',0ah,0dh
db'',0ah,0dh
db'',0ah,0dh
db'ELECTRONICCLOCK',0ah,0dh
db'**********',0ah,0dh
db'**********',0ah,0dh
db'HenanAgriculturalUniversity',0ah,0dh
db'designbylianglonggongshuaigaokefan',0ah,0dh
db'',0ah,0dh
db'',0ah,0dh
db'','$'
mess2db'',0ah,0dh,'$'
t_buffdb20;在数据段开辟一时间显示缓冲区
dataends
stacksegment
db100dup(?
)
stackends
codesegment
assumecs:
code,ss:
stack,ds:
data
main:
callclear;调用清屏子程序
display:
;----------------------------时间显示部分--------------
movax,data
movds,ax
movbx,offsett_buff;送t_buff的偏移地址到BX
movah,2ch;调用DOS时间调用功能,功能号:
2cH,小时,分钟,秒数分别保存在CH,CL,DH中
int21h
moval,ch;小时数设定
movah,0
callbctd;调用进制转换子程序
pushax
andal,0f0h;选取al高四位
movcl,4;设置右循环的次数
rolal,cl;右循环
oral,30h;加30h得到ACSII码
mov[bx],al;将得到的结果送到t_buff缓冲区
incbx;BX自加1,指针指向下一个缓冲区的下一个地址
popax
andal,0fh;选取低四位,道理同上
oral,30h
mov[bx],al;将转换后的低四位值送入缓冲区的第二个地址
incbx
;----------------------------------------------------------
moval,':
';显示分号
mov[bx],al
incbx
;-------------------------------------------------------
movah,2ch
int21h
moval,cl;分钟数设定
movah,0
callbctd
pushax
andal,0f0h
movcl,4
rolal,cl
oral,30h
mov[bx],al
incbx
popax
andal,0fh
oral,30h
mov[bx],al
incbx
;-------------------------------------------------------------------------
moval,':
';显示;号
mov[bx],al
incbx
;-------------------------------------------------------------------------
movah,2ch;秒设定
int21h
moval,dh
movah,0
callbctd
pushax
andal,0f0h
movcl,4
rolal,cl
oral,30h
mov[bx],al
incbx
popax
andal,0fh
oral,30h
mov[bx],al
incbx
;----------------------------------------------------------------------
moval,'$';将字符串的结束位送至显示缓冲区的最后一位
mov[bx],al
;------------------------------------------------------------------------
pushbx;置光标位置,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BX
movah,2
movbh,0
movdh,11
movdl,33
int10h
popbx
leadx,t_buff;送t_buff偏移地址到DX,并调用DOS显示功能,功能号为9
movah,9
int21h
pushbx;置光标位置
movah,2
movbh,0
movdh,0
movdl,0
int10h
popbx
leadx,mess1
movah,9
int21h
pushbx;置光标位置
movah,2
movbh,0
movdh,17
movdl,21
int10h
popbx
leadx,mess2
movah,9
int21h
;-----------------------------
calldelay1
movah,1;按任意键结束,调用键盘I/O中断功能号1,获取键值到AL
int16h
cmpal,1bh
jzquit;是ESC键的话就跳转
jmpdisplay
quit:
movah,4ch
int21h
ret
;-------------------------------
bctdprocnear;二进制转BCD码子程序
;AX输入参数
;AX输出参数,存放调整过的BCD码
;
movdx,ax
movax,0
movcx,16;设循环次数
bctd1:
clc;清进位标志C
rcldx,1;通过进位的循环右移
adcal,al;带进位加法
daa;加法的十进制调整
xchgal,ah;交换高,低八位
adcal,al
daa
xchgal,ah
loopbctd1;循环,次数保存在CX里
ret
bctdendp
;-------------------------------------------
clearprocnear
pushax;入栈保护现场
pushbx
pushcx
pushdx
movax,0600h;ah=06(滚动)al=00(全屏空白)
movbh,6ah;背景颜色(6),绿色前景(a)
subcx,cx
movdx,5f5fh
int10h
popdx;出栈恢复现场
popcx
popbx
popax
ret
clearendp
;-----------------------------------------
delay1PROC;精确延迟时间子程序
MOVDX,04ffh;循环次数
up:
XORCX,CX
a:
NOP
LOOPa
DECDX
JNZup
RET
delay1ENDP
;----------------------------
codeends
endmain
二、实验结果
点击运行后,出现运行结果如下:
第六章总结
心得体会:
经过以上步骤,课程设计所要求设计的电子钟显示设计软件便成功完成了,它能显示数字式的时钟,并且能设置初值和时钟进制。
整个页面简洁清晰,方便用户读取,且操作简捷,符合课程设计中的各项要求。
通过这次课程设计,我们对日常生活中司空见惯的时钟的工作原理有了一个比较深入的了解,将书本中的知识更好地与实际生活中的应用结合在了一起。
通过这次微机原理课程设计学到了很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
而且我第一次感受到在写一个程序的时候,一定要事先把程序原理方框图画出来的重要性。
在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
本次课程设计的过程中遇到了很多问题,比如时间走得太快、光标的位置无法定位等等。
对每个问题的解决都是一种对知识的重新整理和考察。
我更加感到愉悦的,此次的课程设计锻炼了我的编程能力。
到此为止,我们接近两周的课程设计也告一段落。
通过这次课程设计,使我认识到理论与实际相结合的重要性,对课本上的只是在实际生活中的运用也有了进一步的了解,同时基本上能够掌握汇编语言编程中编程的步骤,可以说是从中受益匪浅。
通过本次课设我也学到很多课堂上学不到的调试知识。
很感谢学校给我们提供了这么好的学习机会,感谢老师的指导,从老师的身上学到了对知识真正严谨细致的态度,让我受益匪浅。
参考文献:
[1]周佩玲,彭虎傅,忠谦.微机原理与接口技术.电子工业出版社.2007
[2]朱金均,麻新旗.微机原理及应用技术(第二版).机械工业出版社.2005
[3]沈美明,温冬婵.IBM-PC汇编语言程序设计.清华大学出版社.1993
[4]邵玉祥.汇编语言程序设计.科学出版社.2005
[5]冯博琴,吴宁.微型计算机原理及接口技术(第二版).清华大学出版社.