资源描述
课程设计说明书题目: 判断闰年 院 系: 计算机科学与工程学院 专业班级: 学 号: 学生姓名: 指导教师: 2010 年 12 月 30 日安徽理工大学课程设计(论文)任务书 计算机科学与工程学院 硬件 教研室学 号 学生姓名 专业(班级) 设计题目题目一:判断闰年题目二: 简单计算器题目三: 代码转换程序题目四:字符图形程序题目五: 学生成绩管理题目六: 打字练习 (注:请在自己选做的题目后打)设计技术参数1 熟悉汇编指令、宏汇编语言的编程方法 2 BIOS中断调用、系统功能中断调用方法 3 磁盘文件、及文件内容操作设计要求题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理而设计的,是对所学课程知识较为系统的应用。 由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善的程序。 另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。 工作量1. 完成所选题目的软件设计;2. 课程设计说明书1000字(不包括程序源代码)左右。工作计划第1次熟悉软件环境。第2次绘制程序流程图。第3次用编写程序。第4次用调试运行程序。第5次编写课程设计说明书参考资料1.李敬兆 8086/8088和arm核汇编语言程序设计 中国科技大学出版社 2.沈美明,温冬婵 编著IBMPC汇编语言程序设计(第二版) 清华大学出版社出版3. 沈美明,温冬婵,张赤红 编著IBMPC 汇编语言程序设计实验教程 清华大学出版社出版指导教师签字教研室主任签字2010年 12月 17 日安徽理工大学课程设计(论文)成绩评定表指导教师评语:成绩: 指导教师: 年 月 日摘要本程序是用汇编语言编写的简单的判断闰年的小程序。在运行后,屏幕会提示输入年份,输入后程序会自动判断输入的年份是否为闰年。判断某年为闰年的汇编语言表达式为:(AX) MOD 4 EQ 0) AND (AX) MOD 100 EQ 0) OR (AX) MOD 400 EQ 0)其中,(AX)中存放的是从键盘输入的年份值。在本程序运行后,只要输入年份就能判断是否为闰年。完成的主要功能1、在屏幕上显示提示信息,输入年份。2、判断输入的年份是否为闰年。3、判断完后返回。关键词: AX,BUF,CALL,DATACATE,IFYEARS目录1设计目的12概要设计22.1 系统总体分析22.2 主模块框图及说明23 详细设计33.1 主模块及子模块说明33.2 各模块详细设计34程序调试74.1 运行界面分析74.2 算法的分析74.3 调试过程及分析85心得体会95.1 设计体会95.2 系统改进9参考文献10I安徽理工大学课程设计(论文)1设计目的本次课程设计是关于判断闰年的程序,既输入具体的年份,输出本年是否为闰年的提示信息,然后退出此程序。 本次课程设计的目的主要是将课堂上所学的知识学以致用,通过程序的制作过程学习课外的新知识,并加强加深对旧知识的理解与掌握。2概要设计2.1 系统总体分析总体设计思想本程序是用汇编语言编写的简单的判断闰年的小程序。在运行后,屏幕会提示输入年份,输入后程序会自动判断输入的年份是否为闰年。判断某年为闰年的汇编语言表达式为:(AX) MOD 4 EQ 0) AND (AX) MOD 100 EQ 0) OR (AX) MOD 400 EQ 0)其中,(AX)中存放的是从键盘输入的年份值。在本程序运行后,只要输入年份就能判断是否为闰年。完成的主要功能1、在屏幕上显示提示信息,输入年份。2、判断输入的年份是否为闰年。3、判断完后返回。2.2 主模块框图及说明主模块框图如图2-1图2-1本框图列出了此次课程设计的总流程,显示信息,输入数据,判断格式,判断闰年和结束程序。客观显示了设计的顺序结构,循环结构及分支结构。3 详细设计3.1 主模块及子模块说明判断输入模块:模块是对输入的年份的格式的判断,若是错误则退出本程序,正确则进行下面的操作。字符串转换格式模块:此模块是将数字字符串转换成数字,以便进行下面的模块。判断闰年模块:此模块是判断输入的年份是否为闰年,若是则输出“This is a leap year!”,若不是则输出“This is not a leap year!”,然后退出。3.2 各模块详细设计定义数据段,将输入的数据放到buf中。data segment ;定义数据段 infon db 0dh,0ah,Please input a year: $ i db 0dh,0ah,quitq $ Y db 0dh,0ah,This is a leap year! $ N db 0dh,0ah,This is not a leap year! $ e db 0dh,0ah,no year! $ w dw 0 buf db 8 db ? db 8 dup(?)data ends将地址放到al中,然后取出字符串里面的每一个字符与回车键比较相等则跳转到a5,不等与9比较,比9大跳转到a0,不等与0比较,比0小,跳转,否则指向下一个字符。zm: mov al,di cmp al,0dh jz a5 cmp al,9 jg a0 cmp al,0 jl a0 inc di jmp zm 将zm跳转的字符串放到a5中通过 datacate和ifyears两个子程序 检验其是否为闰年,是(CF=1)执行a1,否(CF=0)执行a2,然后跳转到结束段。 a5: call datacate call ifyears jnc a2 ;有进位 jc a1 ;无进位 a1: lea dx,y a2: lea dx,n输出“q”,执行退出功能,结束本实验。 exit: mov ah,0 int 16h cmp ah,71h mov ah,4ch int 21h retdatacate子程序将字符串转换为数字存到w变量中。datacate proc near ;用于把表示年份的字符串转换为数值 push cx; ;进栈操作,保存cx,即字符个数 dec cx ;让cx寄存器自减1 lea si,buf+2 ;把字符串的首地址保存在源地址寄存器SI中 tt1: inc si ;si寄存器中内容增1 loop tt1 ;loop是循环语句 pop cx ;出栈操作,与55行进栈操作相呼应 mov dh,30h mov bl,10 mov ax,1 l1:push ax ;入栈操作, sub byte ptr si,dh ;由于字符是ASCII码表示的,因此减去30H后即可转换为十六进制数 mul byte ptr si ;计算ax乘以字符数字 add w,ax ;把计算结果累加,并保存在w中 pop ax ;出栈操作,去除上一次操作后的倍数 mul bl ;乘以bl,计算当前的倍数 dec si ;修改源地址寄存器si的值 loop l1 ;循环直到所有字符处理完毕 ret ;子程序返回指令datacate endpifyears子程序是判断闰年的模块,将数据与“4”相除,若dx不为“0”跳转到la1,令CF=1否与“100”,相除,若dx不为“0”跳转到la2,令CF=0否与“400” 相除,若dx为“0”跳转到la2,令CF=1否则CF=0 ifyears proc near ;此子程序用来判断年份是否为闰年 push bx ;将寄存器实行入栈操作是为了保存寄存器状态 push cx push dx mov ax,w ;把转换后的年份的数值存入AX mov cx,ax ;把AX中存储的年份的数值存入CX,作用是复制一个年份数值, mov dx,0 ;把0存放到寄存器dx中 mov bx,4 ;把4存放到寄存器bx中(除数) div bx ;除法指令 cmp dx,0 ;将dx中的余数与0进行比较,看似否整除 jnz lab1 ;JNZ用来判断比较的结果,如果有不等的数据则跳转。(zf=1则转移) mov ax,cx ;将前面复制到cx寄存器中的年份的数值传给ax mov bx,100 ;将100赋给bx寄存器,做div的源操作数 mov dx,0 div bx cmp dx,0 ;将dx中的余数与0进行比较,看似否整除 jnz lab2 ;JNZ用来判断比较的结果,如果有不等的数据则跳转。(zf=1则转移) ;判断年份是否位400的整数倍 mov ax,cx mov bx,400 mov dx,0 div bx cmp dx,0 jz lab2 lab1: clc ;清除进位标志,即非闰年(进位标志用于标志是否为闰年) jmp lab3 ;jmp无条件转移 lab2: stc ;设置进位标志,即闰年 lab3: pop dx ;出栈操作,寄存器状态。 pop cx pop bx ret ;子程序返回指令 ifyears endp4程序调试4.1 运行界面分析初始界面:如图4-1图4-1按照提示输入年份如2004按回车执行程序,界面如图4-2图4-2显示“This is a leap year!”若不是闰年则显示,如图4-3图4-3若输入错误则显示如图4-4图4-4最后按提示输入“q”退出本程序。4.2算法的分析 本程序主要是将各个模块组合来完成一个目标及判断闰年。通过主程序的调集子程序,将各个子程序的功能整合起来,完成实验目的。4.3 调试过程及分析 (1)此程序中队buf的地址地存放了解不够,它是从第二位开始的,在编译过程中,使显示总是错误。(2)本程序用了很多的跳转,如:jz、jg、jl等,使用时要注意防止它们跳转的格式,使用范围,如:jg、jl它们是带符号位比较转移指令。5心得体会5.1 设计体会将近一周的课程设计,使我了解了汇编语言的基本的编程,虽然这次设计的只是一个小程序,但是这其间我还是学到了不少东西。在这次课程设计的过程,我得到来自老师以及同学们的帮助和鼓励,致使最后圆满完成预期任务。在设计过程中在做这个课程设计过程中,我深深感受到自己所掌握知识还是不足,已掌握也不牢固是遇到的一些棘手的问题不能解决,比如,buf地址的移动,年份的字符串转换为数值,判断闰年的语法实现等问题,但是,我通过询问同学,以及查询资料最终获得了解决,由此我们深刻体会到,只有在实际编程我们才能认识到自己的不足,才能进而进行弥补来使自己的编程水平有所提高。这次课程设计也加深了对汇编语言这门课的认识,汇编语言课程主要是研究软件到硬件的程序设计问题,它是计算机能够提供给用户使用的最快而又最有效的用语言,也是能够利用计算机所有硬件特性并直接控制硬件的唯一语言。并且通过本次课程设计,我的思维能力、综合应用能力和专业素质得到提高。本程序虽然已经完成了课程设计的需求,但是就应用上来说还是不完整的。由于时间仓促,故只提出一些改进的思想。最后,感谢老师,以及同学们对我的帮助。5.2 系统改进由于时间比较紧,对程序的设计还不够完美,只是设计出了程序的大体功能。对于界面还有待继续设计。在以后完善程序的过程中,可以加上运行一次程序多次判断闰年等功能,此功能可通过利用选择语句来判断程序是否继续执行跳转来重新进行本程序,并且系统还有很多地方需要去改善,使其更为简洁易懂。参考文献1 李敬兆, 8086/8088和arm核汇编语言程序设计 中国科技大学出版社2 陈够喜等著,微机原理应用实验教程. 北京:人民邮电出版社,2006.3 刘全忠,汇编语言实用程序.天津:天津大学出版社,1991.6.4 刘乐善,微型计算机接口技术及应用.武汉:华中科技大学出版社,2004.5 谭硫安 张雪兰,windows汇编语言程序设计教程:电子工业大学出版社,2005.46 张光长,汇编语言程序设计:北京大学出版社,2009.77 沈美明,温冬婵 编著IBMPC汇编语言程序设计(第二版) 清华大学出版社8 周荷琴,微型计算机与接口技术.合肥:中国科学技术大学出版社,2004.12.-10-
展开阅读全文