*******************实践教学*******************兰州理工大学软件职业技术学院2011年春季学期微型计算机原理及应用课程设计题目:闰年计算专业班级:姓名:学号:指导教师:成绩:前言随着计算机技术的飞速发展,计算机改变了世界,也改变了人类的生活。
作为现代科学技术的主流,新世界的大学生,应当站在时代发展的前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,以适应社会发展的要求。
汇编语言是微型计算机原理及应用的基础,微机主机和接口所要实现的功能都要通过汇编语言来实现。
尽管汇编语言程序设计编程效率低,但其运行效率高、速度快。
因此掌握汇编语言是学好微机原理和接口设计的第一步。
本课设就是以闰年计算为题材,让我们掌握汇编语言、微机原理和接口的关系。
中文摘要利用DOS 21H 中断类型的10号键盘功能调用,将从键盘接收的表示年份数值的字符串按字节存入缓冲区。
将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCII码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。
本设计是根据闰年的计算方法,利用汇编语言编写的一个简单的判断闰年的程序。
根据判断闰年规则:如果某年能被4整除但不能被100整除或者该年不能被400整除,则改年为闰年,否则不是闰年。
在本程序运行后,要从键盘输入年份,通过计算后,就能输出该年份是否为闰年的信息。
关键字:缓冲区、字符转换、判断闰年前言 (1)中文摘要 (2)目录 (3)内容 (4)一、设计要求及目的 (4)1.设计要求 (4)2.设计目的 (4)二、设计内容 (4)三、设计思路 (4)1.设计思路 (4)2.设计流程图 (5)3.程序说明 (5)四、软件使用说明书 (7)总结 (10)参考文献 (11)致谢 (12)附录 (13)一、设计要求及目的1.设计要求1、从键盘输入年份,通过计算后,输出该年份是否为闰年的信息;2、查阅文献资料,一般在5篇以上;3、完成算法设计和程序设计、调试;4、撰写课程设计说明书;5、做好答辩工作。
2.设计目的1、学习分支、中断和逻辑表达;2、熟悉汇编语言程序的编译、链接过程。
二、设计内容从键盘输入年份,通过计算后,输出该年份是否为闰年的信息。
三、设计思路1.设计思路本设计中,我们利用DOS 21H中断类型的10号键盘功能调用,将从键盘接收的年份数值型字符串按字节存入缓冲区。
将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCII码值比其本身大30H的关系),通过判断某年是否为闰年的表达式,半段输出是否为闰年的信息。
判断某年是否为闰年的汇编语言的表达式为:(((AX)MOD 4 EQ 0)AND((AX)MOD 100 NE 0))OR((AX)MOD 400 EQ0)其中,(AX)中存放的是从键盘输入的年份值。
2.设计流程图3.程序说明1、代码段定义:代码段需要定义欲显示的字符串,且字符串以‘$’作为结束标志,还需要定义欲输入字符串的缓冲区,缓冲区的第一个字节存放能保存的最大字符数,第二个字节存放世界输入的字符数,用户从键盘输入的字符从第三个字节开始存放,直到用户输入回车位置。
本设计代码段定义如下:data segmentinfon db 0dh,0ah,'Please input a year:$'Y db 0dh,0ah,'This is a leap year!$'N db 0dh,0ah,'This is mot a leap year!$'w dw 0buf db 8db ?db 8 dup(?)data ends2、提示语显示:利用DOS 21H中断类型09号键盘功能调用,在屏幕输出提示用户输入年份的提示。
首先,将要显示的字符串放在内存数据区中,本设计提示语显示程序代码如下:lea dx,infonmov ah,9int 21h3、字符串输入:利用DOS 21H中断类型的10号键盘功能调用,将从键盘接收的表示年份数值的字符串按字节存储缓冲区。
首先,应在内存中建立一个输入缓冲区,如inbuff db 5,?5 dup(?)。
本设计字符串输入程序代码如下:lea dx,bufmov ah,0Ahint 21h4、数制转换:利用0—9这个数的ASCII码值比本身大30H的关系,将字符串中的每个字符转换为对应的十进制数值。
本设计数制转换程序代码如下:tt1:inc siloop tt1pop cxmov dh,30hmov bl,10mov ax,15、是否为闰年的判断:利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。
cmp dx,0jnz lab1mov ax,cxmov bx,100mov dx,0div bxcmp dx,0jnz lab2mov ax,cxmov bx,400div bxcmp dx,0jz lab2四、软件使用说明书在dos环境下运行。
在“D:\masm611\bin>”提示符下输入命令“masm ifyears.asm”后,如图所示:接下来输入“ml ifyears.asm”运行“ifyears.exe”,总结经过这次课程设计,大大地提高了我的分析解决问题的能力。
在这一过程中,我根据课程设计题目所给定的总体要求,独立设计、分析和调试程序,在面对问题时,能够耐心思考,解决了很多问题,从中也学到了很多书本上没有讲明的问题。
在运用汇编语言理论知识去解决问题时,也对以前学过的知识有了更深一层的了解。
虽然在设计的过程中遇到了很多的问题,但最后通过自己的思考与请教他人,我成功的完成了整体设计要求。
经过多次的修改画出了设计流程图。
接下来根据流程图完成了程序的编写,程序编写完成后用了一段时间对程序进行调试。
在调试过程中,遇到了一些问题,刚开始程序并不能很好的运行,经过错误分析,不断的修改,最后解决了问题,程序能够正常运行并输出正确的结果。
在实验中体现出对指令的不熟练,因此以后应该进一步加深对指令的学习,编出实现功能更好的,让自己满意的程序来。
通过本次课程设计,我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了自己的学习成果。
总之,这次课程设计给我们一次应用自己所学知识的机会,使我对微机原理这门课程有了更深层次的理解,让我学到了很多有用的知识,对我以后的学习有很大的帮助与提高。
参考文献1 宋杰,汪志宏,江敏,微机原理与接口技术课程设计,机械工业出版社,2005.42 周明德,微型计算机系统原理及应用习题集、习题解答与实验指导,清华大学出版社,2005.73 张开成,微型计算机原理,西南师范大学出版社,2006.84 沈美明,温冬婵, IBM-PC汇编语言程序设计第2版,清华大学出版社,2006.55 戴梅萼,史嘉权, 微型机原理与技术-习题、实验和综合训练题集,清华大学出版社,2009.4致谢在编写程序的过程中,我们得到了老师的精心指导以及孜孜不倦的教诲,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,在此,我们对老师的精心栽培表示衷心的感谢!感谢同学对我的帮助和指点,在课设即将完成之际,我的心情无法平静,从开始进入课题到课设的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。
附录设计源程序:data segmentinfon db 0dh,0ah,'Please input a year:$'Y db 0dh,0ah,'This is a leap year!$'N db 0dh,0ah,'This is mot a leap year!$'w dw 0buf db 8db ?db 8 dup(?)data endsstack segment stackdb 200 dup(0)stack endscode segmentassume ds:data,ss:stack,cs:code start:mov ax,datamov ds,axlea dx,infonmov ah,9int 21hlea dx,bufmov ah,0Ahint 21hmov cl,buf+1lea di,buf+2call datacatecall ifyearsjc a1lea dx,nmov ah,9int 21hjmp exita1:lea dx,ymov ah,9int 21hexit:mov ah,4chint 21hdatacate proc nearpush cxdec cxlea si,buf+2tt1:inc siloop tt1pop cxmov dh,30hmov bl,10mov ax,1l1:push axsub byte ptr[si],dhmul byte ptr[si]add w,axpop axmul bldec siloop l1retdatacate endpifyears proc nearpush bxpush cxpush dxmov ax,wmov cx,axmov dx,0mov bx,4div bxcmp dx,0jnz lab1mov ax,cxmov bx,100mov dx,0div bxcmp dx,0jnz lab2mov ax,cxmov bx,400div bxcmp dx,0jz lab2lab1:clcjmp lab3lab2:stclab3:pop dxpop cxpop bxretifyears endpcode endsend start注释:字符功能调用类(Character-Oriented Function) 01H、07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的输出05H —打印输出06H —控制台输入/输出09H —显示字符串0AH —键盘缓冲输入0BH —检测输入状态0CH —清输入缓冲区的输入功能。