ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:95.46KB ,
资源ID:1506753      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1506753.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机闰年判断程序设计Word格式.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

微机闰年判断程序设计Word格式.docx

1、(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图目录摘要 11.设计任务及要求分析 21.1课程设计的目的 21.2闰年判断程序设计 22.方案比较及认证说明 32.1方案比较 32.1.1采用汇编语言设计 32.1.2采用C语言设计 32.2方案论证 33.系统原理阐述 43.1软件思想 43.2程序设计原理 43.3程序设计流程图 43.4汇编源程序 53.4.1主模块程序 53.4.2子模块

2、程序设计 54.调试记录及结果分析 74.1运行界面记录 74.2算法分析 84.3调试过程及结果分析 8心得体会 9参考文献 10附录 11 摘要本次微机原理与接口技术课程设计是要设计一个判断年份是否为闰年的显示程序。本次课程设计用的是8086最小系统,在emu8086汇编集成环境下完成。首先,根据课设题目要求进行分析,并选择适合要求的方案,在选定方案下设计整个设计要求的程序框架,画出流程框图,然后运用模块化的设计思想,将题设要求分成几个小的模块,一段一段的设计程序。再分段对程序进行编写和调试,在编写程序时,每个版块都使用了分支语句,并在主程序中多次使用,同时主程序中还多次使用分支语句。最后

3、,完成各个板块的的设计之后,在分别进行调试和最终调试,并进行错误修改,对整体进行完善。关键词:汇编语言;闰年判断;EMU80861.设计任务及要求分析1.1课程设计的目的(1)使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。(2)培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。1.2闰年判断程序设计 该年不是闰年,如果输入的是非法字符,则显示错误,重新输入。 从上述要求分析,本次设计要使用多次循环语句和分支语句,循环语句用来将字符串转换成十六进制数字,表示年份,分

4、支语句在进行计算后判断余数是否为零从而判断输入年份是否为闰年。所以对本次设计使用模块化思想,用子程序完成字符转换功能,主程序完成闰年判断并显示功能。2.方案比较及认证说明2.1方案比较程序要求实现通过键盘输入一年份,然后判断该年份是否为闰年,如果是闰年,则在屏幕上显示:2.1.1采用汇编语言设计方案一:采用汇编语言,使用软件EMU8086设计。将输入年份保存到AX中,然后判断(AX )MOD 4 EQU O)AND(AX) MOD 100 EQU 0)OR(AX)MOD 400 EQU 0),通过分支语句,若满足上述条件则输出“该年为闰年”,否则输出“该年不为闰年”。2.1.2采用C语言设计方

5、案二:采用机器编程语言,使用软件C+设计。将输入年份复制给X,然后通过语句(X%4=0?)AND(X%100=0?)OR(X%400=0?)判断输入年份是否为闰年。满足条件将输出“该年为闰年”,否则输出“该年不为闰年”。2.2方案论证方案一采用的是汇编语言,汇编语言直接描述机器指令,比机器指令容易记忆和理解,而且可以通过调试观察数据在内存中的存储状态,将软件与硬件相结合。汇编语言是低级语言,在编写程序的时候会把根据不同的情况指定使用不同的寻址方式,能够对内存和CPU里的通用寄存器直接操纵。不同的计算机系列会有不同的汇编语言 而C语言是高级语言,可以实现跨平台。编写程序无需指定CPU的指令执行情

6、况,一段程序可以在不同体系结构的计算机上使用。C语言的使用范围更为广阔,但在初学计算机语言时,使用汇编语言可以更容易理解软件与硬件之间的联系,了解算法执行的过程,故在本次设计中采用方案一进行设计,而且程序简单,可使用单步调试,逐步分析每一句程序的运行过程。3.系统原理阐述3.1软件思想EMU8086是Digital River公司推出的一款较为先进的16位PC仿真软件,他将汇编语言程序设计和虚拟接口技术有机的结合起来,它内部集成了汇编语言的源程序的编译器和连接器,并提供一些参考例程,带有学习指南,还提供诸如交通灯、异步电机等一系列虚拟外设,是学习Inter 8086/8088微处理器的工作原理

