计算机组成与汇编课程设计报告(20201111181230).docx

上传人:rrsccc 文档编号:9885773 上传时间:2021-04-01 格式:DOCX 页数:25 大小:125.81KB
返回 下载 相关 举报
计算机组成与汇编课程设计报告(20201111181230).docx_第1页
第1页 / 共25页
计算机组成与汇编课程设计报告(20201111181230).docx_第2页
第2页 / 共25页
计算机组成与汇编课程设计报告(20201111181230).docx_第3页
第3页 / 共25页
计算机组成与汇编课程设计报告(20201111181230).docx_第4页
第4页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《计算机组成与汇编课程设计报告(20201111181230).docx》由会员分享,可在线阅读,更多相关《计算机组成与汇编课程设计报告(20201111181230).docx(25页珍藏版)》请在三一文库上搜索。

1、CENTRAL SOUTH UNIVERSITY计算机组成与汇编课程设计报告学生姓名 汪锋指导教师 杨希专业班级完成时间学 院信息科学与工程学院计科08022011年7月目录1设计内容 22设计目的 23概要设计 24详细设计 25程序代码 96 运 行 结 果 207设计总结 20参 考 文 献 21、设计内容1输入 2030 之间的 n 值 , 用递归计算 Fibonacci 数 , 以十进制数输出2编写一拷贝程序,要求在命令行指定源文件名和目标文件名 .3编写一个成绩统计程序,接收一批(最多 20 个)从键盘录入的 0-100 之间的十进制格 式的分数值, 无数据直接回车时结束成绩录入。

2、 然后显示录入的总人数, 总分, 平均分 值(十进制整数格式),显示优秀,良好,中等,及格和不及格人数。(注: 90 以上优秀 80 以上良好 70 以上中等 60 以上及格 60 以下不及格 )4虚拟平台的模型机实验、设计目的课程设计是计算机原理与汇编语言教学过程中的重要环节。本课程设计主要目的是使计 算机专业学生深入学习计算机原理与汇编语言知识,进一步提高学生计算机原理与汇编语言 综合能力和程序设计技能,锻炼运用计算机原理与汇编语言解决实际问题的能力。三、概要设计1、实验一是 Fibonacci 数列的求值,可通过递归调用实现。2、实验二是要求复制文件,通过给出的文件名找到并打开文件,然后

3、将文件内容读入内存, 建立一个新文件,将内存中的内容写入心文件中。3、实验三要求对学生成绩进行统计, 并输出相关信息。 可先将输入数据读入一个数组中, 每 读入一个数据,计算器家 1,将读入的所有数据相加得到总分,并对每个数据进行比较,统 计相应等级。4、实验三是虚拟实验, 要求通过给出的各种芯片和元器件, 连接成一个虚拟机, 并进行相关 的指令操作。四、详细设计1、Fibonacci 数列求值 算法思想是先将输入的字符存入数组中,然后将其转化为十进制数,再通过调用递归函数实 现求值,最后将结果转化为字符串后输出。主要代码如下:数据段的定义:data segment; 数据段buf db 3,

4、?,3 dup (?) buf1 db 5 dup (?) db $buf2 db 0flag db 1mess1 db enter the number: ,$ mess2 db 13,10,result: ,$ buf3 db 1,24 dup (0) buf4 db 1,24 dup (0)data ends输入参数并将参数转化为十进制数lea dx,mess1 ;提示输入mov ah,9int 21hmov dx, offset buf ;输入参数 mov ah,0ahint 21hlea si,buf ;计算参数的值push ax mov al,0 sub byte ptr si+2

5、,30h add al,byte ptr si+2递归调用的子程序code2 segment ;子程序assume cs:code2,ds:data,ss:sseg sum proc farlea si,buf3cmp dl,buf2jb sum1jmp exitsum1:inc dllea di,buf4mov cx,25s1:mov al,simov bl,diadd di,alcmp byte ptr di,10djb s2sub byte ptr di,10d add byte ptr si+1,1s2: mov si,bl inc di inc si loop s1 call sum

6、 exit :ret sum endp code2 ends将结果输出 mov dl,0dh ;输出 mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h2、文件复制文件复制主要算法流程为先将输入的文件名存入一个缓冲区并打开文件,打开文件后,以 512 个字节为单位将文件内容读入到内存缓冲区中,知道源文件末尾。读完文件后,根据输 入的目标文件名创建文件,然后同样以512 字节为单位将内存缓冲区中的字符串写入目标文件中,写操作完成后,关闭文件。其主要代码如下: 数据段:dataSEGMENTmess1DBPlease,input file name: ,0DH

