




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、CENTRALSOUTHUNIVERSITY计算机组成与汇编课程设计报告学生姓名汪锋指导教师杨希学院信息科学与工程学院专业班级计科 0802完成时间2011年 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;数据段bufdb 3,?,3 dup(?)buf1 db 5 dup(?)db $buf2 db 0flag d
4、b 1mess1db enter the number:,$mess2db 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 axmov al,0sub byte ptr si+2,30hadd al,byte ptr si+2递归调 用的子程序code2 segment;子程序assumecs:code
5、2,ds:data,ss:ssegsum 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,10dadd byte ptr si+1,1s2:mov si,blinc diinc siloop s1call sumexit :retsum endpcode2 ends将结果输出mov dl,0dh;输出mov ah,2int 21hmov dl,0ahmo
6、v ah,2int 21h2、文件复制文件复制主要算法流程为先将 输入的文件名存入一个 缓冲区并打开文件,打开文件后,以512 个字节为单 位将文件内容 读入到内存 缓冲区中,知道源文件末尾。读完文件后,根据 输入的目标文件名 创建文件,然后同 样以 512 字节为单 位将内存 缓冲区中的字符串写入目标文件中,写操作完成后,关 闭文件。其主要代码 如下:数据段:dataSEGMENTmess1DBPlease,input file name:,0DH,0AH,24Hmess2DB0DH,0AH, Please,input destination file name:,07H,0DH,0AH,2
7、4HfnfDB0DH,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
8、,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字符读入内存:readf:MOVBX,fnum_s;取源文件号MOV CX,512;读出 512 个字符MOV DX, OFFSET bufferMOV AH,3
9、FHINT 21HJNC writef;读成功,则写LEA DX,fre;不成功,显示错误 信息,关闭文件,并结束程序MOV AH,9INT 21HJMPexit字符写入目标文件:writef: MOV BX,fnum_d;取新文件号MOV CX,AX;按实际读 入字数写文件MOV AH,40HINT 21HJNC cmpcx; 写成功LEA DX,fwe;不成功,显示错误信息,关闭文件,并结束程序MOV AH,9INT 21HJMP exit关闭文件:exit:MOVAH,3EH;关闭文件INT 21HMOV BX,fnum_sMOV AH,3EHINT 21HMOV AX,4C00HINT
10、 21H3、成绩统计 程序算法思想是先将键盘输入的字符串成绩转化为十进制后存入内存缓冲区中,读入的同时进行计数。然后通过循环语句实现成绩的评定统计与累加过程,将总分除以计数器即得平均分。最后将所得数据转化为字符串后显示出来。主要代码如下:数据段:DA TA SEGMENTSTRING1DBPlease Input Score:,$STRING2 DBThe total number is:,$STRING3 DBThe sum is:,$STRING4 DB*,0AH,0DH, $ENTER1DB 0AH,0DH, $SCOREDW 60 DUP(?);分配存 储空间TMPDB 0,0,0,0
11、S5DW0;定义变量S6DW0S7DW0S8DW0S9DW0S10 DW0TOTALSCORE DB 0DA TA ENDS输入:INPUT:;输入一个字符MOVAH,1INT21HCMP AL,30HJB ENTER2CMP AL,39HJNB INPUTMOV AH,AL;AB=A*10+BMOV BH,10MOV AL,BLMUL BHMOV BL,ALJMP INPUT显示总人数:NUM:;显示总人数MOVDX, OFFSET STRING2;输出 “ thetotal number is:”MOVAH,09HINT21HMOV AX,DI;output the nuber of st
12、udentsCALLB_TO_DCALLOUTTMP计算并显示总分:SUM:MOV SI,6MOV BX,SCORESIADD AX,BXSUB SI,2JNS SUMLEA BX,TOTALSCOREMOV BX,AX;计算总分;显示总分CALLB_TO_DCALLOUTTMP;output the total score4、虚拟 平台的模型机 实验模型机示意 图:BUS地址总线ALU-BS3AR(74273)MLDARMEM(6116)S2ALU(74181)S1CNS0T3CEPC-BW/RCEOUTPUTPC(74161) LOADDR1(74273) DR2(74273)CELDDR
13、1LDDR2LDPCLED-BW/RT4T4T4数据总线R0-BW/RCS0 SW-BR0(74374)时序微控器CS1LDR0CS2CET4INPUTIR(74273)LDIRT3CPU根据上图进行连线,检查无误后开始进行测试,选择菜单中的“工具”,再选择“模型机调试”,在指令输入窗口中输入如下指令:00000000000100000000100100100000000010110011000000001011010000000000000000000001这里做的是个加法运算,第一个加数已经存入到内存的0000 1010 单元中,第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮
14、, 选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。在实验运行面板中双击连续脉冲, 模型机便开始工作。五、程序代码Fibonacci 数列求值data segment;数据段bufdb 3,?,3 dup(?)buf1 db 5 dup(?)db $buf2 db 0flag db 1mess1db enter the number:,$mess2db 13,10,result:,$buf3 db 1,24 dup(0)buf4 db 1,24 dup(0)data endsssegsegment stack;堆栈段dw 512 dup(?)sseg
15、endscode1 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,0sub byte ptr si+2,30hadd al,byte ptr si+2cmp byte ptr si+3,30hjb suan1mov cl,10mul clsub byte ptr si+3,30hadd al,byte pt
16、r si+3suan1:mov buf2,alpop axmov dl,2push silea di,buf4call far ptr sumpop simov dl,0dh;输出mov ah,2int 21hmov dl,0ahmov ah,2int 21hlea dx,mess2mov ah,9int 21hs3:cmp flag,1jnz s5cmp byte ptr di,0jz s6mov flag,0s5:mov dl,diadd dl,30hmov ah,2int 21hs6:dec dicmp di,offset buf4jae s3mov ah,4chint 21hcode1
17、 endscode2 segment;调用函数assumecs:code2,ds:data,ss:ssegsum 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,10dadd byte ptr si+1,1s2:mov si,blinc diinc siloop s1call sumexit :retsum endpcode2 endsend start
18、文件复制dataSEGMENTmess1DBPlease,input file 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,24HfreDB
19、0DH,0AH, reading error.,07H,0DH,0AH,24HfweDB0DH,0AH, writting error.,07H,0DH,0AH,24HfcsDB0DH,0AH, File copyed succeed.,0DH,0AH,24HfbufferDB128DB?fnameDB128 DUP (?)fnum_sDW?fnum_dDW?bufferDB512 DUP (?)dataENDS;codeSEGMENTASSUME CS:code,DS:datastart:MOVAX,dataMOV DS,AXPUSH DSPOP ESfull0:LEA DX,mess1MO
20、V AH,9INT 21HCLDMOV CX,128MOV AL,0LEA DI,fnameREP STOSB;-LEA DX,fbufferMOV AH,0AHINT 21H;-MOVBL,fbuffer+1;将输入文件名的最后一个回车符换成 0,因为建立的文件名不能包括不可 见字符XOR BH,BHMOV SI,OFFSET fnameADD SI,BXMOV BYTE PTR SI,0;-LEA DX,fnameMOV AX,3D00HINT 21HJNC open;打开成功LEA DX,fnfMOV AH,9INT 21HJMPfull0;重新输入;-open:MOV fnum_s,A
21、X;打开成功,保存源文件号full1:LEA DX,mess2MOV AH,9INT 21HCLD;充 0,将上次输入的文件名清零MOV CX,128;文件名最大 128 字符,包括回 车符MOV AL,0LEA DI,fnameREP STOSB;-LEA DX,fbuffer;输入文件名MOV AH,0AH;键盘输 入到缓冲区DS:DX= 缓冲区首地址INT 21H;-MOV BL,fbuffer+1XOR BH,BHMOV SI,OFFSET fnameADD SI,BXMOV BYTE PTR SI,0;-LEA DX,fnameMOV AX,3D00HINT 21HJC setup;
22、打开不成功LEA DX,fdfMOV AH,9INT 21HJMPexit;-setup:LEA DX,fnameMOV AH,3CH;建立新文件INT 21HJNC save;建立成功LEA DX,fdeMOV AH,9INT 21HJMPexitsave:MOV fnum_d,AX;保存新文件号MOV AX,3D01H; 以只写方式打开新文件INT 21Hreadf:MOV BX,fnum_s;取源文件号MOV CX,512;读出 512 个字符MOV DX, OFFSET bufferMOV AH,3FHINT 21HJNC writef;读成功,则写LEA DX,fre;不成功,显示错
23、误 信息,关闭文件,并结束程序MOV AH,9INT 21HJMPexit;-writef:MOV BX,fnum_d;取新文件号MOV CX,AX;按实际读 入字数写文件MOV AH,40HINT 21HJNC cmpcx; 写成功LEA DX,fwe;不成功,显示错误信息,关闭文件,并结束程序MOV AH,9INT 21HJMP exitcmpcx:CMP CX,512;判断 实际读 入的字数是不是 512JEreadf;如果是 512,说明还没读到文件尾;LEA DX,fcs;显示 复制成功 MOV AH,9INT 21H;exit:MOVAH,3EH;关闭文件INT 21HMOV BX
24、,fnum_sMOV AH,3EHINT 21HMOV AX,4C00HINT 21H;codeENDSENDstart成绩统计DA TA SEGMENTSTRING1DBPlease Input Score:,$STRING2 DBThe total number is:,$STRING3 DBThe sum is:,$STRING4 DB*,0AH,0DH, $ENTER1DB 0AH,0DH, $SCOREDW 60 DUP(?);分配存 储空间TMPDB 0,0,0,0S5DW 0;定义变量S6DW 0S7DW 0S8DW 0S9DW 0S10 DW 0TOTALSCORE DB 0D
25、A TA ENDS;STACK SEGMENT;堆栈段; DW 64 DUP(0);STACK ENDSCODE SEGMENT;代码段ASSUME CS:CODE,DS:DATA ;,SS:STACKMAIN PROC FARMOVAX,DA TAMOVDS,AX;MOVAX,STACK;MOVSS,AX;XORBX,BX;寄存器清零XORCX,CXXORSI,SIXORDI,DICALLINSCORE;CALLSUMSCORE ;MOVAH,4CH;返回 DOSINT 21HMAIN ENDP;B_TO_D PROC NEARPUSH BXPUSH SIPUSH CXMOV CX,03HI
26、NIT:MOV SI,CXMOV TMPSI,0DEC CXJNS INITTHOUSAND:SUB AX,30HCMP AX,1000JB HUNDREADMOV SI,03HMOV BH,10DIV BHMOV TMPSI,AHHUNDREAD:JBTENCMP AX,100MOV SI,02HDIV BHMOV TMPSI,AHTEN:CMP AX,10JB ONEMOV SI,01HDIV BHMOV TMPSI,AHDEC SIMOV TMPSI,ALPOP SIPOP BXPOP CXRETONE:MOV SI,0MOV TMPSI,ALPOP BXPOP SIRETB_TO_D
27、ENDP;OUTTMP PROC NEARPUSH SIPUSH CXMOV CX,3OUTPUT:MOV SI,3MOV DL,TMPSIMOV AH,02HINT 21HLOOP OUTPUTPOP SIPOP CXRETOUTTMP ENDP;INSCORE PROC NEARPUSH AXPUSH BXPUSH DXPUSH DIPUSH SIMOVDX, OFFSET STRING1;输入 “ pleaseinput the score ”MOVAH,09HINT 21HMOVDX, OFFSET ENTER1;输出 回车 MOVAH,09HINT 21HINPUT:;输入一个字符M
28、OVAH,1INT 21HCMP AL,30HJB ENTER2CMP AL,39HJNB INPUTMOV AH,AL;AB=A*10+BMOV BH,10MOV AL,BLMUL BHMOV BL,ALJMP INPUTENTER2:CMPAL,0DH;是否 为回车键JZOVER;是就跳到 OVERSPACE2:CMPAL,20H;是否 为空格JZSAVE;是就跳到 SAVEJMP INPUTSAVE:;保存到 SCORE 中MOV AL,BLCBWMOVSCORESI,AXADDSI,2INCDIJMP INPUTOVER:;保存最后一个数据,并存放到SCORE 中MOV AL,BLCBWMOVSCORESI,AXINCDIMOVDL,0AHMOVAH,02HINT21HNUM:;显示总人数MOVDX, OFFSET STRING2;输出 “ thetotal number is:”MOVAH,09HINT21HMOVAX,DI;output t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阳山小学考试试卷及答案
- 2.2任务二花卉的分株繁殖 说课稿 2024-2025学年浙教版初中劳动技术七年级下册
- 2025年滨州市实验小学六年级第二十三单元测试数学试卷新课
- 成人经口气管插管机械通气患者口腔护理
- 2025年起重机械指挥证模拟考试题库及答案
- 2025年高考生物试题分类汇编体液调节(解析版)
- 人工智能应用基础 课件 项目4 人工智能开发与技术应用
- 2025年山东省青岛市中考化学试题(解析版)
- 2025购物中心省级区域代理合同
- 小班图形规律题目及答案
- 2025至2030中国水射流强化泵行业项目调研及市场前景预测评估报告
- 《推销实务》中职全套教学课件
- 销售激励方案奖罚制度(3篇)
- 2025-2026年秋季学期各周国旗下讲话安排表+2025-2026学年上学期升旗仪式演讲主题安排表
- GB/T 45875-2025精细陶瓷自然烧结条件下陶瓷粉体致密性的测定
- 中药足浴课件
- 新解读《水文资料整编规范 SL-T 247-2020》解读
- 家庭适老化改造案例研究及经验分享
- 中邮理财招聘笔试题库2025
- 2024年西师版小学数学二年级上册教案全册
- 局部晚期头颈部肿瘤治疗讲课件
评论
0/150
提交评论