汇编毕业课程设计月历显示程序.docx

上传人:b****1 文档编号:699196 上传时间:2023-04-29 格式:DOCX 页数:14 大小:42.11KB
下载 相关 举报
汇编毕业课程设计月历显示程序.docx_第1页
第1页 / 共14页
汇编毕业课程设计月历显示程序.docx_第2页
第2页 / 共14页
汇编毕业课程设计月历显示程序.docx_第3页
第3页 / 共14页
汇编毕业课程设计月历显示程序.docx_第4页
第4页 / 共14页
汇编毕业课程设计月历显示程序.docx_第5页
第5页 / 共14页
汇编毕业课程设计月历显示程序.docx_第6页
第6页 / 共14页
汇编毕业课程设计月历显示程序.docx_第7页
第7页 / 共14页
汇编毕业课程设计月历显示程序.docx_第8页
第8页 / 共14页
汇编毕业课程设计月历显示程序.docx_第9页
第9页 / 共14页
汇编毕业课程设计月历显示程序.docx_第10页
第10页 / 共14页
汇编毕业课程设计月历显示程序.docx_第11页
第11页 / 共14页
汇编毕业课程设计月历显示程序.docx_第12页
第12页 / 共14页
汇编毕业课程设计月历显示程序.docx_第13页
第13页 / 共14页
汇编毕业课程设计月历显示程序.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编毕业课程设计月历显示程序.docx

《汇编毕业课程设计月历显示程序.docx》由会员分享,可在线阅读,更多相关《汇编毕业课程设计月历显示程序.docx(14页珍藏版)》请在冰点文库上搜索。

汇编毕业课程设计月历显示程序.docx

汇编毕业课程设计月历显示程序

华北科技学院

 

课程设计说明书

 

课程名称:

汇编语言

班级:

计算机B08-1姓名:

__蒋良_

设计题目:

___月历显示程序

设计时间:

_12月13号至12月24号

指导教师:

______李冬艳________

评语:

_________________________________

_________________________________________

_________________________________________

_________________________________________

_________________________________________

评阅成绩:

____评阅教师:

_____

 

1课程设计目的

进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。

二、课程设计要求

1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。

2.遵循模块化、结构化的程序设计方法。

3.要求程序必须正确。

4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。

5.要求程序结构合理,语句使用得当。

6.适当追求编程技巧和程序运行效率。

三、课程设计题目:

月历显示程序

四、课题分析

本程序主要实现了从键盘获取正确的年份月份后,在屏幕上以月历的形式显示出当月。

本次课题设计主要通过克服一下问题实现了目的功能:

1年份月份的获取与输出(小于10与大于等于10两种情况);

2闰年的判断,遵循四年而闰,百年不闰,四百再闰的规则;

3不同月份所含日数并不相同,分为四种情况:

30、31、28、29;

4计算出输入月份第一天为星期几,并依照此进行排列日期与计算显示出的空格数目

5、输入错误后的提示以及从新输入

五、流程图

1、主流程图

六、实现过程

1.提示输入年月

a)输入格式:

yyyymm

b)合法性检查:

1980≤yyyy≤2099,c)1≤mm≤12

d)年份字符串转换成二进制数保存到变量year,e)month中

f)其他需要定义的变量:

KBUF—键盘输入缓冲区

MSG2DB'Pleaseinputthemonth(01-12):

$'

CRDB10,13,'$'

YEARDW?

MONTHDB?

WEEKDB?

DAYDW?

2.显示月历

g)可采用成批显示的方法:

先填充,MonTueWedThuFriSat’,0DH,0AH

Line1db‘’,0DH,0AH

Line2db‘’,0DH,0AH

Line3db‘’,0DH,0AH

Line4db‘’,0DH,0AH

Line5db‘’,0DH,0AH,’$’

ii.往Line到Line5中填充当月日期(Fill_date)

iii.用9号DOS功能调用显示字符串YM

