计算机组成原理与汇编课程设计实验报告目录一、课程设计目标………………………………………………………3二、课程设计基本要求…………………………………………………3三、课程设计的内容……………………………………………………3四、课程设计的要求……………………………………………………5五、实验详细设计………………………………………………………51.统计文件中各字母出现的频率…………………………52.用递归计算50以内Fibonacci数,以十进制数输出…93.虚拟平台模拟机实验……………………………………11六、使用说明…………………………………………………………19七、总结与心得体会……………………………………………………19八、参考文献…………………………………………………………20九、附录………………………………………………………………201.字符统计.asm……………………………………………202.斐波那契数(小于50).asm………………………………29一、课程设计目标通过课程设计使学生综合运用所学过的计算机原理与汇编知识,增强解决实际问题的能力,加深对所学知识的理解与掌握,提高软硬件开发水平,为今后打下基础。课程设计的目的和要求:1、使学生巩固和加强《计算机原理与汇编语言》课程的基本理论知识。2、使学生掌握汇编语言程序设计的方法及编程技巧,正确编写程序。3、使学生养成良好的编程习惯并掌握调试程序的基本方法。4、使学生养成规范书写报告文档的能力,撰写课程设计总结报告。5、通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。二、课程设计的基本要求1、认真查阅资料,独立完成设计任务,每道题都必须上机通过。2、编写预习报告,写好代码,上机调试。3、独立思考,培养综合分析问题解决问题和调试程序的能力。4、按时完成课程设计,写出课程设计报告。三、课程设计的内容1、给定一个英文ASCII码文件,统计文件中英文字母的频率,以十进制形式输出。2、用递归计算50以内Fibonacci数,以十进制数输出.3、虚拟平台的模型机实验,具体要求如下:1)选择实验设备,将所需要的组件从组件列表中拖到实验设计流程栏中2)搭建实验流程:根据原理图1和电路图(见附件),将已选择的组件进行连线。3)输入机器指令:选择菜单中的“工具”,再选择“模型机调试”,在指令输入窗口中输入如下指令:00000000000100000000100100100000000010110011000000001011010000000000000000000001本实验设计机器指令程序如下:地址(二进制)内容(二进制)助记符说明0000000000000000INR0“INPUTDEVICE”-R00000000100010000ADD[0AH],R0R0+[0AH]-R000000010000010100000001100100000STAR0,[0BH]R0-[0BH]00000100000010110000010100110000OUT[0BH][0BH]-LED00000110000010110000011101000000JMP00H00H-PC000010000000000000001010运算数据自定00001011求和结果4)这里做的是个加法运算,第一个加数已经存入到内存的00001010单元中,第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮,选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。5)在实验运行面板中双击连续脉冲,模型机便开始工作,观察各个芯片的状态。或者在模型机调试窗口中(如图2所示)点击“指令执行”选项卡,在模型机调试窗口中点击“下一时钟”,模型机机执行到下一个时钟,点击“下一微指令”,模型机机执行到下一个微指令,点击“下一指令”,模型机机执行到下一条指令。观察各个芯片的状态,思考模型机的运行原理。四、课程设计的要求1、根据题目内容,查阅资料。2、编写课程设计预习报告。3、编制程序及调试程序。4、分析总结,写出课程设计报告,报告中应该包含程序功能与使用说明、程序功能实现方法说明、如流程图与算法参数说明等内容,设计经验体会总结,源程序清单。5、实验过程由指导老师监督,听从老师安排和督导。6、每次任务完成后由指导老师逐个的检查实验内容、结果并评分,不符合要求的重写五、实验详细设计1)统计文件中各字母出现的频率一、实验原理在程序中,以是否读到ASCII码为0作为字符串末尾结束的标志;读取文件,并对文件中的字符串进行逻辑判断(不同字母之间各自对应的ASCII码),统计字符数。二、实验目的经过该实验知道如何通过编写汇编程序读取文件并且读取文件中内容;通过分支程序设计来统计字符数,三、实验设计内容读取文件代码段:MOVAX,DATASMOVDS,AX;置数据段寄存器;MOVDX,OFFSETFNAMEMOVAX,3D00H;读打开指定文件INT21HJNCOPEN;打开成功,转OPENMOVSI,OFFSETERROR1;显示打开不成功提示信息CALLDMESSJMPOVER;OPEN:MOVBX,AX;保存文件代号GO:CALLREAD_CHAR;从文件中读一个字符JCREAD_ERROR;如读出错,则转CMPAL,EOF;读到文件结束符吗?JZTYPE_OKCALLPUTCHJMPGO将文件内容推入栈中,并输出:READ_CHARPROCMOVCX,1MOVDX,OFFSETBUFFER;置缓冲区地址MOVAH,3FH;置功能调用号INT21H;读JCR2;读出错,转CMPAX,CX;判断文件是否结束MOVAL,EOF;若文件已经结束,置文件结束符JBR1;文件确定已经结束,转到MOVAL,BUFFER;文件未结束,取所读字符R1:CLCR2:RETREAD_CHARENDP;DMESSPROCDMESS1:MOVDL,[SI]INCSIORDL,DLJZDMESS2MOVAH,2INT21HJMPDMESS1DMESS2:RETDMESSENDPPUTCHPROCPUSHDXMOVDL,ALMOVAH,2INT21HPOPDX文件主体部分(对所读字符ASCII码进行比较判断并统计字符数):movCL,41HLEADI,ARRAYMOVCH,ALCMPCH,CL;若IF41H(A),OTHERS++JBOTHERCMPCH,5AH;若IF5AH(Z),跳转继续比较JAHIGHER2H1:CMPCH,CLJECHAR;若IF=41H(A),CHAR[0]++JALOOP1;若IF41H(A),跳L1比较42H(B)LOOP1:INCCLADDDI,1JMPH1HIGHER2:movCL,61HLEADI,ARRAYCMPCH,CL;若IF61H(A),OTHERS++JBOTHERCMPCH,7AH;若IF7AH(Z),跳转继续比较JAOTHERH2:CMPCH,CLJECHAR;若IF=61H(a),CHAR[0]++JALOOP2;若IF61H(a),跳L02比较62H(b)LOOP2:INCCLADDDI,1JMPH2CHAR:XORCH,CHMOVCH,[DI]INCCHmov[DI],CHOTHER:INCOTHERS;OTHERS++;比较结束四、实验截图2)用递归计算50以内Fibonacci数,以十进制数输出一、实验目的通过该实验充分了解递归程序的用法二、实验内容三、实验设计内容循环递归代码段(主要实现递归调用斐波那契函数)MOVAX,F1;ax=0ADDAX,F2;ax=1JCEXIT;若有进位则跳出MOVBX,F2;bx=1MOVF1,BX;f1=1MOVF2,AX;f2=1CALLOUTPUT;调用outputMOVDL,'';每个数字后的空格MOVAH,2INT21HDECNJNZLPEXIT:MOVAH,4CHINT21H;返回DOS输出斐波那契数:OUTPUT:MOVBX,10MOVCX,0OL1:MOVDX,0DIVBX;ax=0,dx=1ADDDL,'0';加上30h,使数字3变成字符3PUSHDXINCCX;CX=0,每次加1CMPAX,0;比较ax=1和0JNZOL1MOVAH,2;字符输出,要输出的字符已经在dl中OL2:POPDXINT21HLOOPOL2RET四、实验结果3)虚拟平台的模型机实验设计1、实验目的1)掌握模型机的基本原理和结构2)掌握机器指令与微程序的对应关系;3)掌握机器指令的执行流程;2、实验设备74LS181芯片两片,memory6116一片,微程序控制存储器芯片一片,编译器芯片一片,八位同步计数器芯片一片,ALU_G芯片一片,PC_G芯片一片,74LS273芯片若干,输入,输出芯片各一片,选择器芯片若干,连接器芯片若干,灯泡若干,开关若干等。3、环境组成原理虚拟实验室采用的是B/S架构,在客户端电脑上的浏览器地址栏中输入正确的地址进行访问即可。网址为4、实验原理图1模型机示意图图1中所示模型机包括运算器、存储器、微控器、输入设备、输出设备以及寄存器。这些部件的动作控制信号都有微控器根据微指令产生。需要特别说明的是由机器指令构成的程序存放在存储器中,而每条机器指令对应的微程序存储在微控器中的存储器中。模型机详细原理见附件。5、实验内容1)选择实验设备,将所需要的组件从组件列表中拖到实验设计流程栏中2)搭建实验流程:根据原理图1和电路图(见附件),将已选择的组件进行连线。3)输入机器指令:选择菜单中的“工具”,再选择“模型机调试”,在指令输入窗口中输入如下指令:00000000000100000000100100100000000010110011000000001011010000000000000000000001本实验设计机器指令程序如下:地址(二进制)内容(二进制)助记符说明0000000000000000INR0“INPUTDEVICE”-R00000000100010000ADD[0AH],R0R0+[0AH]-R000000010000010100000001100100000STAR0,[0BH]R0-[0BH]00000100000010110000010100110000OUT[0BH][0BH]-LED00000110000010110000011101000000JMP00H00H-PC000010000000000000001010运算数据自定00001011求和结果4)这里做的是个加法运算,第一个加数已经存入到内存的00001010单元中,第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮,选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。5)在实验运行面板中双击连续脉冲,模型机便开始工作,观察各个芯片的状态。或者在模型机调试窗口中(如图2所示)点击“指令执行”选项卡,在模型机调试窗口中点击“下一时钟”,模型机机执行到下一个时钟,点击“下一微指令”,模型机机执行到下一个微指令,点击“下一指令”,模型机机执行到下一条指令。观察各个芯片的状态,思考模型机的运行原理。图2模型机调试窗口6、具体过程实现(1)控制器把PC中的指令地址送往地址寄存器AR,并发出读命令。存储器按给定的地址读出指令,经由存储器数据寄存器MDR送往控制器,保存在指令寄存器IR中。(2)指令译码器ID对指令寄存器IR中的指令进行译码,分析指令的操作性质,并由控制电路向存储器、运算器等有关部件发出指令所需要的微命令。(3)当需要由存储器向运算器提供数据时,控制器根据指令的地址部分,形成数据所在的存储单元地址,并送往地址寄存器AR,然后向存储器发出读命令,从存储器中读出的数据经由存储器数据寄存器MDR送往运算器。(4)当需要由运算器向存储器写入数据时,控制器根据指令的地址部分,形成数据所在的存储单元地址,并送往存储器地址寄存器AR,再将欲写的数据