7、和进行汇编语言设计的较为理想的工具。其操作界面简单直观,有菜单栏、快捷按钮。通过他们可以方便观察到处理器执行指令的各个步骤,其中的单步调试(single step)功能能显示指令执行后CPU内部存储器、堆栈区、变亮和标志寄存器的当前值。这个模拟器是在一台“虚拟”的电脑上运行程序的,他拥有自己独立的“硬件”,这样程序就如同诸如硬盘与内存这样的实际硬件完全隔离,动态调试非常方便。8086机器代码同Inter下一代处理器完全兼容,这意味着8086代码具有非常广泛的运用范围,另一特点是他的指令集非常小,学起来方便,同主流汇编程序相较,其语法简单得多,但是他能生成任何兼容8086机器语言的代码。3.2程

8、序设计原理总体程序设计原理是由汇编语言编写的判断年份是否为闰年的小程序。在运行程序后,屏幕会先提示输入一个年份,操作者输入年份后系统会自动判断该年是否为闰年,判断的语句为:(AX )MOD 4 EQU O)AND(AX) MOD 100 EQU 0)OR(AX)MOD 400 EQU 0)。AX为累加器,其中存放的是操作者输入的年份。程序完成的主要功能有:1.提示操作者输入一个年份2.判断年份是否闰年3.输出该年份是否为闰年。3.3程序设计流程图闰年判断流程图见图3-1-1。图3-3-1程序框图3.4汇编源程序3.4.1主模块程序主模块:显示提示输入年份以及输入的字符内容,和最后输出的判断是否

9、为闰年。3.4.2子模块程序设计子模块:判断输入:该模块是对输入的年份的格式的判断,若是错误则显示错误Error,正确则进行下面的操作。字符串转换格式:将数字字符串转换成数字,以便进行下面的程序操作。判断闰年:判断输入的年份是否为闰年,若是则输出“This is a leap year!”,若不是则输出“This is not a leap year!”,然后退出。ifyears proc near ;此子程序用来判断年份是否为闰年 push bx push cx push dx mov ax,w ;把转换后的年份的数值存入AX mov cx,ax mov dx,0 ;将dx清零 mov bx

10、,4 ;把4存放到寄存器bx中(除数) div bx ;除法指令 cmp dx,0 ;将dx中的余数与0进行比较,看似否整除 jnz lab1 ;若不相等跳转 mov ax,cx ;判断年份是否位400的整数倍 mov bx,100 ;将100赋给bx寄存器,做div的源操作数 mov dx,0 div bx jnz lab2 mov bx,400 cmp dx,0 jz lab2 lab1: clc ;清除进位标志,即非闰年 jmp lab3 lab2: stc ;设置进位标志,即闰年 lab3: pop dx pop cx pop bx ret ;子程序返回指令 ifyears endp4

11、.调试记录及结果分析4.1运行界面记录当输入为一个闰年、非闰年、非法输入时,程序所有运行过程如下图4-1-1至图4-1-3。图4-1-1输入闰年图4-1-2输入非闰年图4-1-3非法输入4.2算法分析本次设计中判断闰年的主要算法为(AX )MOD 4 EQU O)AND(AX) MOD 100 EQU 0)OR(AX)MOD 400 EQU 0),要使用分支语句进行设计,余数是否为零是产生分支的原因。第二个算法是字符串转换其对应的十六进制数值,对每一位字符减去48即30H就可以转换成为16进制数。4.3调试过程及结果分析INT21h/AH=0Ah-inputofastringtoDS:DX,f

12、istbyteisbuffersize,secondnumbercharsactuallyread.thisfunctiondoesnotadd$intheendstring.toprintusingAH=9youmustsetdollarcharacteratitandstartprintingfromaddressDX+2.进行程序调试时,对字符串的定义不清,所以在给变量进行定义时分配内存空间出错。然后是对闰年计算出错,在进行闰年计算时,将字符串首位转换为年份的千位要连续三次乘以十,此时CX控制循环次数所以要对CX重新进行赋值,百位,十位的转换类似,都要对CX重新赋值。第三个问题是在主模块

13、设计时,要对标志寄存器初始化,由于在进行语句编写后,计数寄存器有了初值要进行后续编写时要清零,这是本次编写程序中存在的最细微但是影响最大的问题,直接导致程序的功能出错。调试过程中出现错误如图4-3-1。 图4-3-1CX有初值未清零心得体会通过本次课程设计,了解了EMU8086系统的编程方法,学习了如何编写简单的汇编语言程序。在编程的过程中,发现了很多的问题,对汇编语句的不熟悉是最大的问题。比如分支语句,跳转语句,在比较时,标志寄存器发生变化与否是比较和是否跳转的关键。除法语句在使用时不够16位或32位的要进行拓展否则无法进行除法语句的操作,商和余数分别存放在AH和AL中,故在判断余数是否为零

