您好,欢迎访问三七文档
武汉理工大学《汇编语言程序设计》课程设计1学号:课程设计题目打印水仙花数学院计算机科学与技术专业计算机科学与技术班级姓名指导教师2012年6月28日武汉理工大学《汇编语言程序设计》课程设计2课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学与技术学院题目:打印水仙花数初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1)输入一个大整数n;2)将小于n的水仙花数打印出来(各位数字的立方和等于该数本身);3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名:2012年月日系主任(或责任教师)签名:2012年月日武汉理工大学《汇编语言程序设计》课程设计3打印水仙花数1.需求说明1.1设计要求:进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1.输入一个三位整数n;2.将小于n的水仙花数打印出来(各位数字的立方和等于该数本身);3.程序采用子程序结构,结构清晰;4.友好清晰的用户界面,能识别输入错误并控制错误的修改。1.2设计说明所谓“水仙花数”是指一个3位数,其个、十、百位数字的立方和等于其本身。1.3功能简述程序可以输入一个三位数,若输入有误则提示错误,并提示重新输入,若输入正确,系统将显示出所有大于等于100,并且小于等于输入数字的水仙花数。然后提示是否继续,若用户输入y或Y,则系统回到最开始的状态,若输入n或N,则退出系统,若为其他则提示错误,并重新输入。2.设计说明(简要的分析与概要设计)2.1简要分析2.1.1原理说明可以用标签来接收三位数,标签的好处在于可以限制输入的位数,并且通过实际输入位数可以直接进行一部分的异常处理。将数存到标签后,因为是以ASCII码的形式存的,所以需要进行转换,将其变成十六进制数,转换后将数字存到申请的内存字中。在转换成十六进制数的过程中,可以对输入的数进行异常处理,判断是否输入有误。武汉理工大学《汇编语言程序设计》课程设计4在输出水仙花数时,设置一个计数器,从100开始循环判断,直到等于用户输入的数为止,依次判断是否为水仙花数,决定是否输出该数。在输出时,分别取出水仙花数的个、十、百位数,转换成ASCII码再输出。系统提示是否继续后,程序对用户输入的信息进行判断,若为y或Y则系统回到初始状态,若为n或N则退出系统,若为其他则提示输入错误并重新输入。2.1.2程序流程图开始输入一个三位数n是否继续结束输入错误输入正确输出100=X=n的水仙花数输入n或N输入其他输入y或Y武汉理工大学《汇编语言程序设计》课程设计52.2数据段设计datasegmentmess1db0dh,0ah,'Pleaseinputanubmer(100=number=999):','$'mess2db0dh,0ah,'Doyouwanttocontinue(y/n)?','$'mess3db0dh,0ah,'shuixianhuashu:',0ah,'$'errordb0dh,0ah,'Inputerror,pleaseinputagain!','$'numparlabelbytemaxdb4actdb?numflddb4dup(?);存放输入的字符串,设定了最大长度,避免错误。realdw?;用于存放转换后的十六进制数dataends3.子程序设计与描述3.1输入一个三位数:;inputanumbernumprocnearleadx,mess1movah,9int21hmovah,0ahleadx,numparint21hcallconvertretnumendp3.2将输入的数据转换成十六进制数并进行异常处理:convertprocnearmovbx,0movdx,0movax,0cmpact,3;判断是否为三位数武汉理工大学《汇编语言程序设计》课程设计6jneerrmovbl,numfld[2];判断个位是否为1~9cmpbl,2fhjbeerrcmpbl,3ahjgeerrsubbl,30hmoval,numfld[1];判断十位是否为0~9cmpal,2fhjbeerrcmpal,3ahjgeerrsubal,30hmovdh,10muldhaddbl,almoval,numfld[0];判断百位是否为0~9cmpal,30hjbeerrcmpal,3ahjgeerrsubal,30hmovdh,100muldhaddax,bxmovreal,ax;将转换后的十六进制数存到内存中jmpexterr:;错误处理leadx,errormovah,9int21hcallnumext:retconvertendp武汉理工大学《汇编语言程序设计》课程设计73.2判断是否为水仙花数并输出结果(display子程序);displayshuixianhuashudisplayprocnearleadx,mess3movah,9int21hmovcx,100cmp3:movax,cx;将百位数的立方存入bx中movdh,100divdhmovdh,almuldhmuldhmovbx,axmovax,cx;将十位数的立方加到bx中movdh,10divdhmovah,0divdhmoval,ahmovdh,ahmuldhmuldhaddbx,axmovax,cx;将个位数的立方加到bx中movdh,10divdhmoval,ahmovdh,ahmuldhmuldhaddbx,axmovdx,cx;若是水仙花数则跳转到printcmpdx,bxjeprint武汉理工大学《汇编语言程序设计》课程设计8movax,real;若等于用户输入的数据则终止cmpcx,axjestopinccx;否则计数器加一继续比较jmpcmp3print:movax,bx;打印百位movdh,100divdhmovdl,aladddl,30hmovah,2int21hmovax,bx;打印十位movdh,10divdhmovah,0divdhmovdl,ahadddl,30hmovah,2int21hmovax,bx;打印个位divdhmovdl,ahadddl,30hmovah,2int21hmovdl,20hint21hmovax,realcmpax,cxjestopinccxjmpcmp3stop:retdisplayendp武汉理工大学《汇编语言程序设计》课程设计94.源程序与执行结果4.1源程序代码datasegmentmess1db0dh,0ah,'Pleaseinputanubmer(100=number=999):','$';提示输入一个三位数mess2db0dh,0ah,'Doyouwanttocontinue(y/n)?','$';提示是否继续mess3db0dh,0ah,'shuixianhuashu:',0ah,'$';提示输出水仙花数errordb0dh,0ah,'Inputerror,pleaseinputagain!','$';出错信息numparlabelbytemaxdb4actdb?numflddb4dup(?);存放输入的字符串,设定了最大长度,避免错误。realdw?;用于存放转换后的十六进制数dataendscodesegmentassumeds:data,cs:codemainprocfarstart:movax,datamovds,axgo:callnumcalldisplayagain:leadx,mess2movah,9int21hmovah,1int21hcmpal,89jegocmpal,121jegocmpal,78jeexitcmpal,110jeexit武汉理工大学《汇编语言程序设计》课程设计10leadx,errormovah,9int21hjmpagainexit:movah,4chint21hmainendp;--------------------------------------;inputanumber;输入一个三位数numprocnearleadx,mess1movah,9int21hmovah,0ahleadx,numparint21hcallconvertretnumendp;---------------------------------------;convertdecimaltohexadecimal;storetoreal;将输入的数据转换成十六进制数并进行异常处理convertprocnearmovbx,0movdx,0movax,0cmpact,3;判断是否为三位数jneerrmovbl,numfld[2];判断个位是否为0~9cmpbl,2fhjbeerrcmpbl,3ahjgeerrsubbl,30hmoval,numfld[1];判断十位是否为0~9cmpal,2fh武汉理工大学《汇编语言程序设计》课程设计11jbeerrcmpal,3ahjgeerrsubal,30hmovdh,10muldhaddbl,almoval,numfld[0];判断百位是否为1~9cmpal,30hjbeerrcmpal,3ahjgeerrsubal,30hmovdh,100muldhaddax,bxmovreal,ax;将转换后的十六进制数存到内存中jmpexterr:;错误处理leadx,errormovah,9int21hcallnumext:retconvertendp;---------------------------------------;displayshuixianhuashu;判断是否为水仙花数并输出结果displayprocnearleadx,mess3movah,9int21hmovcx,100cmp3:movax,cx;将百位数的立方存入bx中movdh,100divdhmovdh,al武汉理工大学《汇编语言程序设计》课程设计12muldhmuldhmovbx,axmovax,cx;将十位数的立方加到bx中movdh,10divdhmovah,0divdhmoval,ahmovdh,ahmuldhmuldhaddbx,axmovax,cx;将个位数的立方加到bx中movdh,10divdhmoval,ahmovdh,ahmuldhmuldhaddbx,axmovdx,cx;若是水仙花数则跳转到printcmpdx,bxjeprintmovax,real;若等于用户输入的数据则终止cmpcx,axjestopinccx;否则计数器加一继续比较jmpcmp3print:movax,bx;打印百位movdh,100divdhmovdl,aladddl,30hmovah,2int21hmovax,bx;打印十位movdh,10武汉理工大学《汇编语言程序设计》课程设计13divdhmovah,0divdhmovdl,ahadddl,30hmovah,2int21hmovax,bx;打印个位divdhmovdl,ahadddl,30hmovah,2int21hmovdl,20hint21hmovax,realcmpax,cxjes
本文标题:汇编课程设计报告
链接地址:https://www.777doc.com/doc-4411673 .html