还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
学号式修理)人学微机原理与接口技术题目闰年推断程序设计学院自动化学院专业电气工程与其自动化班级______________________________________姓名______________________________________指导老师__________________________________mov ax,w;把转换后的年份的数值存入AXmov ex,axmov dx,0;将dx清零mov bx,4;把4存放到寄存器bx中(除数)div bx;除法指令cmp dx,0;将€^中的余数与0进行比较,看似否整除jnz labl;若不相等跳转mov ax,ex;推断年份是否位400的整数倍mov bx,100;将100赋给bx寄存器,做div的源操作数mov dx,0div bxcmpdx,0;将dx中的余数与0进行比较,看似否整除jnz lab2mov ax,ex;推断年份是否位400的整数倍mov bx,400mov dx,0div bxcmpdx,0jz lab2labl:clc;清除进位标记,即非闰年jmp lab3lab2:stc;设置进位标记,即闰年lab3:pop dxPOPexpop bxret;子程序返回指令ifyears endp
4.调试记录与结果分析
4.1运行界面记录当输入为一个闰年、非闰年、非法输入时,程序全部运行过程如下图4-1-1至图4T-3地emulator screen80x25charsinput ayear:2008This isa leap year*图4-1-1输入闰年—域emulator screen80x25chars图4-1-2输入非闰年♦ft emulatorscreen80x25charsinput ayear:2jc5Error•_Tniihpsut.1sano61ya rayea
4.2算法分析本次设计中推断闰年的主要算法为AX MOD4EQU0ANDAX MOD100EQU0OR AX MOD400EQU0,要运用分支语句进行设计,余数是否为零是产生分支的缘由其次个算法是字符串转换其对应的十六进制数值,对每一位字符减去48即30H就可以转换成为16进制数
4.3调试过程与结果分析INT21h/AH=OAh-input ofa stringto DS:DX,f ist byteis buffersize,second byteis numberof chars actuallyread,this functiondoes not add$in the endof string,to printusing INT21h/AH=9you must setdollarcharacter atthe endof itand startprinting fromaddress DS:DX+
2.进行程序调试时,对字符串的定义不清,所以在给变量进行定义时安排内存空间出错然后是对闰年计算出错,在进行闰年计算时,将字符串首位转换为年份的千位要连续三次乘以十,此时CX限制循环次数所以要对CX重新进行赋值,百位,十位的转换类似,都要对CX重新赋值第三个问题是在主模块设计时,要对标记寄存器初始化,由于在进行语句编写后,计数寄存器有了初值要进行后续编写时要清零,这是本次编写程序中存在的最微小但是影响最大的问题,干脆导致程序的功能出错调试过程中出现错误如图4-3-1filemathdebugviewexternalvirtualdevicesvirtualdrivehelp百0ll li■i iJa tLoadreload stepbacksinglestep runstepdelayms:400cegise F400:0200F400:0200f$HAX0910F4200:FF255R BIOSDIF4201:FF255RBX0000hQZUZ01E4F4203:0000F4204:F4205:cs F400F4206:IP0200F4207ss0716F4208:SP00C2F4209:BP0000F420A:F420B:SI0000F420C:DI0000F420D:DS0710F420E:F420F:▼ES0700U2C000000000000Z020000000000001F000000000000037000000000000-30000000000000YI.7NNNNNNNNNNNNn.HiinRDDDDDDDDDDDDD.TEDDDDDDDDDDDDD.TBBBBBBBBBBBBB1xxxxxxxxxxxxxzsssssssssssssAAAAAAAAAAA图4-3-1CX有初值未清零心得体会通过本次课程设计,了解了EMU8086系统的编程方法,学习了如何编写简洁的汇编语言程序在编程的过程中,发觉了许多的问题,对汇编语句的不熟识是最大的问题比如分支语句,跳转语句,在比较时,标记寄存器发生改变与否是比较和是否跳转的关键除法语句在运用时不够16位或32位的要进行拓展否则无法进行除法语句的操作,商和余数分别存放在AH和AL中,故在推断余数是否为零时要与AL相比较,而非AX.在同学的帮助下,通过查找资料和不断的调试最终解决问题这次课程设计熬炼了发觉问题,解决问题的实力,同时也熬炼了查找资料,阅读文献的实力,为以后的毕业设计和论文写作打下基础微机原理与借口技术在自动化专业中要常常运用,故这门课的课程设计也提高运所学学问的实力,通过实践检验理论学问,加强对学问的驾驭,最终运用到今后的科研或工作当中感谢在此次课程设计中赐予帮助的老师和同学回顾此次课程设计,课程设计是一个把需求分析、程序编写、程序调试、撰写报告结合为一体的过程在这个过程中,不仅熬炼了缜密的思维和坚持不解的毅力,更须要互助的精神只有通过一起努力才能将课程设计的全部环节都顺当的完成另外程序设计中遇到问题并解决问题的过程,使得独自探究并解决问题的实力了有了一个提高,这有利于以后的学习同时这整一个过程,也对程序编写的整个过程有了一个统筹全局的思想,因为需求分析、程序编写、程序调试、撰写报告这些过程是环环相扣的,肯定不行能独立进行参考文献⑴李艳芳EMU8086和DEBUG在微机教学中的运用湖南科技学院学报2013
[2]刑江基于EMU8086汇编语言设计探讨湖北师范学院学报2010
[3]古兆麟基于EMU8086虚拟微机系统试验设计天津职业师范技术学院学报2011
[4]宋长军汇编语言学习与编程规律浅谈吉昌学院学报2008
[5]熊小兵汇编语言程序设计的比较方法学计算机教化2010
[6]EMU8086在微机原理教学中的运用黑龙江科技信息2009⑺彭虎微机原理与接口技术电子科技高校出版社8]Randall Hyde.The Artof Assembly Language[M].No Starch.20059]Kip R.Irvine.AssemblyLanguagefor x86Processors6thEdition[M].Prentice Hall.2011
22.
22.
53.
54.
1.设计任务与要求分析
1.1课程设计的目的1使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较娴熟地完成汇编语言程序的设计和调试2培育学生从资料文献、科学试验中获得学问的实力,提高学生从别人阅历中找到解决问题的新途径的悟性,初步培育工程意识和创新实力
1.2闰年推断程序设计初始条件该程序实现通过键盘输入一年份,然后推断该年份是否为闰年,假如是闰年,则在屏幕上显示该年是闰年假如不是,则显示该年不是闰年,假如输入的是非法字符,则显示错误,重新输入从上述要求分析,本次设计要运用多次循环语句和分支语句,循环语句用来将字符串转换成十六进制数字,表示年份,分支语句在进行计算后推断余数是否为零从而推断输入年份是否为闰年所以对本次设计运用模块化思想,用子程序完成字符转换功能,主程序完成闰年推断并显示功能
2.方案比较与认证说明
2.1方案比较程序要求实现通过键盘输入一年份,然后推断该年份是否为闰年,假如是闰年,则在屏幕上显示该年是闰年假如不是,则显示该年不是闰年
2.
1.1采纳汇编语言设计方案一采纳汇编语言,运用软件EMU8086设计将输入年份保存到AX中,然后推断AXM0D4EQU0AND AXMOD100EQU0OR AXMOD400EQU0,通过分支语句,若满意上述条件则输出“该年为闰年”,否则输出“该年不为闰年”
2.
1.2采纳C语言设计方案二采纳机器编程语言,运用软件C++设计将输入年份复制给X,然后通过语句X%4=0ANDX%100=00RX%400=0推断输入年份是否为闰年满意条件将输出“该年为闰年”,否则输出“该年不为闰年”
2.2方案论证方案一采纳的是汇编语言,汇编语言干脆描述机器指令,比机器指令简洁记忆和理解,而且可以通过调试视察数据在内存中的存储状态,将软件与硬件相结合汇编语言是低级语言,在编写程序的时候会把依据不同的状况指定运用不同的寻址方式,能够对内存和CPU里的通用寄存器干脆操纵不同的计算机系列会有不同的汇编语言而C语言是高级语言,可以实现跨平台编写程序无需指定CPU的指令执行状况,一段程序可以在不同体系结构的计算机上运用C语言的运用范围更为广袤,但在初学计算机语言时,运用汇编语言可以更简洁理解软件与硬件之间的联系,了解算法执行的过程,故在本次设计中采纳方案一进行设计,而且程序简洁,可运用单步调试,逐步分析每一句程序的运行过程
3.系统原理阐述
3.1软件思想EMU8086是Digital River公司推出的一款较为先进的16位PC仿真软件,他将汇编语言程序设计和虚拟接口技术有机的结合起来,它内部集成了汇编语言的源程序的编译器和连接器,并供应一些参考例程,带有学习指南,还供应诸如交通灯、异步电机等一系列虚拟外设,是学习Inter8086/8088微处理器的工作原理和进行汇编语言设计的较为志向的工具其操作界面简洁直观,有菜单栏、快捷按钮通过他们可以便利视察到处理器执行指令的各个步骤,其中的单步调试single step功能能显示指令执行后CPU内部存储器、堆栈区、变亮和标记寄存器的当前值这个模拟器是在一台“虚拟”的电脑上运行程序的,他拥有自己独立的“硬件”,这样程序就犹如诸如硬盘与内存这样的实际硬件完全隔离,动态调试特别便利8086机器代码同Inter下一代处理器完全兼容,这意味着8086代码具有特别广泛的运用范围,另一特点是他的指令集特别小,学起来便利,同主流汇编程序相较,其语法简洁得多,但是他能生成任何兼容8086机器语言的代码
3.2程序设计原理总体程序设计原理是由汇编语言编写的推断年份是否为闰年的小程序在运行程序后,屏幕会先提示输入一个年份,操作者输入年份后系统会自动推断该年是否为闰年,推断的语句为AXMOD4EQU0AND AXMOD100EQU0OR AXMOD400EQU0AX为累加器,其中存放的是操作者输入的年份程序完成的主o要功能有
1.提示操作者输入一个年份
2.推断年份是否闰年
3.输出该年份是否为闰年
3.3程序设计流程图闰年推断流程图见图3TT
3.4汇编源程序
3.
4.1主模块程序主模块显示提示输入年份以与输入的字符内容,和最终输出的推断是否为闰年
3.
4.2子模块程序设计子模块
①推断输入该模块是对输入的年份的格式的推断,若是错误则显示错误Error,正确则进行下面的操作
②字符串转换格式将数字字符串转换成数字,以便进行下面的程序操作
③推断闰年推断输入的年份是否为闰年,若是则输出“This isaleapyear!”,若不是则输出“This isnotaleapyear!”,然后退出ifyears procnear;此子程序用来推断年份是否为闰年push bxpushexpushdx。
个人认证
优秀文档
获得点赞 0