您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 中南大学 计算机原理与汇编课程设计报告
计算机原理与汇编——课程设计报告姓名:学号:班级:指导老师:贺建飚汇编语言课程设计一、设计目的:课程设计是计算机原理与汇编语言教学过程中的重要环节。本课程设计主要目的是使计算机专业学生深入学习计算机原理与汇编语言知识,进一步提高学生计算机原理与汇编语言综合能力和程序设计技能,锻炼运用计算机原理与汇编语言解决实际问题的能力。二、设计要求:1.认真查阅资料,独立完成设计任务,每道题都必须上机通过。2.独立思考,培养综合分析问题解决问题和调试程序的能力。3.按时完成课程设计,写出课程设计报告。三、设计内容及原理㈠设计内容:1.使用到子程序100以内的素数,以十进制形式输出。2.用递归计算50以内Fibonacci数,以十进制形式输出。3.编写一拷贝程序,要求在命令行指定源文件名和目标文件名。㈡设计原理:1.结合几种含有特定功能的子程序以完成设计要求。2.建立循环程序递归计算Fibonacci数。3.根据输入判断文件是否存在并执行拷贝过程。四、设计思路1.使用到子程序100以内的素数,以十进制形式输出。按照设计要求,可以建立3个子程序,一个判断素数子程序,一个显示素数子程序,一个将素数以十进制形式输出子程序,然后在主程序中调用子程序,程序框架得以构建。2.用递归计算50以内Fibonacci数,以十进制形式输出。按照设计要求,可以建立循环子程序,递归计算Fibonacci数,以十进制形式输出,再将新Fibonacci数与50比较,大于50则退出循环,程序结束。3.编写一拷贝程序,要求在命令行指定源文件名和目标文件名。在数据段中编写各种提示语句,在代码段中加入各种判断语句及中断跳转语句,程序运行时,即可根据命令行输入的指定源文件名和目标文件名执行相应的功能。五、实现步骤1.使用到子程序100以内的素数,以十进制形式输出。程序代码如下:DATASSEGMENTcountdw0;存放素数的个数sushudb100dup(?);存放素数msgsushudb'allprimenumbersbelow100are:','$';显示素数的提示信息msgcountdb0dh,0ah,'countofprimenumbersis:',0dh,0ah,'$';显示素数个数的提示信息DATASENDSCODESEGMENTassumecs:CODE,ds:DATASMAINPROCFAR;主程序入口calljisuanleadx,msgsushu;显示素数的提示信息movah,9int21hcalldispsushu;显示素数leadx,msgcount;显示素数个数的提示信息movah,9int21hcalldispcount;显示素数个数movah,1;按任意键退出int21hmovax,4c00h;程序结束,返回到操作系统系统int21hMAINENDPjisuanprocnearmovax,datasmovds,axleadi,sushumovbh,0movbl,2;求从2到100的素数、素数个数,BL从2到100变化next11:cmpbl,100jatjmovdl,2;如果BL不能被DL从2到BL-1整除的话,则BL为素数next12:cmpdl,bljaenext13movax,bxdivdlcmpah,0jznext14;整除则不是素数incdljmpnext12next13:inccount;是素数,则将个数加1mov[di],bl;是素数,则存入相应单元中incdinext14:incbljmpnext11tj:retjisuanendpdispsushuprocnearleasi,sushumovcx,countnext21:movax,count;每行10个素数subax,cxmovbl,10divblcmpah,0jnznext22movdl,0dh;每行10个素数,行末加回车换行movah,2int21hmovdl,0ahmovah,2int21hnext22:movbl,[si];取出一个素数movbh,0calldisp10;以十进制形式输出movdl,20h;每个素数之间加一个空格,便于区分movah,2int21hincsiloopnext21retdispsushuendpdispcountprocnearmovbx,count;取出素数个数calldisp10;以十进制形式输出retdispcountendpdisp10procnear;该子程序的作用是将BX中的数以十进制形式输出pushcxmovcx,10dcalldec_divmovcx,1dcalldec_divpopcxretdec_divprocnearmovax,bxmovdx,0divcxmovbx,dxmovdl,aladddl,30hmovah,2int21hretdec_divendpdisp10endpCODEENDSENDMAIN程序运行结果:2.用递归计算50以内Fibonacci数,以十进制形式输出。程序代码如下:ASSUMECS:CODES,DS:DATASDATASSEGMENTM2DB13,10,'Fibonaccinumberswhichbelow50are:$'N1DW0N2DW1DATASENDSCODESSEGMENTSTART:MOVAX,DATASMOVDS,AXLEADX,M2MOVAH,9INT21HMOVDL,'1'MOVAH,2INT21HMOVDL,''INT21HLP:MOVAX,N1ADDAX,N2MOVBX,N2MOVN1,BXMOVN2,AXCMPN2,50JAEXITCALLOUTPUTMOVDL,''MOVAH,2INT21HCMPN2,50JNALPEXIT:MOVAH,4CHINT21H;返回DOS;---------------------------OUTPUT:MOVBX,10MOVCX,0OL1:MOVDX,0DIVBXADDDL,'0'PUSHDXINCCXCMPAX,0JNZOL1MOVAH,2OL2:POPDXINT21HJAEXITLOOPOL2RETCODESENDSENDSTART程序运行结果:3.编写一拷贝程序,要求在命令行指定源文件名和目标文件名。程序代码如下:dataSEGMENTmess1DB'Pleaseinputthepathandnameofsourcefile:',0DH,0AH,24Hmess2DB0DH,0AH,'Pleaseinputthepathandnameofobjectfile:',07H,0DH,0AH,24HfnfDB0DH,0AH,'Filehasnotexisted!',07H,0DH,0AH,24HfdfDB0DH,0AH,'Objectfilehasexisted!',07H,0DH,0AH,24HfdeDB0DH,0AH,'Objectpathhasnotexisted!',07H,0DH,0AH,24HfreDB0DH,0AH,'Readingerror.',07H,0DH,0AH,24HfweDB0DH,0AH,'Writtingerror.',07H,0DH,0AH,24HfcsDB0DH,0AH,'Filecopyedsucceed.',0DH,0AH,24HfbufferDB128DB?fnameDB128DUP(?)fnum_sDW?fnum_dDW?bufferDB512DUP(?)dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXPUSHDSPOPESfull0:LEADX,mess1MOVAH,9INT21HCLDMOVCX,128MOVAL,0LEADI,fnameREPSTOSBLEADX,fbufferMOVAH,0AHINT21HMOVBL,[fbuffer+1];将输入文件名的最后一个回车符换成0,因为建立的文件名不能包括不可见字符XORBH,BHMOVSI,OFFSETfnameADDSI,BXMOVBYTEPTR[SI],0LEADX,fnameMOVAX,3D00HINT21HJNCopen;打开成功LEADX,fnfMOVAH,9INT21HJMPfull0;重新输入open:MOVfnum_s,AX;打开成功,保存源文件号full1:LEADX,mess2MOVAH,9INT21HCLD;充0,将上次输入的文件名清零MOVCX,128;文件名最大128字符,包括回车符MOVAL,0LEADI,fnameREPSTOSBLEADX,fbuffer;输入文件名MOVAH,0AH;键盘输入到缓冲区DS:DX=缓冲区首地址INT21HMOVBL,[fbuffer+1]XORBH,BHMOVSI,OFFSETfnameADDSI,BXMOVBYTEPTR[SI],0LEADX,fnameMOVAX,3D00HINT21HJCsetup;打开不成功LEADX,fdfMOVAH,9INT21HJMPexitsetup:LEADX,fnameMOVAH,3CH;建立新文件INT21HJNCsave;建立成功LEADX,fdeMOVAH,9INT21HJMPexitsave:MOVfnum_d,AX;保存新文件号MOVAX,3D01H;以只写方式打开新文件INT21Hreadf:MOVBX,fnum_s;取源文件号MOVCX,512;读出512个字符MOVDX,OFFSETbufferMOVAH,3FHINT21HJNCwritef;读成功,则写LEADX,fre;不成功,显示错误信息,关闭文件,并结束程序MOVAH,9INT21HJMPexitwritef:MOVBX,fnum_d;取新文件号MOVCX,AX;按实际读入字数写文件MOVAH,40HINT21HJNCcmpcx;写成功LEADX,fwe;不成功,显示错误信息,关闭文件,并结束程序MOVAH,9INT21HJMPexitcmpcx:CMPCX,512;判断实际读入的字数是不是512JEreadf;如果是512,说明还没读到文件尾;LEADX,fcs;显示‘复制成功’MOVAH,9INT21H;exit:MOVAH,3EH;关闭文件INT21HMOVBX,fnum_sMOVAH,3EHINT21HMOVAX,4C00HINT21H;codeENDSENDstart程序运行结果:情况一:源文件不存在情况二:目标文件已存在情况三:复制成功目标文件夹文件情况:六、总结在进行循环程序设计时,要注意循环初始化、内外层循环的控制、循环结束条件等的设置,对整个程序的执行逻辑要非常清楚,这样可以避免死循环等意外情况的出现。多层循环的控制更为复杂,编写代码时,要注意注释重要的循环控制部分,这样思路才不会乱。同时要对照流程图,随时观察代码的逻辑思路是否正确。在程序的制作过程中,遇到了很多意想不到的困难,自己一个人解决起来有很大的困难,于是也少不了同学的帮助,深刻体会到开发程序不只是一两个人就能很好地完成的,要大家互相帮助,共同探讨问题,才能更好的解决困难。
本文标题:中南大学 计算机原理与汇编课程设计报告
链接地址:https://www.777doc.com/doc-3650834 .html