《2022年微机课设基于汇编语言的闰年判断程序设计》由会员分享,可在线阅读,更多相关《2022年微机课设基于汇编语言的闰年判断程序设计(13页珍藏版)》请在金锄头文库上搜索。
1、西安建筑科技大学华清学院课程设计论文课程名称:微型电脑原理与接口技术题目: 基于汇编语言的闰年判断程序设计院 系 :华清学院机电系专业班级:电子信息与科学技术0801 姓名:学号:指导教师:2011 年 1 月 12 日精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 13 页共 12 页,第1 页目录引言 2 一 设计任务 3 3设计目的 3二 设计方案 3设计分析 3结构概述 3三 软件编程 5四 程序运行 10五 收获与心得体会 11 5.1 设计收获 115.2 心得体会 12 参考书目 12精选学习资料 - - - - - -
2、- - - 名师归纳总结 - - - - - - -第 2 页,共 13 页共 12 页,第2 页引言为了实际提高汇编语言的熟练程度,稳固课堂知识,本次课程设计中,我们将结合实际生活中常常遇到的闰年问题,运用MF2KI软件来编写如何判断闰年的程序。为了实现对输入年份是否为闰年的判断,所设计的程序需要完成的功能主要有: 1、在屏幕上显示提示信息,输入年份;2、判断输入格式是否正确; 3、判断输入的年份是否为闰年。判断某年为闰年的汇编语言表达式为: (AX) MOD 4 EQ 0) AND (AX) MOD 100 EQ 0) OR (AX) MOD 400 EQ 0)其中, AX 中存放的是从键
3、盘输入的年份值。程序编写完成之后,会经过编译、连接、调试等过程,程序运行后,屏幕会提示输入年份,输入后程序会自动判断输入的年份是否为闰年。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 13 页共 12 页,第3 页一、设计任务根据提示输入任意年份, 编写判断闰年的程序, 如果是闰年则在屏幕上现实“Y” ,否则现实“ N ” 。1、学习分支、中断和逻辑表达,寄存器的运用和子程序的调用;2、熟悉汇编语言程序的编译、运行过程;3、了解汇编语言编写的各个流程4、将课堂上所学的知识学以致用, 通过程序的制作过程学习课外的新知识,并加强加深对旧知
4、识的理解与掌握。二、设计方案2.1 设计分析闰年的判断是一个非常经典的问题,在学习各种语言时都会遇到。 解决该问题的关键是找到判断某年是否为闰年的方法。要判断某一年是否为闰年, 需判断该年份的数值正整数是否满足以下两个条件中的任意一个:1 能够被 4 整除,但不能够被 100 整除;2 能够被 4 整除,同时又能够被400 整除。2.2结构概述主模块:显示提示输入年份以及输入的字符内容,和最后输出的判断。子模块:1 判断输入:该模块是对输入的年份的格式的判断,假设是错误则显示错误并显示输入提示,正确则进行下面的操作。2 字符串转换格式:将数字字符串转换成数字,以进行下面的程序操作。3 判断闰年
5、:判断输入的年份是否为闰年,假设是则输出“xxxx is a leap year!” ,假设不是则输出“ xxxx is not a leap year! ” ,然后退出程序。根据以上结构,可画出以下程序流程图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 13 页共 12 页,第4 页图 2-1 判断闰年流程图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 13 页共 12 页,第5 页本框图列出了此次课程设计的总流程,显示信息,输入数据,判断格式,判断闰年和结束程序。较为直观
6、地显示了设计的顺序结构,循环结构及分支结构。三、软件编程根据图 2-1 利用 DOS 21H 中断类型的 10 号键盘功能调用,将键盘接受到的年份数值的字符串按字节存入缓冲区。将字符串中的每个字符转换为对应的十进制数值利用 0-9 这 10 个数的 ASC 码值比其本身大30H的关系,利用判断某年是否为闰年的表达式,输入该年是否为闰年的信息。主要程序代码如下:data segment inbuff db 5,?,5 dup(?) prompt db Please input the year:,$ errmsg db Input illegal!,$ yes db is leap year,$
7、 no db is not leap year,$ mess db Continue?(y/n):,$ newline db 13,10,$ ;回车换行data ends code segment main proc far assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax lop0: call input call judge 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 13 页共 12 页,第6 页 lea dx,mess
8、mov ah,09h int 21h ;是否继续输入年份的判断 mov ah,01h int 21h cmp al,n je exit continue: lea dx,newline mov ah,09h int 21h jmp lop0 exit: ret main endp ;输入一个具体的年份 , 并转换成 10 进制返回:(ax)= 输入的年份input proc near push bx push cx push dx s1: lea dx,prompt mov ah,09h int 21h ;提示输出 lea dx,inbuff mov ah,0ah int 21h ;键盘输入精
9、选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 13 页共 12 页,第7 页 mov dl,byte ptr inbuff1 ;把有效地址为 inbuff的字节送给 dl cmp dl,4 ;输入的值判断是否为4 位数 jne error ;调用输入不合条件时的错误处理 mov cx,4 lea bx,inbuff add bx,2 mov ax,0 mov dx,0 lop1: ;检查输入有效性 mov dl,10 mul dl mov dl,byte ptr bx sub dl,30h ;将字符转化为数值 cmp dl,0 jb e
10、rror cmp dl,9 ja error add ax,dx inc bx,bx+1 ;循环体中字符在字符串中的位置 loop lop1 jmp s2 error: ;错误处理 lea dx,newline mov ah,09h int 21h lea dx,errmsg mov ah,09h int 21h lea dx,newline 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 13 页共 12 页,第8 页 mov ah,09h int 21h jmp s1 s2: mov cx,ax lea dx,newline mov
11、 ah,09h int 21h mov ax,cx pop dx pop cx pop bx ;现场恢复 ret input endp ;判断一个年份是否闰年输入:(ax)= 年份judge proc near push bx push cx push dx push ax ;保存 ax; 输出要判断的年份 mov cx,4 lea bx,inbuff add bx,2 lop2: mov dl,byte ptr bx mov ah,02h int 21h 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 13 页共 12 页,第9 页
12、inc bx loop lop2 ; 循环输出年份正确时结果中的年份lop3: pop ax mov dx,0 mov cx,ax ;保存 ax 到 cx 中 mov bx,4 ;判断是否能被 4 整除 div bx cmp dx,0 jne not leap mov ax,cx mov bx,100 ;判断是否能被 100 整除 div bx cmp dx,0 jne is leap mov ax,cx mov bx,400 ;判断是否能被 400 整除 div bx cmp dx,0 jne notleap isleap: lea dx,yes mov ah,09h int 21h jmp
13、 s3 notleap: lea dx,no mov ah,09h int 21h 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 13 页共 12 页,第10 页s3: lea dx,newline ;换行 mov ah,09h int 21h ;输出年份正确时结果的剩余部分 pop dx pop cx pop bx ret judge endp code ends end start 四、程序运行在软件中调试后,运行上面的程序,会出现初始界面。初始界面如图 4-1 所示:图 4-1 初始界面在初始界面的光标处, 输入 2003,
14、回车换行,则显示 2003 is not leap year ;并给出是否继续的提示, 输入 y,屏幕继续显示提示输入的语句; 如果输入错误,则显示 Input illegal !并提示用户继续输入年份,直到输入正确的年份为止;输入 2000,回车换行,则显示2000 is leap year ;并给出是否继续的提示,输入 n,则显示屏幕关闭,程序结束。运行结果如图 4-2 所示:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 13 页共 12 页,第11 页图 4-2 运行结果五、收获与心得体会两周的课程设计结束了, 本次的课程设计
15、中, 我不但对课本上的知识有了更深的了解和稳固,而且还学到了平时在课堂上学不到的东西。短暂的时间里, 我学到了不少知识, 熟悉了很多程序代码, 也认识到了自己有许多不足之处。已掌握的知识也不牢固,遇到一些棘手的问题无法自己解决,但是,我通过询问同学, 查询资料, 最终使问题得以解决。 由此,我深刻体会到,只有在实际编程时我们才能认识到自己的不足之处,才能进而进行弥补来使自己的水平有所提高。这次课程设计使我对电脑系统汇编有了更加完整的认识:汇编语言主要是研究软件到硬件的程序设计问题, 它是电脑能够提供应用户使用的最快而且最有效的语言,也是能够利用电脑所有硬件特性并直接控制硬件的唯一语言。通过查阅
16、资料我拓宽了自己的知识面, 增强了学好汇编语言的信心。 这不是第一次用汇编语言来设计一个小程序, 平时做了很多实验, 写了很多小程序。 但这次是一个综合的程序, 平时的很多程序都用到了。 子程序的设计是固定的, 因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。 不可否认, 本程序存在不少缺点和不足,但通过这次精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 13 页共 12 页,第12 页课程设计的却找出了自己在学习上的不足,对以后的学习和工作也有指导作用。我相信在以后的学习中
17、会克服这些不足,到达熟练掌握汇编语言的目的!5.2 心得体会课程设计是我们专业课程知识综合应用的实践训练,也是我们迈向社会, 从事职业工作前一个必不少的过程。”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。我今天认真的进行课程设计, 学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。实验过程中我们遇到的许多问题仅依靠自己掌握的一些知识是远不能解决的,因此我们发挥团队精神,彼此协作,互相帮助,以集思广益的方式解决了许多问题。大家在实验遇到瓶颈问题时都不曾气馁沮丧,而是翻课本查资料,各尽其能,以求最大限度的解决问题。遇到问题时我们相互提醒相互借鉴
18、,有效地解决了许多问题。大家这种精诚合作的精神使我非常感动。实验设计过程中,老师给我们的指导尤为重要,否则我们的实验可能不会顺利完成,而我们在本次试验中所付出的努力极有可能白白浪费掉。在此,我衷心感谢这一学期以来兢兢业业,不辞劳苦为我们教授知识的张老师,老师严谨细致、一丝不苟的作风一直是我们工作、学习中的榜样。同时也很感谢本次试验中给予我帮助的各位同学!参考书目1 李敬兆, 8086/8088和 arm 核汇编语言程序设计中国科技大学出版社,2008 3 陈够喜等著,微机原理应用实验教程. 北京:人民邮电出版社,2006 4 刘乐善,微型电脑接口技术及应用.武汉 : 华中科技大学出版社,2004 5 沈美明,温冬婵编著 IBM PC汇编语言程序设计第二版清华大学出版社精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 13 页