7、,0AH,24Hmess2DB0DH,0AH, Please,input destination file name:,07H,0DH,0AH,24HfnfDB0DH,0AH, file has not existed! ,07H,0DH,0AH,24HfdfDB0DH,0AH, Destination file has existed!,07H,0DH,0AH,24HfdeDB0DH,0AH, Destination path has not existed!,07H,0DH,0AH,24HfreDB0DH,0AH, reading error. ,07H,0DH,0AH,24HfweDB0

8、DH,0AH, writting error. ,07H,0DH,0AH,24HfcsDB0DH,0AH, File copyed succeed. ,0DH,0AH,24HfbufferDB128;缓冲区DB?fnameDB128 DUP (?) ;字符串名fnum_sDW?;源文件号fnum_dDW?;新文件号bufferDB512 DUP (?) ;字符串内容dataENDS存入文件名称:full0:LEA DX,mess1 ;提示信息输出MOV AH,9INT 21HCLDMOV CX,128 ;将文件名存入 fname 中MOV AL,0LEA DI,fnameREP STOSB字符

9、读入内存:readf:MOV BX,fnum_s;取源文件号MOV CX,512;读出 512个字符MOV DX,OFFSET bufferMOV AH,3FHINT 21HJNC writef;读成功,则写LEA DX,fre;不成功,显示错误信息,关闭文件,并结束程序MOV AH,9INT 21HJMP exit字符写入目标文件:writef:MOV BX,fnum_d;取新文件号MOV CX,AX;按实际读入字数写文件MOV AH,40HINT 21HJNC cmpcx;写成功LEA DX,fwe;不成功,显示错误信息,关闭文件,并结束程序MOV AH,9INT 21HJMP exit关

10、闭文件:exit:MOV AH,3EH;关闭文件INT 21HMOV BX,fnum_sMOV AH,3EHINT 21HMOV AX,4C00HINT 21H3、成绩统计程序算法思想是先将键盘输入的字符串成绩转化为十进制后存入内存缓冲区中,读入的同时进行 计数。然后通过循环语句实现成绩的评定统计与累加过程,将总分除以计数器即得平均分。 最后将所得数据转化为字符串后显示出来。主要代码如下:数据段:DATA SEGMENTSTRING1 DBSTRING2DBPlease Input Score: ,$ The total number is: ,$STRING3DBThe sum is: ,$

11、STRING4DBENTER1DB* *,*0AH,0DH, $0AH,0DH, $SCORETMPDW 60 DUP (?)DB 0,0,0,0;分配存储空间S5DW;定义变量S6DWS7DWS8DWS9DWS10DWTOTALSCORE DB 0DATA ENDS输入:INPUT:MOV AH,1INT 21H;输入一个字符CMP AL,30HJB ENTER2CMP AL,39HJNB INPUTMOV AH,ALMOV BH,10MOV AL,BLMUL BHMOV BL,AL;AB=A*10+BJMP INPUT显示总人数:NUM:;显示总人数MOVDX, OFFSET STRING

12、2;输出“ the total number isMOV AH,09HINT 21HMOV AX,DICALL B_TO_DCALL OUTTMP计算并显示总分:SUM:MOV SI,6MOV BX,SCORESIADD AX,BXSUB SI,2JNS SUMLEA BX,TOTALSCOREMOV BX,AXCALL B_TO_DCALL OUTTMP;output the nuber of students;计算总分;显示总分;output the total score4、虚拟平台的模型机实验模型机示意图:根据上图进行连线,检查无误后开始进行测试,选择菜单中的“工具”,再选择“模型机调

13、试”,在指令输入窗口中输入如下指令:00000000000100000000100100100000000010110011000000001011010000000000000000000001这里做的是个加法运算,第一个加数已经存入到内存的0000 1010单元中,第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮,选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。在实验运行 面板中双击连续脉冲,模型机便开始工作。五、程序代码Fibonacci 数列求值data segment; 数据段bufdb 3,?,3 dup (?)buf1db

14、5 dup (?)db $buf2db 0flagdb 1mess1 db enter the number: ,$ mess2 db 13,10,result: ,$ buf3 db 1,24 dup (0) buf4 db 1,24 dup (0)data endssseg segment stack ;堆栈段dw 512 dup (?)sseg endscode1 segment;代码段assume cs:code1,ds:data,ss:ssegstart :xor dx,dxmov ax,datamov ds,axlea dx,mess1mov ah,9int 21hmov dx,

15、offset bufmov ah,0ahint 21hlea si,buf ;计算参数的值 push ax mov al,0 sub byte ptr si+2,30h add al,byte ptr si+2cmp byte ptr si+3,30hjb suan1 mov cl,10 mul clsub byte ptr si+3,30h add al,byte ptr si+3suan1:mov buf2,al pop ax mov dl,2 push si lea di,buf4 call far ptr sum pop simov dl,0dh ;输出 mov ah,2 int 21