weeksdb'montuewedthufrisausun',0dh,0ah,'$'

3、每月有几天?

这涉及到填充多少个日期数字

1.计算出来后用一个变量保存:

days

2.计算方法:

a)1,b)3,c)5,d)7,e)8,f)10,g)12月:

31天

:

pushax

movax,20h;输出空格

andax,00ffh

movdl,al

movah,2

int21h

loopqian

movAX,NUM

movah,0

movbx,ax

popcx

movcx,DAY

movax,1

;movbx,5

s:

;输出日期

cmpax,10

jlgewei

callupten

jmpdb0dh,0ah,'$';回车换行

weeksdb'montuewedthufrisausun',0dh,0ah,'$'

dataends

SHOWMACROSTR

LEADX,STR

MOVAH,09H

INT21H

ENDM

INPUTYEARMACROX

MOVAH,01H

INT21H

SUBAL,30H

MOVAH,00H

MOVBX,X

MULBX

ADDCX,AX

ENDM

stacksegmentstack

db1024dup(?

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

mainprocfar

start:

pushds

xorax,ax

pushax

movax,data

movds,ax

movax,stack

movss,ax

MOVAH,0

MOVAL,03H

INT10H

MOVAH,06h;6号功能:

屏幕初始化或上卷

MOVAL,0;全屏幕为空白

MOVBH,1FH;卷入行属性(前景色、背景色之类的)

MOVCX,0;左上角行号左上角列号

MOVDH,24;右下角行号

MOVDL,79;右下角列号

INT10h;调用BIOS

l:

SHOWMSG1

MOVCX,0

INPUTYEAR1000

INPUTYEAR100

INPUTYEAR10

INPUTYEAR1

MOVYEAR,CX

SHOWCR

SHOWMSG2

MOVCL,0

MOVAH,01H

INT21H

SUBAL,30H

MOVBL,10

MULBL

MOVCL,AL

MOVAH,01H

INT21H

SUBAL,30H

ADDCL,AL

MOVMONTH,CL

SHOWCR

MOVCX,YEAR

MOVDH,MONTH

MOVDL,1

MOVAH,2BH

INT21H

CMPAL,0FFH

JENEXT1

MOVAH,2AH

INT21H

MOVWEEK,AL

SHOWCR

JMPNEXT2

NEXT1:

SHOWERROR1

showCR

JMPL

NEXT2:

CALLRUNNIAN

CALLDAYS

SHOWMSG0

SHOWCR

leadx,weeks

movah,9

int21h

pushcx

MOVAL,WEEK

CMPAL,0

JENEXT3

DECAL

JMPNEXT4

NEXT3:

MOVAL,6

NEXT4:

MOVNUM,AX

MOVBL,5

MULBL

movcx,AX

qian:

pushax

movax,20h;输出空格

andax,00ffh

movdl,al

movah,2

int21h

loopqian

movAX,NUM

movah,0

movbx,ax

popcx

movcx,DAY

movax,1

;movbx,5

s:

;输出日期

cmpax,10

jlgewei

callupten

jmp

movah,9

int21h

movbx,0

popax

ret

procnear;当输出的数为两位数时

pushax

pushcx

pushbx

movcl,10

divcl

addax,3030h

movbx,ax

movdl,bl

movah,02h

int21h

movdl,bh

movah,02h

int21h

popbx

popcx

pushcx

movcx,3

kong:

movax,20h

andax,00ffh

movdl,ah

movah,2

int21h

loopkong

popcx

popax

ret

uptenendp

mainendp

codeends

endstart

八、结果显示

初始界面:

键入正确的年份后:

键入正确年份和月份后:

输入年份月份出错:

八、感想、收获及体会

在本次课程设计中遇到的一些问题:

1、对于文件的打开中存在一些问题:

因为本次课程设计中显示的大概模式是一个记事本,所以窗口中有人为的“画”上一个边框,但是在打开一个文件,读取并显示在屏幕上时就出现了问题。

因为本次课设的DOS窗口使用的是80x25的16色文本,每一行除却左右两边的边框只有78列,而对于所要打开的文件如果一次读取的字节数超过78的话,则文件中的内容在在屏幕上显示的时候会将边框覆盖。

如果每次限制读取的字节数在78以内,然后每次光标定位的每一行的行首,这样的话,又会出现这样的问题:

如果第一次读的78个字节中有回车换行的话,在屏幕中显示的时候它会自动回车换到第二行,同样将边框覆盖,而且在第二次读的时候重新定位到第二行的行首,这样将上次所读出的字符给覆盖了。

对此,由于时间以及个人能力的限制,这个问题被暂时解决了而不是完美的解决:

所读取的文件中不适用回车Enter,所需要的间隔用空格来填充。

2、多次使用BIOS功能,其中感触最深的一点是使用16H的0号功能从键盘获得字符,这个与DOS功能中的21H中的1号功能从键盘输入字符最大的区别就是21H中1号功能是返回的是输入字符的ASCII码,是区分大小写的,这给输入字符时造成了极大的不方便;当然16H的0号功能返回的是字符的扫描码和字符码。

3、程序中本来对于选中所有的子菜单(除edit外)的响应是一致的,但是后来将新建和打开的功能修改了一下,加了两个子程序结果有时候Help菜单的子菜单的显示和选择就会出现问题,但是这个问题还是时有时无,因此让人很是苦恼;对于保存功能也稍修改了一下,但是对于保存功能,只要修改Help菜单的子菜单的选择就必出现问题,但碍于找不到原因,只好把这个功能不做修改。

4、程序中输入向下的方向键(即↓)时,本来功能设置的是打开子菜单(子菜单未打开时)或向下移动选中子菜单(子菜单已打开时),但是这个功能却不能用,对此我研究思考了许久,还是未能找出原因,只好先将这个问题放置到了一边,还望老师见谅。

当然了,实际上这个程序做的并不是很尽善尽美,程序中还存在着一些问题,但是毕竟世界上没有十全十美的东西,所以我们只能尽可能的做到最好。

收获以及体会:

通过此次课程设计,我更加体会到了使用DEBUG调试程序的好处。

以前程序短,差不多就一百多行,我可以一句一句的分析、找错,但是课程设计动辄几百行,甚至这次课设我的程序达到了一千多行,对于这样大的一个程序一句一句分析显然是不太显示的事情,这就体现了DEBUG的好处,也更显示了DEBUG的重要性。

通过此次课程设计,我学到了很多,因为很多东西在学习课本时是不做要求的,但是课程设计中却要用到。

比如说文件的打开、新建、写、读和移动指针,我们在学习课本时这一章根本就没有讲到但是这里却要用到,这就需要我们自学。

再比如BIOS的一些功能,我们平常用的汇编基本上全是只有黑白版本的,但是通过使用BIOS中的10H的0号功能,通过设置AL的值设置DOS窗口的显示方式,通过设置BH的值可以设置字符属性等等。

再比如说结构体,当然了本次课程设计中并没有用到结构体但是在查找资料时也稍微学习了解了一下。

当然了,在本次程序中我体会最深的还是与同学的互相帮助,虽然说我们要独立完成自己的课设,但是这并不代表我们遇到问题解决不了的时候就还要自己一个在在那苦思冥想,可能你只是钻到了死胡同里出不来,那样的话你想一个小时、一天、一个星期也许都想不出来,而旁观者清当局者迷,可能别人的一句话就解决了你的问题。

而且在帮助别人的时候我们自己也能学到很多东西,搞清楚很多可能以前自己也不是很清楚的知识点。

所以说独立虽好,但若光是闭门造车的话也不行,我们要多与同学交流。

总而言之,这次课程设计告诉我们学习不要只是局限于课本,局限于老师课堂上讲的知识,我们要学会利用身边一切的资源学习这门语言,这样才能学好一门语言。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2