计算机组成与汇编课程设计报告_第1页
计算机组成与汇编课程设计报告_第2页
计算机组成与汇编课程设计报告_第3页
计算机组成与汇编课程设计报告_第4页
计算机组成与汇编课程设计报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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,?,3 dup

4、(?)buf1 db5 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,0ah int 21hlea si,buf ;计 算参数的 值 push ax mov al,0sub byte ptr si+2,30h add a

5、l,byte ptr si+2递归调 用的子程序 code2 segment ;子程序assumecs:code2,ds:data,ss:sseg sum proc farlea si,buf3cmp dl,buf2jb sum1jmp exit sum1:inc dllea di,buf4mov cx,25s1:mov al,simov bl,di add di,al cmp byte ptr di,10d jb s2 sub byte ptr di,10dadd byte ptr si+1,1 s2: mov si,bl inc di inc si loop s1 call sum exi

6、t :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

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

8、HfweDB0DH,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,fnameRE

9、P STOSB字符读入内存: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,

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

11、TRING3 DB The sum is:,$STRING4 DB * ,0AH,0DH, $ENTER1 DB 0AH,0DH, $SCORE DW 60 DUP(?);分配存 储 空间TMP DB 0,0,0,0S5 DW 0;定义变 量S6 DW 0S7 DW 0S8 DW 0S9 DW 0S10 DW 0TOTALSCORE DB 0DA TA ENDS输入:INPUT:;输 入一个字符MOV AH,1INT 21HCMP AL,30HJB ENTER2CMP AL,39HJNB INPUTMOV AH,AL ;AB=A*10+BMOV BH,10MOV AL,BLMUL BHMOV

12、BL,ALJMP INPUT显示总人数:NUM:;显 示 总人数MOV DX, OFFSET STRING2;输出“ thetotal number is:MOV AH,09HINT 21HMOV AX,DICALL B_TO_DCALL OUTTMP 计算并显示总分:SUM:MOV SI,6MOV BX,SCORESIADD AX,BXSUB SI,2JNS SUMLEA BX,TOTALSCORE;output the nuber of students;计算总分CALL B_TO_DCALL OUTTMP;显示总分;output the total score4、虚拟 平台的模型机 实验

