还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
计算机原理与汇编——课程设计报告姓名学号班级指导老LEA DX,fwe;不成功,显示错误信息,关闭文件,并结束程序MOV AH,9贺建飕INT21H JMPexitcmpcx:;判断实际读入的字数是不是CMP CX,512512;如果是说明还没读到文件尾JE readfLEA512,DX,fcs MOV;显示‘复制成功’AH,9INT21Hexit:MOV AH,3EH;关闭文件INT21HMOV BX,fnum_sMOV AH,3EHINT21HMOV AX,4C00HINT21Hcode ENDSENDstart师:程序运行结果情况一源文件不存在国DOSBox
0.74Cpu speed:3000cycles,Frameskip0,Program:f Please input the path and name ofsource fileC:\ABC.TXTFile has not existed!情况二目标文件已存在H DOSBox
0.74Cpu speed:3000cycles,Frameskip0,Prograrrf Pleaseinput thepath andname ofsource fileC:\AAA.TXT Pleaseinput thepath andname ofsource fileC:\CCC.TXTObject filehas existed情况三复制成功回DOSBox
0.74,Cpu speed:3000cycles,Frameskip0Program:TEMPF.f Pleaseinput thepath andname ofsource fileC:\AAA.TXT Pleaseinput thepath andname of object fileC:\BBB.TXTFile copyedsucceed.目标文件夹文件情况计算机,Windows8_OS C:►名称修改日期力大小,,BBB2014/7/514:121KB冒AAA2014/7/514:121KB1o CCC2014/7/514:100KB
六、总结在进行循环程序设计时,要注意循环初始化、内外层循环的控制、循环结束条件等的设置,对整个程序的执行逻辑要非常清楚,这样可以避免死循环等意外情况的出现多层循环的控制更为复杂,编写代码时,要注意注释重要的循环控制部分,这样思路才不会乱同时要对照流程图,随时观察代码的逻辑思路是否正确在程序的制作过程中,遇到了很多意想不到的困难,自己一个人解决起来有很大的困难,于是也少不了同学的帮助,深刻体会到开发程序不只是一两个人就能很好地完成的,要大家互相帮助,共同探讨问题,才能更好的解决困难汇编语言课程设计
一、设计目的课程设计是计算机原理与汇编语言教学过程中的重要环节本课程设计主要目的是使计算机专业学生深入学习计算机原理与汇编语言知识,进一步提高学生计算机原理与汇编语言综合能力和程序设计技能,锻炼运用计算机原理与汇编语言解决实际问题的能力
二、设计要求认真查阅资料,独立完成设计任务,每道题都必须上机通过
1.独立思考,培养综合分析问题解决问题和调试程序的能力
2.按时完成课程设计,写出课程设计报告
3.
三、设计内容及原理㈠设计内容使用到子程序以内的素数,以十进制形式输出
1.100用递归计算以内数,以十进制形式输出
2.50Fibonacci编写一拷贝程序,要求在命令行指定源文件名和目标文件名
3.㈡设计原理结合几种含有特定功能的子程序以完成设计要求
1.建立循环程序递归计算数
2.Fibonacci.根据输入判断文件是否存在并执行拷贝过程3
四、设计思路使用到子程序以内的素数,以十进制形式输出
1.100按照设计要求,可以建立个子程序,一个判断素数子程序,一个显示素数子程序,一个3将素数以十进制形式输出子程序,然后在主程序中调用子程序,程序框架得以构建用递归计算以内数,以十进制形式输出
2.50Fibonacci按照设计要求,可以建立循环子程序,递归计算数,以十进制形式输出,再将Fibonacci新数与比较,大于则退出循环,程序结束.Fibonacci5050编写一拷贝程序,要求在命令行指定源文件名和目标文件名
3.在数据段中编写各种提示语句,在代码段中加入各种判断语句及中断跳转语句,程序运行时,即可根据命令行输入的指定源文件名和目标文件名执行相应的功能
五、实现步骤使用到子程序以内的素数,以十进制形式输出
1.100程序代码如下DATAS SEGMENT存放素数的个数count dw0;存放素数sushu db100dup;;显示素数的提示信息msgsushu dball prime numbers below100are:$;;示素数个数的提示信息msgcount db0dh,0ah,count ofprime numbersis:,0dh,0ah,$2K DATASENDSCODESEGMENTassume cs:CODE,ds:DATAS;主程序入口MAIN PROCFARcall jisuan显示素数的提示信息lea dx,msgsushu;mov ah,9int21h显示素数call dispsushu;显示素数个数的提示信息lea dx,msgcount;mov ah,9int21h显示素数个数call dispcount;按任意键退出mov ah,1;int21h;程序结束,返回到操作系统系统mov ax,4c00hint21hMAIN ENDPjisuanproc nearmov ax,datasmov ds,axlea di,sushumov bh,0求从到的素数、素数个数,从到变化mov bl,2;2100BL2100nextll:cmp bl,100jatj如果不能被从到整除的话,则为素数mov dl,2;BL DL2BL-1BLnext12:cmp dl,bljae nextl3mov ax,bxdiv dlcmpah,0整除则不是素数jz nextl4;inc dljmpnext12next13:是素数,贝将个数力口inc count;1J1是素数,则存入相应单元中mov[di],bl;inc dinext14:inc bljmpnext11tj:retjisuan endpdispsushuproc nearleasi,sushumov ex,countnext21:每行个素数movax,count;10sub ax,exmov bl,10div blcmpah,0jnz next22每行个素数,行末加回车换行mov dl,Odh;10mov ah,2int21hmov dl,Oahmov ah,2int21hnext22:取出一个素数movmov bh,0以十进制形式输出call displO;每个素数之间加一个空格,便于区分mov dl,20h;mov ah,2int21hinc siloopnext21retdispsushu endpdispcountproc near取出素数个数mov bx,count;以十进制形式输出call displO;retdispcount endp该子程序的作用是将中的数以十进制形式输出displO procnear;BX pushexmov cx,10dcall dec_divmov ex,Idcall dec_divpop exretdec_div procnearmov ax,bxmov dx,0div exmovbx,dxmov dl,aladd dl,3Ohmov ah,2int21hretdec_div endpdisplOendpCODE ENDSENDMAIN程序运行结果:DOSBOX DOSBox
0.74Cpu speed:3000cycles.Frameskip0,PnrOZ03050711131719Z329313741434753596167717379838997count ofprime numbersisZ5Press anykey tocontinue allprimenumbersbelou100are用递归计算以内数,以十进制形式输出
2.50Fibonacci程序代码如下ASSUME CS:CODES,DS:DATASDATAS SEGMENTM2DB13,10,Fibonacci numbers which below50are:$N1DW0N2DW1DATAS ENDSCODESSEGMENTSTART:MOV AX,DATASMOV DS,AXLEA DX,M2MOV AH,9INT21HMOV DL/TMOV AH,2INT21HMOV DLJINT21HLP:MOV AX,N1ADD AX,N2MOV BX,N2MOV N1,BXMOV N2,AXCMP N2,50JA EXITCALLOUTPUT一MOV DL,MOV AH,2INT21HCMP N2,50JNA LPEXIT:MOV AH,4CH;返回INT21H DOSOUTPUT:MOV BX,10MOV CX,0OL1:MOV DX,0DIV BXADDDL,ODXPUSHCXINCAX,0CMPJNZ OLIMOV AH,2OL2:POP DXINT21HJA EXITLOOPOL2RETCODES ENDSENDSTART程序运行结果DOSFOX DOSBox
0.74Cpu speed:3000cycles,Frameskip0,Program:f ibonaccinumberswhichbelou50are11Z35813Z134Press anykey tocontinue编写一拷贝程序,要求在命令行指定源文件名和目标文件名
3.程序代码如下data SEGMENTmesslDB Pleaseinput thepath andname ofsource file:\0DH,0AH,24Hmess2DB ODHQAH,Pleaseinputthepathandnameofobjectfile:1,07H,0DH,0AH,24Hfnf DB0DH,0AH;File hasnot existed!,07H,0DH,0AH,24Hfdf DBODHQAH,Object filehas existed!;07H,0DH,0AH,24Hfde DBODH,OAH;Object pathhasnotexisted!,07H,0DH,0AH,24Hfre DB0DH,0AH,Reading error.1,07H,0DH,0AH,24Hfwe DB0DH,0AH;Writting error/,07H,0DH,0AH,24Hfcs DB0DH,0AH;File copyedsucceed.,,0DH,0AH,24Hfbuffer DB128DB9DBfname128DUP9*fnum_s DW9*fnum_d DWbufferDB512DUP dataENDScode SEGMENTASSUMECS:code,DS:data start:MOV AX,dataMOV DS,AXPUSH DSPOPESfullO:LEA DX,messlMOV AH,9INT21HCLDMOV CX,128MOV AL,0LEA DI,fnameREP STOSBLEA DX,ftufferMOV AH,0AHINT21H;将输入文件名的最后一个回车符换成因为建立的文件名不能包括不可见MOV BL,[fbuffer+l]0,字符XOR BH,BHMOV SI,OFFSET fnameADDSI,BXMOV BYTEPTR[SI],0LEA DX,fnameMOV AX,3D00HINT21H;打开成功JNC openLEA DX,fnfMOV AH,9INT21H;重新输入JMP fullO;打开成功,保存源文件号open:MOV fnum_s,AXfulll:LEA DX,mess2MOV AH,9INT21H;充将上次输入的文件名清零CLD0,;文件名最大字符,包括回车符MOV CX,128128MOV AL,0LEA DI,fnameREPSTOSB;输入文件名LEA DX,fbuffer;键盘输入到缓冲区缓冲区首地址MOV AH,0AH DS:DX=INT21HMOV BL,[fbuffer+l]XOR BH,BHMOV SI,OFFSET fnameADDSI,BXMOV BYTEPTR[SI],0LEADX,fnameMOV AX,3D00HINT21H;打开不成功JC setupLEADX,fdfMOV AH,91NT21HJMP exitsetup:LEADX,fname;建立新文件MOVAH,3CHINT21H;建立成功JNC saveLEADX,fdeMOV AH,9INT21HJMP exit;保存新文件号save:MOV fnum_d,AX;以只写方式打开新文件MOVAX,3D01HINT21Hreadf:;取源文件号MOV BX,fnum_s;读出个字符MOV CX,512512MOV DX,OFFSET bufferMOVAH,3FHINT21H;读成功,则写JNC writef;不成功,显示错误信息,关闭文件,并结束程序LEADX,freMOVAH,9INT21HJMP exitwritef:;取新文件号MOV BX,fnum_d;按实际读入字数写文件MOV CX,AXMOV AH,40HINT21H;写成功JNC empex。