16、hmov dl,0ah mov ah,2 int 21hlea dx,mess2 mov ah,9 int 21hs3:cmp flag,1 jnz s5 cmp byte ptr di,0 jz s6 mov flag,0s5:mov dl,di add dl,30h mov ah,2 int 21hs6:dec dicmp di,offset buf4 jae s3mov ah,4ch int 21hcode1 ends code2 segment ;调用函数assume cs:code2,ds:data,ss:sseg sum proc farlea si,buf3cmp dl,buf2

17、jb sum1 jmp exitsum1:inc dllea di,buf4mov cx,25s1:mov al,simov bl,di add di,alcmp byte ptr di,10djb s2sub byte ptr di,10dadd byte ptr si+1,1s2:mov si,bl inc di inc si loop s1 call sumexit :ret sum endp code2 endsendstart文件复制dataSEGMENTmess1DBPlease,input file name: ,0DH,0AH,24Hmess2DB0DH,0AH, Please

18、,input destination file name:,07H,0DH,0AH,24HfnfDB0DH,0AH, file has not existed! ,07H,0DH,0AH,24HfdfDB0DH,0AH, Destination file has existed!,07H,0DH,0AH,24HfdeDB0DH,0AH, Destination path has not existed!,07H,0DH,0AH,24HfreDB0DH,0AH, reading error. ,07H,0DH,0AH,24HfweDB0DH,0AH, writting error. ,07H,0

19、DH,0AH,24HfcsDB0DH,0AH, File copyed succeed. ,0DH,0AH,24HfbufferDB128DB?fnameDB128 DUP (?)fnum_sDW?fnum_dDW?bufferDB512 DUP (?)dataENDScodeJSEGMENTASSUME CS:code,DS:data start : MOV AX,dataMOV DS,AXPUSH DSPOP ES full0: LEA DX,mess1MOV AH,9INT 21HCLDMOV CX,128MOV AL,0LEA DI,fnameREP STOSBLEA DX,fbuff

20、erMOV AH,0AHINT 21H0,因为建立的文件MOV BL,fbuffer+1;将输入文件名的最后一个回车符换成名不能包括不可见字符XOR BH,BHMOV SI,OFFSET fnameADD SI,BXMOV BYTE PTR SI,0LEA DX,fnameMOV AX,3D00HINT 21HJNC open;打开成功LEA DX,fnfMOV AH,9INT 21HJMP full0;重新输入open: MOV fnum_s,AX;打开成功,保存源文件号full1: LEA DX,mess2MOV AH,9INT 21HCLD;充0,将上次输入的文件名清零MOV CX,12

21、8;文件名最大 128字符,包括回车符MOV AL,0LEA DI,fnameREP STOSBLEA DX,fbufferMOV AH,0AHINT 21H;输入文件名;键盘输入到缓冲区DS:DX= 缓冲区首地址MOV BL,fbuffer+1XOR BH,BHMOV SI,OFFSET fnameADD SI,BXMOV BYTE PTR SI,0LEA DX,fnameMOV AX,3D00HINT 21HJC setup;打开不成功LEA DX,fdfMOV AH,9INT 21HJMP exitsetup: LEA DX,fnameMOV AH,3CH;建立新文件INT 21HJNC

22、 save;建立成功LEA DX,fdereadf:MOV BX,fnum_s;取源文件号MOV CX,512;读出 512个字符;保存新文件号;以只写方式打开新文件MOV AH,9 INT 21H JMP exit save: MOV fnum_d,AXMOV AX,3D01H INT 21HMOV DX,OFFSET bufferMOV AH,3FHINT 21HJNC writefLEA DX,fre;读成功,则写;不成功,显示错误信息,关闭文件,并结束程序MOV AH,9INT 21HJMP exitwritef: MOV BX,fnum_d;取新文件号MOV CX,AX;按实际读入字

23、数写文件MOV AH,40HINT 21HJNC cmpcx;写成功LEA DX,fwe;不成功,显示错误信息,关闭文件,并结束程序MOV AH,9INT 21HJMP exitcmpcx: CMP CX,512JE readf;判断实际读入的字数是不是 512;如果是 512,说明还没读到文件尾LEA DX,fcs;显示复制成功MOV AH,9INT 21Hexit: MOV AH,3EH;关闭文件INT 21HMOV BX,fnum_sMOV AH,3EHINT 21HMOV AX,4C00HINT 21Hcode ENDSEND start成绩统计DATA SEGMENTSTRING1

24、DBSTRING2DBPlease Input Score: ,$ The total number is: ,$STRING3DBThe sum is: ,$STRING4DBENTER1DB* *,*0AH,0DH, $0AH,0DH, $SCOREDW 60 DUP (?);分配存储空间TMP DB 0,0,0,0S5DW 0;定义变量S6DW 0S7DW 0S8DW 0S9DW 0S10 DW 0TOTALSCORE DB 0DATA ENDS;STACK SEGMENT; DW 64 DUP(0);STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DAT