13、模型机示意 图 :MOV BX,AXBUSALU-S3ssS2a巴4181)McnLDT4R1 -DR1(7423)LD肾-IJDR2(742冷RO-LD地址总线AR(74273) TT_ LDAR I JT3:PC-BPC74161LDPCT4时序一微控器IR 74273ME6 16W/RLOADCEOUTPUTCELED-BW/R数据总线W/RCS0 SW-B n cs1 _INPUTDIRT3CPU根据上图进行连线,检查无误后开始进行测试,选择菜单中的“工具”,再选择“模型机调试,在指令输入窗口中输入如下指令:000000000001000000001001001000000000101

14、10011000000001011010000000000000000000001这里做的是个加法运算,第一个加数已经存入到内存的0000 1010单元中,第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮,选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。在实验运 行面板中双击连续脉冲,模型机便开始工作。五、程序代码Fibonacci 数列求值 data segment ;数据段buf db 3,?,3 dup(?)buf1 db5 dup(?)db $buf2 db 0flag db 1mess1 db enter the number:

15、,$ mess2 db 13,10,result:,$ buf3 db 1,24 dup(0) buf4 db 1,24 dup(0) data endsssegsegment stack ;堆栈段dw 512 dup(?) ssegendscode1 segment ;代 码段assumecs:code1,ds:data,ss:ssegstart:xor dx,dxmov ax,datamov ds,axlea dx,mess1mov ah,9int 21hmov dx,offset bufmov ah,0ahint 21hlea si,buf ;计 算参数的 值push axmov al,

16、0sub byte ptr si+2,30hadd al,byte ptr si+2cmp byte ptr si+3,30hjb suan1mov cl,10mul 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 21h mov dl,0ah mov ah,2 int 21hlea dx,mess2 mov ah,9 int 21hs3:cmp

17、 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 di cmp di, offset buf4 jae s3mov ah,4ch int 21hcode1 ends code2 segment ;调 用函数 assumecs:code2,ds:data,ss:sseg sum proc far lea si,buf3 cmp dl,buf2 jb sum1 jmp exitsum1: inc dl lea di,buf4 mov cx,25s1: mov

18、 al,si mov bl,di add di,al cmp byte ptr di,10d jb s2 sub byte ptr di,10d add byte ptr si+1,1s2: mov si,bl inc di inc si loop s1 call sum exit :ret sum endp code2 ends end start文件复制dataSEGMENTmess1DBPlease,input file name:,0DH,0AH,24Hmess2DB0DH,0AH, Please,input destination file name:,07H,0DH,0AH,24H

19、fnfDB0DH,0AH, file hasnot existed!,07H,0DH,0AH,24HfdfDB0DH,0AH, Destination file hasexisted!,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,0DH,0AH,24HfcsDB0DH,0AH, File copyed succeed.,0DH,

20、0AH,24HfbufferDB128DB?fnameDB 128 DUP (?)fnum_sDW ?fnum_dDW ?bufferDB512 DUP (?)dataENDScodeJSEGMENTASSUME CS:code,DS:datastart:MOV AX,data MOV DS,AX PUSH DSPOP ESfull0:LEA DX,mess1MOV AH,9INT 21HCLDMOV CX,128MOV AL,0LEA DI,fname REP STOSBLEA DX,fbufferMOV AH,0AHINT 21HMOV BL,fbuffer+1;将输入文件名的最后一个回

21、车符换成 0,因为 建立的文件名不能包括不可 见 字符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,9;打开成功,保存源文件号INT 21HCLD ;充 0,将上次输 入的文件名清零MOV CX,128;文件名最大 128字符,包括回 车符MOV AL,0LEA DI,fnam

22、eREP STOSBLEA DX,fbuffer;输入文件名MOV AH,0AH ;键盘输 入到缓冲区 DS:DX= 缓冲区首地址 INT 21HMOV 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;建立新文件save:readf:INT 21HJNC save;建立成功LEA DX,fdeMOV

23、AH,9INT 21HJMP exitMOV fnum_d,AXMOV AX,3D01HINT 21H;保存新文件号;以只写方式打开新文件MOV BX,fnum_s;取源文件号MOV CX,512;读出 512 个字符MOV DX, OFFSET bufferMOV AH,3FHINT 21HJNC writef;读成功,则 写LEA DX,fre;不成功,显示错误 信息,关闭文件,并结束程序MOV AH,9INT 21HJMP exitwritef:JMOV BX,fnum_d;取新文件号MOV CX,AX ;按 实际读 入字数写文件MOV AH,40HINT 21HJNC cmpcx ;

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

25、,$STRING2DBThe total number is:,$STRING3DBThe sum is: ,$STRING4DB* ,0AH,0DH, $ENTER1DB0AH,0DH, $SCOREDW 60 DUP(?);分配存 储 空间TMPDB 0,0,0,0S5DW0;定义变量S6DW0S7DW0S8 DW 0S9 DW 0S10 DW 0TOTALSCORE DB 0 DA TA ENDS;STACK SEGMENT ;堆栈 段 ; DW 64 DUP(0);STACK ENDSCODE SEGMENT;代 码 段ASSUME CS:CODE,DS:DATA ;,SS:STACK

26、MAIN PROC FARMOVMOV ; MOV ; MOVAX,DA TADS,AXAX,STACKSS,AXJXORBX,BX;寄存器清零XORCX,CXXORSI,SIXORDI,DICALLINSCOREJCALLSUMSCORE ;MOV AH,4CH;返回 DOSINT 21HMAIN ENDPB_TO_D PROC NEARPUSH BXPUSH SIPUSH CXMOV CX,03HINIT:MOV SI,CXMOV TMPSI,0DEC CXJNS INITTHOUSAND: SUB AX,30H CMP AX,1000 JB HUNDREAD MOV SI,03H MOV

27、 BH,10 DIV BHMOV TMPSI,AHHUNDREAD:JB TEN CMP AX,100 MOV SI,02H DIV BHMOV TMPSI,AHTEN:CMP AX,10 JB ONE MOV SI,01H DIV BHMOV TMPSI,AH DEC SIMOV TMPSI,ALPOP SIPOP BXPOP CXRETONE:MOV SI,0MOV TMPSI,ALPOP BXPOP SIRETB_TO_D ENDPOUTTMP PROC NEARPUSH SIPUSH CXMOV CX,3OUTPUT:MOV SI,3MOV DL,TMPSIMOV AH,02HINT

28、21HLOOP OUTPUTPOP SIPOP CXRETOUTTMP ENDPINSCORE PROC NEARPUSH AXPUSH BXPUSH DXPUSH DIPUSH SIMOV DX, OFFSET STRING1;输入“ pleasienput the scoreMOV AH,09HINT 21HMOV DX, OFFSET ENTER1;输出 回 车 MOV AH,09HINT 21HINPUT:;输 入一个字符MOV AH,1INT 21HCMP AL,30HJB ENTER2CMP AL,39HJNB INPUTMOV AH,AL ;AB=A*10+BMOV BH,10M

29、OV AL,BLMUL BHMOV BL,ALJMP INPUTENTER2:CMP AL,0DH JZ OVERSPACE2:CMP AL,20H JZ SAVE JMP INPUT;是否 为回车键;是就跳到 OVER;是否 为空格 ;是就跳到 SAVESAVE:;保存到 SCORE 中MOV AL,BLCBWMOV SCORESI,AXADD SI,2INC DIJMP INPUTOVER:;保存最后一个数据,并存放到 SCORE 中MOV AL,BLCBWMOV SCORESI,AXINC DIMOV DL,0AHMOV AH,02HINT 21HNUM:;显示总人数MOVDX, OFFSET STRING2;输出“ thetotal number isMOVAH,09HINT 21HMOV AX,DI;output the nuber of studentsCALLCALLB_TO_DOUTTMPMOVDX, OFFSET ENTER1;输出回车MOVAH,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论