14、时要与AL相比较,而非AX.。在同学的帮助下,通过查找资料和不断的调试最终解决问题。这次课程设计锻炼了发现问题,解决问题的能力,同时也锻炼了查找资料,阅读文献的能力,为以后的毕业设计和论文写作打下基础。微机原理与借口技术在自动化专业中要经常使用,故这门课的课程设计也提高运所学知识的能力,通过实践检验理论知识,加强对知识的掌握,最终运用到今后的科研或工作当中。感谢在此次课程设计中给予帮助的老师和同学。回顾此次课程设计,课程设计是一个把需求分析、程序编写、程序调试、撰写报告结合为一体的过程。在这个过程中,不仅锻炼了缜密的思维和坚持不解的毅力,更需要互助的精神。只有通过一起努力才能将课程设计的所有环

15、节都顺利的完成。另外程序设计中遇到问题并解决问题的过程,使得独自探索并解决问题的能力了有了一个提高,这有利于以后的学习。同时这整一个过程,也对程序编写的整个过程有了一个统筹全局的思想,因为需求分析、程序编写、程序调试、撰写报告这些过程是环环相扣的,绝对不可能独立进行。参考文献1 李艳芳 EMU8086和DEBUG在微机教学中的运用 湖南科技学院学报20132 刑江 基于EMU8086汇编语言设计探讨 湖北师范学院学报 20103 古兆麟 基于EMU8086虚拟微机系统实验设计 天津职业师范技术学院学报20114 宋长军 汇编语言学习与编程规律浅谈 吉昌学院学报20085 熊小兵 汇编语言程序设

16、计的比较方法学 计算机教育20106 EMU8086在微机原理教学中的运用 黑龙江科技信息20097 彭虎 微机原理与接口技术 电子科技大学出版社8 Randall Hyde.The Art of Assembly LanguageM. No Starch .20059 Kip R. Irvine. Assembly Language for x86 Processors (6th Edition)M.Prentice Hall.201110 Juola. Principles of Computer Organization and Assembly Language, Using the

17、Java Virtual MachineM.Prentice-Hall.2007附录使用的元件清单:A.带有EMU8086的计算机一台源程序:data segment infon db 0dh,0ah, input a year: $ Y db 0dh,0ah,This is a leap year! N db 0dh,0ah,This is not a leap year! E db 0dh,0ah,Error! w dw 0 ;用于保存输入的年份的数值,因为输入的年份是字符串,因此需要转换为数 buf db 8 db ? db 8 dup() ;定义输入缓冲区data endsstack

18、segment stack db 200 dup(0)stack endscode segment assume ds:data,ss:stack,cs:code start:mov ax,data mov ds,ax lea dx,infon ;在屏幕上显示提示信息 mov ah,9 ;显示字符串 int 21h lea dx,buf ;从键盘输入年份字符串 mov ah,0Ah ;0AH功能调用从键盘接受字符串到内存的输入缓存区 int 21h xor cx,cx mov cl, buf+1 ;把输入的字符的个数保存在cl中 lea di,buf+2 ;把从键盘输入字符的首地址存放到di中

19、 push ax a0: mov al,di cmp al,0dh jz a1 cmp al,9 jg a30 jl a3 inc di jmp a0 a1: pop ax call datacate ;调用datacate子程序 call ifyears ;调用ifyears子程序 jc a2 ;如果进位则跳转 lea dx,n ;输出不是闰年 mov ah,9 jmp exit a2: lea dx,y ;输出是闰年 call exita3: lea dx,e exit: mov ah,0 int 16h mov ah,4ch ;返回操作系统datacate proc near ;用于把表

20、示年份的字符串转换为数值 push cx; dec cx ;让cx寄存器自减1 lea si,buf+2 ;把字符串的首地址保存在源地址寄存器SI中让si指向字符串的最低位 p1: inc si loop p1 pop cx mov dh,30h mov bl,10 mov ax,1 p2: 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的值,使得si指向下一个字符(即高位) loop p2 ;循环直到所有字符处理完毕(datacate endpcode ends end start

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

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