2022年微机课设基于汇编语言的闰年判断程序设计.docx
精选学习资料 - - - - - - - - - 西安建筑科技高校华清学院课程设计论文课程名称:微型电脑原理与接口技术题 目: 基于汇编语言的闰年判定程序设计院 系:华清学院机电系专业班级:电子信息与科学技术 0801 姓 名:学 号:指导老师:2022 年 1 月 12 日名师归纳总结 - - - - - - -第 1 页,共 13 页精选学习资料 - - - - - - - - - 目 录引言· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 2 一 设计任务 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3 设计目的· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3 二 设计方案 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3 设计分析· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3 结构概述· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3 三 软件编程 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 5四 程序运行 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 10五 收成与心得体会 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 11 5.1 设计收成· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·11 5.2 心得体会· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·12 参考书目 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 12共 12 页,第 1 页名师归纳总结 - - - - - - -第 2 页,共 13 页精选学习资料 - - - - - - - - - 引 言为了实际提高汇编语言的娴熟程度,稳固课堂学问,本次课程设计中,我们将结合实际生活中经常遇到的闰年问题,运用MF2KI软件来编写如何判断闰年的程序;为了实现对输入年份是否为闰年的判定,所设计的程序需要 完成的功能主要有: 1、在屏幕上显示提示信息,输入年份;2、判定输入格式是否正确; 3、判定输入的年份是否为闰年;判定某年为闰年的汇编语言表达式为: AX MOD 4 EQ 0 AND AX MOD 100 EQ 0 OR AX MOD 400 EQ 0其中,AX中存放的是从键盘输入的年份值;程序编写完成之后,会 经过编译、连接、调试等过程,程序运行后,屏幕会提示输入年份,输入后程序会自动判定输入的年份是否为闰年;共 12 页,第 2 页名师归纳总结 - - - - - - -第 3 页,共 13 页精选学习资料 - - - - - - - - - 一、设计任务依据提示输入任意年份, 编写判定闰年的程序, 假如是闰年就在屏幕上现实“ Y” ,否就现实“N” ;1、学习分支、中断和规律表达,寄存器的运用和子程序的调用;2、熟识汇编语言程序的编译、运行过程;3、明白汇编语言编写的各个流程 4、将课堂上所学的学问学以致用, 通过程序的制作过程学习课外的新学问,并加强加深对旧学问的懂得与把握;二、设计方案2.1 设计分析闰年的判定是一个特别经典的问题,在学习各种语言时都会遇到; 解决该问题的关键是找到判定某年是否为闰年的方法;要判定某一年是否为闰年, 需判定 该年份的数值正整数是否满意以下两个条件中的任意一个:1 能够被 4 整除,但不能够被 100 整除;2 能够被 4 整除,同时又能够被 400 整除;2.2 结构概述 主模块:显示提示输入年份以及输入的字符内容,和最终输出的判定;子模块:1 判定输入:该模块是对输入的年份的格式的判定,假设是错误就显示错 误并显示输入提示,正确就进行下面的操作;2 字符串转换格式:将数字字符串转换成数字,以进行下面的程序操作;3 判定闰年:判定输入的年份是否为闰年,假设是就输出“xxxx is a leap year.” ,假设不是就输出“xxxx is not a leap year.”,然后退出程序;依据以上结构,可画出以下程序流程图共 12 页,第 3 页名师归纳总结 - - - - - - -第 4 页,共 13 页精选学习资料 - - - - - - - - - 图 2-1 判定闰年流程图共 12 页,第 4 页名师归纳总结 - - - - - - -第 5 页,共 13 页精选学习资料 - - - - - - - - - 本框图列出了此次课程设计的总流程,显示信息,输入数据,判定格式,判断闰年和终止程序;较为直观地显示了设计的次序结构,循环结构及分支结构;三、软件编程依据图 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','$' 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 共 12 页,第 5 页名师归纳总结 - - - - - - -第 6 页,共 13 页精选学习资料 - - - - - - - - - lea dx,mess 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 共 12 页,第;键盘输入6 页名师归纳总结 - - - - - - -第 7 页,共 13 页精选学习资料 - - - - - - - - - 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 error 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 共 12 页,第 7 页名师归纳总结 - - - - - - -第 8 页,共 13 页精选学习资料 - - - - - - - - - mov ah,09h int 21h jmp s1 s2: mov cx,ax lea dx,newline mov 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 mov cx,4 lea bx,inbuff add bx,2 lop2: mov dl,byte ptr bx mov ah,02h int 21h 共 12 页,第 8 页名师归纳总结 - - - - - - -第 9 页,共 13 页精选学习资料 - - - - - - - - - inc bx loop lop2 lop3: pop ax mov dx,0 ; 循环输出年份正确时结果中的年份 mov cx,ax ;储存 ax 到 cx 中 mov bx,4 div bx cmp dx,0 jne not leap mov ax,cx mov bx,100 div bx cmp dx,0 jne is leap mov ax,cx mov bx,400 div bx cmp dx,0 jne notleap isleap: lea dx,yes mov ah,09h int 21h jmp s3 notleap: lea dx,no mov ah,09h int 21h ;判定是否能被 4 整除;判定是否能被 100 整除;判定是否能被 400 整除共 12 页,第 9 页名师归纳总结 - - - - - - -第 10 页,共 13 页精选学习资料 - - - - - - - - - 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,回车换行,就显示 2003 is not leap year ;并给出是否连续的提示, 输入 y,屏幕连续显示提示输入的语句; 假如输入错误,就显示 Input illegal !并提示用户连续输入年份,直到输入正确的年份为止;输入 2000,回车换行,就显示2000 is leap year ;并给出是否连续的提示,输入 n,就显示屏幕关闭,程序终止;运行结果如图 4-2 所示:共 12 页,第 10 页名师归纳总结 - - - - - - -第 11 页,共 13 页精选学习资料 - - - - - - - - - 图 4-2 运行结果五、收成与心得体会两周的课程设计终止了, 本次的课程设计中, 我不但对课本上的学问有了更 深的明白和稳固,而且仍学到了平常在课堂上学不到的东西;短暂的时间里, 我学到了不少学问, 熟识了很多程序代码, 也熟识到了自己 有很多不足之处;已把握的学问也不坚固,遇到一些麻烦的问题无法自己解决,但是,我通过询问同学, 查询资料, 最终使问题得以解决; 由此,我深刻体会到,只有在实际编程时我们才能熟识到自己的不足之处,的水平有所提高;才能进而进行补偿来使自己这次课程设计使我对电脑系统汇编有了更加完整的熟识:汇编语言主要是研究软件到硬件的程序设计问题, 它是电脑能够供应应用户使用的最快而且最有效的语言,也是能够利用电脑全部硬件特性并直接掌握硬件的唯独语言;通过查阅资料我拓宽了自己的学问面, 增强了学好汇编语言的信心; 这不是第一次用汇编语言来设计一个小程序, 平常做了很多试验, 写了很多小程序; 但这次是一个综合的程序, 平常的很多程序都用到了; 子程序的设计是固定的, 因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大便利了我们的设计,为我们节约了很多的时间; 不行否认, 本程序存在不少缺点和不足,但通过这次共 12 页,第 11 页名师归纳总结 - - - - - - -第 12 页,共 13 页精选学习资料 - - - - - - - - - 课程设计的却找出了自己在学习上的不足,对以后的学习和工作也有指导作用;我信任在以后的学习中会克服这些不足,到达娴熟把握汇编语言的目的!5.2 心得体会课程设计是我们专业课程学问综合应用的实践训练,也是我们迈向社会, 从事职业工作前一个必不少的过程;” 千里之行始于足下” ,通过这次课程设计,我深深体会到这句千古名言的真正含义;我今日仔细的进行课程设计, 学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础;试验过程中我们遇到的很多问题仅依靠自己把握的一些学问是远不能解决的,因此我们发挥团队精神,彼此协作,相互帮忙,以集思广益的方式解决了很多问题;大家在试验遇到瓶颈问题时都不曾丧气懊丧,而是翻课本查资料,各尽其能,以求最大限度的解决问题;遇到问题时我们相互提示相互借鉴,有效地解决了很多问题;大家这种精诚合作的精神使我特别感动;试验设计过程中,老师给我们的指导尤为重要,否就我们的试验可能不会顺当完成,而我们在本次试验中所付出的努力极有可能白白铺张掉;在此,我诚心感谢这一学期以来兢兢业业,不辞劳累为我们教授学问的张老师,老师严谨细致、一丝不苟的作风始终是我们工作、学习中的榜样;同时也很感谢本次试验中赐予我帮忙的各位同学!参考书目1 李敬兆, 8086/8088 和 arm 核汇编语言程序设计 中国科技高校出版社,2022 3 陈够喜等著,微机原理应用试验教程 . 北京:人民邮电出版社,2006 4 刘乐善,微型电脑接口技术及应用 . 武汉 : 华中科技高校出版社,2004 5 沈美明,温冬婵 编著 IBM PC汇编语言程序设计其次版清华高校出版社共 12 页,第 12 页名师归纳总结 - - - - - - -第 13 页,共 13 页