25、A;堆栈段;代码段;,SS:STACKMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXJXORBX,BXXORCX,CXXORSI,SIXORDI,DICALL INSCORECALL SUMSCORE ;寄存器清零MOV AH,4CHINT 21HMAIN ENDP;返回 DOSB_TO_D PROC NEAR PUSH BX PUSH SI PUSH CXMOV CX,03HINIT:MOV SI,CXMOV TMPSI,0 DEC CXMAIN PROC FARJNS INITTHOUSAND: SUB AX,30H CMP AX,1000 JB HUNDREA

26、D MOV SI,03H MOV BH,10 DIV BHMOV TMPSI,AHHUNDREAD: JB TEN CMP AX,100 MOV SI,02H DIV BH MOV TMPSI,AHTEN:CMP AX,10 JB ONE MOV SI,01H DIV BHMOV TMPSI,AH DEC SIMOV TMPSI,ALPOP SI POP BX POP CXRETONE:MOV SI,0MOV TMPSI,ALPOP BXPOP SI RETB_TO_D ENDPOUTTMP PROC NEAR PUSH SI PUSH CXMOV CX,3OUTPUT:MOV SI,3MOV

27、 DL,TMPSIMOV AH,02HINT 21HLOOP OUTPUTPOP SIPOP CXRETOUTTMP ENDPINSCORE PROC NEARPUSH AX PUSH BX PUSH DXPUSH DI PUSH SIMOVDX, OFFSETSTRING1;输入“ please input the scoreMOVAH,09HINT 21HMOVDX, OFFSETENTER1;输出 回车 MOVAH,09HINT 21HINPUT:;输入一个字符MOV AH,1INT 21HCMP AL,30HJB ENTER2CMP AL,39HJNB INPUTMOV AH,AL ;

28、AB=A*10+BMOV BH,10MOV AL,BLMUL BHMOV BL,ALJMP INPUTENTER2:CMP AL,0DHJZ OVERSPACE2:CMP AL,20H;是否为回车键;是就跳到 OVERJZ SAVEJMP INPUT;是否为空格;是就跳到 SAVESAVE:;保存到 SCORE 中MOV AL,BLCBWMOV SCORESI,AXADD SI,2INC DIJMP INPUTOVER:;保存最后一个数据,并存放到 SCORE 中MOV AL,BLCBWMOV SCORESI,AXINC DIMOV DL,0AHMOV AH,02HINT 21HNUM:;显示

29、总人数MOV DX, OFFSET STRING2;输出“ the total number is :”MOV AH,09HINT 21HMOV AX,DI;output the nuber of studentsCALL B_TO_DCALL OUTTMPMOV DX, OFFSET ENTER1;输出 回车 MOV AH,09HINT 21HPOP AXPOP BXPOP DXPOP DIPOP SIRETINSCORE ENDPSUMSCORE PROC NEARPUSH SIPUSH BXPUSH AXPUSH DXMOVDX, OFFSET STRING3;输出“ the sum i

30、sMOV AH,09H;计算总分INT 21HSUM:MOV SI,6MOV BX,SCORESIADD AX,BXSUB SI,2JNS SUMLEA BX,TOTALSCOREMOV BX,AX;显示总分CALL B_TO_DCALL OUTTMP;output the total scoreMOV DX, OFFSET ENTER1;输出 回车 MOV AH,09HINT 21HPOP AXPOP BXPOP DXPOP SIRETSUMSCORE ENDPCODE ENDS ;END PROGRAM END MAIN六、运行结果Fibonacci数列求值:七、设计总结两周的课程设计结束

31、了, 在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去做一件事情,又如何完成一件事情的能力。课程设计是我们专业课程知识综合应用的实践训练,也是我们迈向社会,从事职业前一个必不少的过程。通过这次课程设计,我深深 体会到“千里之行始于足下”这句千古名言的真正含义。今天认真的进行课程设计,学会脚 踏实地迈开这一步,就是为明天能稳健地在社会中奋力前进打下坚实的基础在这次课程设计过程中,体现出自己单独设计程序,综合运用知识的能力,体会了学以 致用、突出自己劳动成果的喜悦心情,但更多的从中发现自己平时学习的不足和薄弱环节, 特别是对指令的作用有所遗忘,很多时候都得从书本查询。虽然说在设计过程中遇到了诸多 的问题但是通过和同学的一起讨论,慢慢的解决了一些存在的问题,本次课程设计不仅加深 了同学间的感情,也加强了我的团队合作精神,并且激发了我今后努力学习的兴趣,可以说 获益匪浅。参考文献1、80x86 汇编语言程序设计 沈美明 温冬婵 清华大学出版社2、 IBM-PC 汇编语言程序设计实验教程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1