七段码电子表显示程序 攀枝花学院数计院的学弟们下载吧.docx
《七段码电子表显示程序 攀枝花学院数计院的学弟们下载吧.docx》由会员分享,可在线阅读,更多相关《七段码电子表显示程序 攀枝花学院数计院的学弟们下载吧.docx(27页珍藏版)》请在冰豆网上搜索。
![七段码电子表显示程序 攀枝花学院数计院的学弟们下载吧.docx](https://file1.bdocx.com/fileroot1/2023-5/28/425d7969-3bbd-4c7d-ab77-14281de00724/425d7969-3bbd-4c7d-ab77-14281de007241.gif)
七段码电子表显示程序攀枝花学院数计院的学弟们下载吧
攀枝花学院
学生课程设计(论文)
题目:
七段码电子表显示程序
学生姓名:
游欢学号:
200910804044
所在院(系):
计算机学院
专业:
软件工程
班级:
2组
指导教师:
何老师职称:
讲师
2010年12月31日
攀枝花学院教务处制
攀枝花学院本科学生课程设计任务书
题 目
七段码电子表显示程序
1、课程设计的目的
通过本课程设计教学所要达到的目的是:
1、培养学生理论联系实际的设计思想,提高学生综合运用汇编语言课程的理论知分析问题、解决问题的能力。
2、通过查找、运用设计资料,完成工程设计所必备的基本训练。
3、使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
设计内容:
用电子表的形式显示系统时间。
以“时:
分:
秒”的形式显示时间。
设计思路:
数字0~9中的每一个数字用“|”和“—”字符组成的“七段”码图形表示,时与分、分与秒之间的两点用“▼”字符表示。
这些字符预先定义在数据段的字符图形里,利用BIOSINT1AH的2号系统功能调用,读出计算机系统的时间(为BCD码),置换成字符图形标中的图形字符显示。
本程序设计的关键是随着系统时间的变化,用字符组成的图形数字如何进行相应的变化。
方法是:
不停地读取系统时间并保存在寄存器中,将每次取出的时间显示并与前一次比较,先比较“秒”值,在不同的情况下(系统时间发生了增1的变化),则调用相应的图形字符显示,在不超过60秒的情况下,重复比较秒,然后再比较和显示“分”值与“小时”值。
程序流程图如图所示。
3、主要参考文献
[1]《汇编语言程序设计》,吴向军等,高等教育出版社,2002
[2]《IBM-PC汇编语言及程序设计》(第2版),沈美明等,清华大学出版社,2001
[3]《IBM-PC汇编语言及程序设计实验教程》,沈美明等,清华大学出版社,2001
[4]《汇编语言程序设计》,钱晓捷等,电子工业出版社,2000
[5]《汇编语言程序设计》,张志明等,重庆大学出版社,1997
4、课程设计工作进度计划
时间(天)内容安排
1分析设计准备
3编程调试阶段
1编写课程设计报告
指导教师(签字)
日期
年月日
教研室意见:
年月日
学生(签字):
接受任务时间:
年月日
注:
任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表
题目名称
七段码电子表显示程序
评分项目
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02
科学实践、调研
7
通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
5
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。
07
计算及计算机应用能力
5
具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名:
年 月 日
摘要
用七段码电子表显示程序系统时间,此程序设计的关键是随系统时间的变化,用字符组成图形数字如何进行相应的变化。
根据七段码电子表显示程序设计的要求,写出七段码电子表显示程序的源代码,画出程序运行的流程图,输入计算机进行运行,发现并找出其中的错误并加以修改,反复调试程序,直到得出正确结论为止。
通过对七段码电子表显示程序的设计,初步掌握汇编语言程序设计的方法,最后在总结此次设计程序的心得与体会。
关键词:
源代码,函数,BCD码,寄存器
1课程设计题目描述和要求
1.1问题提出及功能要求
1.1.1问题
如何用电子表的形式显示系统时间?
1.1.2功能要求
1)七段码电子表显示程序
2)菜单选择:
设置时,分,秒,开始,推出等
3)模拟七段码显示管显示时,分,秒
4)要求界面美
1.2运行环境
微型计算机(系统为Windows98/2000/XP)
1.3本课题涉及的知识点
1.3.1数据段
1)Disptime,Showtime显示时钟
2)定义0—9十个图形数字,以便模拟七段码显示时钟
1.3.2宏定义
1)Clear定义清屏宏
2)rowcol定义光标定位宏
3)crlf回车换行宏
4)display显示字符串宏
5)change计算时间宏
1.3.3函数
1)main主函数
2)paly主要完成显示七段码电子表显示
3)prog0到prog10完成七段码到一半显示的转换
4)moveshape显示七段码电子表
5)delay延迟函数
6)exit返回DOS函数
2算法设计
2.1设计思路
数字0~9中的每一个数字用“|”和“—”字符组成的“七段”码图形表示,时与分、分与秒之间的两点用“▼”字符表示。
这些字符预先定义在数据段的字符图形里,利用BIOSINT1AH的2号系统功能调用,读出计算机系统的时间(为BCD码),置换成字符图形标中的图形字符显示。
本程序设计的关键是随着系统时间的变化,用字符组成的图形数字如何进行相应的变化。
方法是:
不停地读取系统时间并保存在寄存器中,将每次取出的时间显示并与前一次比较,先比较“秒”值,在不同的情况下(系统时间发生了增1的变化),则调用相应的图形字符显示,在不超过60秒的情况下,重复比较秒,然后再比较和显示“分”值与“小时”值。
程序流程图如图所示。
2.2主要流程图
2.1主程序流程图
2.2dzbiao流程图
3代码设计
datasegment
;*****定义please等提示信息*****
strdb20
db50h,7,0,0
db6ch,7,0,1
db65h,7,0,1
db61h,7,0,1
db73h,7,0,1
db65h,7,0,1
db70h,7,1,-10
db72h,7,0,1
db65h,7,0,1
db73h,7,0,1
db73h,7,0,1
db53h,7,0,2
db6bh,7,0,2
db65h,7,0,1
db79h,7,0,1
db65h,7,0,2
db78h,7,0,1
db69h,7,0,1
db74h,7,0,1
db21h,7,0,1
;*****定义0-9十个图形数字*****
s0db6
db5fh,7,0,0
db7ch,7,1,-1
db7ch,7,1,0
db5fh,7,0,1
db7ch,7,0,1
db7ch,7,-1,0
sydb2
db7ch,7,1,0
db7ch,7,1,0
s2db5
db5fh,7,0,0
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,-1
db5fh,7,0,1
s3db5
db5fh,7,0,0
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,1
db5fh,7,0,-1
s4db4
db7ch,7,1,0
db5fh,7,0,1
db7ch,7,1,1
db7ch,7,-1,0
s5db5
db5fh,7,0,0
db7ch,7,1,-1
db5fh,7,0,1
db7ch,7,1,1
db5fh,7,0,-1
s6db6
db5fh,7,0,0
db7ch,7,1,-1
db5fh,7,0,1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,0,-1
s7db3
db5fh,7,0,0
db7ch,7,1,1
db7ch,7,1,0
s8db7
db7ch,7,1,0
db5fh,7,-1,1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,0,-1
s9db6
db7ch,7,1,0
db5fh,7,-1,1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,1
db5fh,7,0,-1
s11db2
db03h,7,1,0
db03h,7,1,0
dataends
stacksegment
db200dup(0)
stackends
codesegment
assumecs:
code,ss:
stack,ds:
data
start:
movax,data
movds,ax
movah,0;设置显示方式
moval,4
int10h
movah,0bh;置彩色调板
movbh,0
movbl,1
int10h
movah,0bh;置彩色调板
movbh,1
movbl,4
int10h
movah,2;取系统时间
int1ah
movax,0
movbx,0
movah,ch;取系统时间
moval,cl;保存分钟
movbh,dh;保存秒
movbl,dl;保存百分之一秒
tt:
pushax
pushbx
movah,0
moval,4
int10h
movah,0bh
movbh,0
movbl,1
int10h
movah,0bh
movbh,1
movbl,4
int10h
MOVAH,1;读键盘缓冲区字符
INT16h
JZww
MOVAH,8;从键盘输入字符
INT21h
CMPAL,'s';输入s,结束程序
JEtu
ww:
popbx
popax
callxian;调用显示子程序
pushax
qu:
movah,2;取系统时间
int1ah
cmpbh,dh
jequ
popax
incbh;对时间进行加1
cmpbh,100
jltt
movbh,0
incal
callbeep
cmpal,100
jltt
moval,0
incah
cmpah,24
jltt
movah,0
jmptt
tu:
movah,4ch
int21h
ret
xianproc;对时间值进行处理并显示的子程序
pushsi
pushdi
pushdx
pushcx
pushbx
pushax
popax
pushax
movbx,ax
movax,0
moval,bh
movcl,4
shral,cl
movbl,al
movdh,10
movdl,2
callff
popax
pushax
movbx,ax
movax,0
moval,bh
andal,0fh
movbl,al
movdh,10
movdl,6
callff
movdh,10
movdl,10
movbl,10
callff
popax
pushax
movcl,4
shral,cl
movbl,al
movdh,10
movdl,14
callff
popax
pushax
andal,0fh
movbl,al
movdh,10
movdl,18
callff
movdh,10
movdl,22
movbl,10
callff
popax
popbx
pushbx
pushax
movax,0
moval,bh
movcl,4
shral,cl
movbl,al
movdh,10
movdl,26
callff
popax
popbx
pushbx
pushax
moval,bh
andal,0fh
movbl,al
movdh,10
movdl,30
callff
movdh,0
movdl,15
movbl,22
callff
popax
popbx
popcx
popdx
popdi
popsi
ret
xianendp
ffproc;显示具体数值
pushax
pushbx
pushcx
pushdx
cmpbl,0
jel0
cmpbl,1
jel1
cmpbl,2
jel2
cmpbl,3
jel3
cmpbl,4
jel4
cmpbl,5
jel5
cmpbl,6
jel6
cmpbl,7
jel7
cmpbl,8
jel8
cmpbl,9
jel9
cmpbl,10
jel10
cmpbl,22
jeld
l0:
leadi,s0
jmpty
l1:
leadi,sy
jmpty
l2:
leadi,s2
jmpty
l3:
leadi,s3
jmpty
l4:
leadi,s4
jmpty
l5:
leadi,s5
jmpty
l6:
leadi,s6
jmpty
l7:
leadi,s7
jmpty
l8:
leadi,s8
jmpty
l9:
leadi,s9
jmpty
l10:
leadi,s11
jmpty
ld:
leadi,str
ty:
movah,0fh;显示方式
int10h
subcx,cx
movcl,[di]
incdi
plot_next:
adddh,[di+2]
adddl,[di+3]
movah,2
int10h
moval,[di]
movbl,[di+1]
pushcx
movcx,1
movah,09
int10h
popcx
adddi,4
loopplot_next
popdx
popcx
popbx
popax
movcx,100
gg:
deccx
loopgg
ret
ffendp
clearproc
pushax
pushbx
pushcx
pushdx
movah,6
moval,0
movbh,1
int10h
popdx
popcx
popbx
popax
ret
clearendp
beepproc
pushax
pushbx
pushcx
pushdx
moval,10110110b
out43h,al
movax,533h
out42h,al
moval,ah
out42h,al
inal,61h
movah,al
oral,03
out61h,al
subcx,cx
movbl,28h
g7:
loopg7
decbl
jnzg7
moval,ah
out61h,al
popdx
popcx
popbx
popax
ret
beependp
codeends
endstart
4调试与运行
4.1实验步骤
1.打开windows命令窗口
2.进入masm程序的安装目录,如图
图4.1
3连接程序,并查看生成可执行文件huibian.exe
图4.2
4关闭对话框,打开可执行文件开始运行程序
4.2程序调试及运行
运行程序结果从0到9,如下列截图4.1到4.10所示
图4.3
图4.4
图4.5
图4.6
图4.7
图4.8
图4.9
图4.10
图4.11
图4.12
程序运行的任何时候按q或Q退出
4.3调试中出现的问题
没有注意到要操作的目标数据(内存中的数据)的大小和使用操作容器(寄存器)的大小没有一致。
另外,对于数据处理的ds:
[bx]方式,如movds:
[bx],dxaddbx,2在循环中应该注意bx的递增或递减大小,如处理字节,比如用dl,循环中就应该加或者减1;如果处理字,比如用dx,就应该加或者减2。
在以后应该留意这个一致性。
在8086上,ss和sp都是16位的,栈所处理数据的最小单位也是16位的,即最小是一个字,栈一次读和一次写,都至少是一个字那么大。
5总结
学习了汇编语言这门课程,对它有了基本的了解和认识。
认为自己可以解决一些简单的汇编语言程序设计问题,但是拿到题目还是感觉有些无从下手。
幸好得到了同学和老师的帮助,才从无从下手开始,一步步完成程序设计,一直到最后完成。
当我运行自己所编写的程序的时候,一种无以言表的喜悦充满了我的内心。
非常感谢帮助我的同学和老师,如果没有他们的帮助,我的课程设计时不可能按时完成的。
对于我所学习的软件工程这个专业来说,编写程序是最基本,也是最重要的技能,这次带着有些侥幸的完成,我感到有些惭愧。
但是,我相信,在以后的学习和实践中,我一定会汲取这次设计程序的经验和教训,争取把这门专业学的更好。
参考文献
[1]《汇编语言程序设计》,吴向军等,高等教育出版社,2002
[2]《IBM-PC汇编语言及程序设计》(第2版),沈美明等,清华大学出版社,2001
[3]《IBM-PC汇编语言及程序设计实验教程》,沈美明等,清华大学出版社,2001
[4]《汇编语言程序设计》,钱晓捷等,电子工业出版社,2000
[5]《汇编语言程序设计》,张志明等,重庆大学出版社,1997
[6]《汇编语言课程设计案例精编》,李珍香等,中国水利水电出版社,2004
[7]《新编深入DOS编程》,求伯军等,学宛出版社,1994
[8]《宏汇编语言MASM6实用大全》,东扬生等,科学出版社,1993