计算机组成原理与汇编实验报告(共30页).docx
精选优质文档-倾情为你奉上计算机组成原理与汇编课程设计实验报告 目录一、课程设计目标3二、课程设计基本要求3三、课程设计的内容3四、课程设计的要求5五、实验详细设计51. 统计文件中各字母出现的频率52. 用递归计算50以内Fibonacci 数, 以十进制数输出9 3.虚拟平台模拟机实验11六、使用说明19七、总结与心得体会19八、参考文献20九、附录201. 字符统计.asm202. 斐波那契数(小于50).asm29一、 课程设计目标通过课程设计使学生综合运用所学过的计算机原理与汇编知识,增强解决实际问题的能力,加深对所学知识的理解与掌握,提高软硬件开发水平,为今后打下基础。课程设计的目的和要求:1、 使学生巩固和加强计算机原理与汇编语言课程的基本理论知识。2、 使学生掌握汇编语言程序设计的方法及编程技巧,正确编写程序。3、 使学生养成良好的编程习惯并掌握调试程序的基本方法。4、 使学生养成规范书写报告文档的能力,撰写课程设计总结报告。5、 通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。二、课程设计的基本要求1、认真查阅资料,独立完成设计任务,每道题都必须上机通过。2、编写预习报告,写好代码,上机调试。 3、独立思考,培养综合分析问题解决问题和调试程序的能力。 4、按时完成课程设计,写出课程设计报告。三、课程设计的内容1、给定一个英文ASCII码文件,统计文件中英文字母的频率,以十进制形式输出。2、用递归计算50以内Fibonacci 数, 以十进制数输出.3、虚拟平台的模型机实验,具体要求如下:1) 选择实验设备,将所需要的组件从组件列表中拖到实验设计流程栏中2) 搭建实验流程:根据原理图1和电路图(见附件),将已选择的组件进行连线。3) 输入机器指令:选择菜单中的“工具”,再选择“模型机调试”,在指令输入窗口中输入如下指令:本实验设计机器指令程序如下:地址(二进制)内容(二进制)助记符说明0000 00000000 0000IN R0“INPUT DEVICE”->R00000 00010001 0000ADD 0AH,R0R0+0AH->R00000 00100000 10100000 00110010 0000STA R0,0BHR0->0BH0000 01000000 10110000 01010011 0000OUT 0BH0BH->LED0000 01100000 10110000 01110100 0000JMP 00H00H->PC0000 10000000 00000000 1010运算数据自定0000 1011求和结果4) 这里做的是个加法运算,第一个加数已经存入到内存的0000 1010单元中,第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮,选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。5) 在实验运行面板中双击连续脉冲,模型机便开始工作,观察各个芯片的状态。或者在模型机调试窗口中(如图2所示)点击“指令执行”选项卡,在模型机调试窗口中点击“下一时钟”,模型机机执行到下一个时钟,点击“下一微指令”,模型机机执行到下一个微指令,点击“下一指令”,模型机机执行到下一条指令。观察各个芯片的状态,思考模型机的运行原理。四、课程设计的要求1、根据题目内容,查阅资料。2、编写课程设计预习报告。3、编制程序及调试程序。4、分析总结,写出课程设计报告,报告中应该包含程序功能与使用说明、程序功能实现方法说明、如流程图与算法参数说明等内容,设计经验体会总结,源程序清单。 5、实验过程由指导老师监督,听从老师安排和督导。6、每次任务完成后由指导老师逐个的检查实验内容、结果并评分,不符合要求的重写五、实验详细设计1)统计文件中各字母出现的频率一、实验原理在程序中,以是否读到ASCII码为0作为字符串末尾结束的标志;读取文件,并对文件中的字符串进行逻辑判断(不同字母之间各自对应的ASCII码),统计字符数。二、 实验目的经过该实验知道如何通过编写汇编程序读取文件并且读取文件中内容;通过分支程序设计来统计字符数,三、实验设计内容 读取文件代码段: MOV AX,DATAS MOV DS,AX ;置数据段寄存器 ; MOV DX,OFFSET FNAME MOV AX,3D00H ;读打开指定文件 INT 21H JNC OPEN ;打开成功,转 OPEN MOV SI,OFFSET ERROR1 ;显示打开不成功提示信息 CALL DMESS JMP OVER ; OPEN: MOV BX,AX ;保存文件代号 GO: CALL READ_CHAR ;从文件中读一个字符 JC READ_ERROR ;如读出错,则转 CMP AL,EOF ;读到文件结束符吗? JZ TYPE_OK CALL PUTCH JMP GO将文件内容推入栈中,并输出:READ_CHAR PROC MOV CX,1 MOV DX,OFFSET BUFFER ;置缓冲区地址 MOV AH,3FH ;置功能调用号 INT 21H ;读 JC R2 ;读出错,转 CMP AX,CX ;判断文件是否结束 MOV AL,EOF ;若文件已经结束,置文件结束符 JB R1 ;文件确定已经结束,转到 MOV AL,BUFFER ;文件未结束,取所读字符 R1:CLC R2:RET READ_CHAR ENDP ; DMESS PROC DMESS1:MOV DL,SI INC SI OR DL,DL JZ DMESS2 MOV AH,2 INT 21H JMP DMESS1 DMESS2:RET DMESS ENDP PUTCH PROC PUSH DX MOV DL,AL MOV AH,2 INT 21H POP DX 文件主体部分(对所读字符ASCII码进行比较判断并统计字符数):mov CL,41H LEA DI,ARRAY MOV CH,AL CMP CH,CL ;若IF<41H(A),OTHERS+ JB OTHER CMP CH,5AH ;若IF>5AH(Z),跳转继续比较 JA HIGHER2 H1: CMP CH,CL JE CHAR ;若IF=41H(A),CHAR0+ JA LOOP1 ; 若IF>41H(A),跳L1比较42H(B) LOOP1: INC CL ADD DI,1 JMP H1HIGHER2: mov CL,61H LEA DI,ARRAY CMP CH,CL ;若IF<61H(A),OTHERS+ JB OTHER CMP CH,7AH ;若IF>7AH(Z),跳转继续比较 JA OTHERH2: CMP CH,CL JE CHAR ;若IF=61H(a),CHAR0+ JA LOOP2 ; 若IF>61H(a),跳L02比较62H(b) LOOP2: INC CL ADD DI,1 JMP H2 CHAR: XOR CH,CH MOV CH,DI INC CH mov DI,CH OTHER: INC OTHERS ;OTHERS+ ;比较结束 四、实验截图2)用递归计算50以内Fibonacci 数, 以十进制数输出一、实验目的通过该实验充分了解递归程序的用法二、实验内容三、实验设计内容循环递归代码段(主要实现递归调用斐波那契函数)MOV AX,F1 ;ax=0 ADD AX,F2 ;ax=1 JC EXIT ;若有进位则跳出 MOV BX,F2 ;bx=1 MOV F1,BX ;f1=1 MOV F2,AX ;f2=1 CALL OUTPUT ;调用output MOV DL,' ' ;每个数字后的空格 MOV AH,2 INT 21H DEC N JNZ LPEXIT: MOV AH,4CHINT 21H ;返回DOS输出斐波那契数:OUTPUT: MOV BX,10 MOV CX,0OL1:MOV DX,0 DIV BX ;ax=0,dx=1 ADD DL,'0' ;加上30h,使数字3变成字符3 PUSH DX INC CX ;CX=0,每次加1 CMP AX,0 ;比较ax=1和0 JNZ OL1 MOV AH,2 ;字符输出,要输出的字符已经在dl中OL2: POP DX INT 21H LOOP OL2 RET四、 实验结果3)虚拟平台的模型机实验设计1、 实验目的1) 掌握模型机的基本原理和结构2) 掌握机器指令与微程序的对应关系;3) 掌握机器指令的执行流程;2、 实验设备74LS181芯片两片,memory 6116一片,微程序控制存储器芯片一片,编译器芯片一片,八位同步计数器芯片一片,ALU_G芯片一片,PC_G芯片一片,74LS273芯片若干,输入,输出芯片各一片,选择器芯片若干,连接器芯片若干,灯泡若干,开关若干等。3、环境 组成原理虚拟实验室采用的是B/S架构,在客户端电脑上的浏览器地址栏中输入正确的地址进行访问即可。网址为4、实验原理图1 模型机示意图图1中所示模型机包括运算器、存储器、微控器、输入设备、输出设备以及寄存器。这些部件的动作控制信号都有微控器根据微指令产生。需要特别说明的是由机器指令构成的程序存放在存储器中,而每条机器指令对应的微程序存储在微控器中的存储器中。模型机详细原理见附件。5、实验内容1)选择实验设备,将所需要的组件从组件列表中拖到实验设计流程栏中2)搭建实验流程:根据原理图1和电路图(见附件),将已选择的组件进行连线。3)输入机器指令:选择菜单中的“工具”,再选择“模型机调试”,在指令输入窗口中输入如下指令: 本实验设计机器指令程序如下:地址(二进制)内容(二进制)助记符说明0000 00000000 0000IN R0“INPUT DEVICE”->R00000 00010001 0000ADD 0AH,R0R0+0AH->R00000 00100000 10100000 00110010 0000STA R0,0BHR0->0BH0000 01000000 10110000 01010011 0000OUT 0BH0BH->LED0000 01100000 10110000 01110100 0000JMP 00H00H->PC0000 10000000 00000000 1010运算数据自定0000 1011求和结果4) 这里做的是个加法运算,第一个加数已经存入到内存的0000 1010单元中,第二个加数是需要手工输入的。在实验运行面板中点击“运行”按钮,选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。5) 在实验运行面板中双击连续脉冲,模型机便开始工作,观察各个芯片的状态。或者在模型机调试窗口中(如图2所示)点击“指令执行”选项卡,在模型机调试窗口中点击“下一时钟”,模型机机执行到下一个时钟,点击“下一微指令”,模型机机执行到下一个微指令,点击“下一指令”,模型机机执行到下一条指令。观察各个芯片的状态,思考模型机的运行原理。图2 模型机调试窗口6、具体过程实现(1) 控制器把PC中的指令地址送往地址寄存器AR,并发出读命令。存储器按给定的地址读出指令,经由存储器数据寄存器MDR送往控制器,保存在指令寄存器IR中。 (2) 指令译码器ID对指令寄存器IR中的指令进行译码,分析指令的操作性质,并由控制电路向存储器、运算器等有关部件发出指令所需要的微命令。 (3) 当需要由存储器向运算器提供数据时,控制器根据指令的地址部分,形成数据所在的存储单元地址,并送往地址寄存器AR,然后向存储器发出读命令,从存储器中读出的数据经由存储器数据寄存器MDR送往运算器。 (4) 当需要由运算器向存储器写入数据时,控制器根据指令的地址部分,形成数据所在的存储单元地址,并送往存储器地址寄存器AR,再将欲写的数据存入存储器数据寄存器MDR,最后向存储器发出写命令,MDR中的数据即被写入由MAR指示地址的存储单元中。 (5) 一条指令执行完毕后,控制器就要接着执行下一条指令。为了把下一条指令从存储器中取出,通常控制器把PC的内容加上一个数值,形成下一条指令的地址,但在遇到“转移”指令时,控制器则把“转移地址”送入PC。 控制器不断重复上述过程的(1)到(5),每重复一次,就执行了一条指令,直到整个程序执行完毕7、设计结果截图虚拟实验室连线截图:执行第一个指令:执行第二个指令:执行第三个指令:执行第四个指令:. 执行第五个指令:执行第六个指令:六、使用说明 两个程序使用汇编语言在“Masm for Windows集成实验环境”下编写,在MS-DOS模拟平台下运行。使用情况如详细设计所述。七、总结与心得体会为期两周的计算机组成原理与汇编课程设计就结束了,在这段时间呢,完成了诸多实验题目,解决了许多问题,包括计算机组成与那里和汇编语言。在充实而忙碌的课程设计同时,最重要的还是巩固并进一步学习了像组成原理和汇编这样更接近低层的软硬件知识,而不再是仅仅局限于像C、C+或是Java这样的高级语言开发。理论学习只是一个学习初期阶段,只有经过了亲身实践操作,才能叫是真正掌握了知识技能。就像是这个学期的课程设计初期一样,初次开始汇编课设,我对汇编并不是十分了解,只是简简单单懂得几句语言而已或者说只会读懂程序,做几个题而已。至于如何将它们拼凑到一起组成一个实现一定功能的完整程序,成了我面前巨大的障碍,所以刚开始时,我也是束手无策,毫无头绪。但是通过对教材的复习,查阅相关文献和网络资料,我慢慢懂得并熟悉了这个过程。课程设计完了之后,我才真切意识到,低级的东西并不十分简单,恰恰相反,没有艰辛的付出,没有刻苦的努力,任谁也永远不能攻克它。八、参考文献1.Patric Juola.计算机组成与汇编语言原理.机械工业出版社 2.沈美明.IBM-PC汇编语言程序设计.清华大学出版社 3.唐朔飞.计算机组成原理.高等教育出版社九、附录1、字符统计.asm:DATAS SEGMENT FNAME DB 'TEST.TXT',0 ;文件名 ERROR1 DB 'File not found',07H,0 ;提示信息 ERROR2 DB 'Reading error',07H,0 STRING1 DB 'Number of $' ;各类字符提示信息 STRING2 DB ': $' ARRAY DB 26 DUP(0) ;字母OTHERS DB 0 ;其他 BUFFER DB ? EOF DB 035 ;以#结束 ;1字节的缓冲区、 DATAS ENDS ;代码段 CODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX ;置数据段寄存器 ; MOV DX,OFFSET FNAME MOV AX,3D00H ;读打开指定文件 INT 21H JNC OPEN ;打开成功,转 OPEN MOV SI,OFFSET ERROR1 ;显示打开不成功提示信息 CALL DMESS JMP OVER ; OPEN: MOV BX,AX ;保存文件代号 GO: CALL READ_CHAR ;从文件中读一个字符 JC READ_ERROR ;如读出错,则转 CMP AL,EOF ;读到文件结束符吗? JZ TYPE_OK CALL PUTCH JMP GOREAD_ERROR:MOV SI,OFFSET ERROR2 CALL DMESS ; TYPE_OK:MOV AH,3EH INT 21H CALL ENDLINE CALL SHOW OVER: MOV AH,07;为了显示 INT 21H ;为了显示 MOV AH,4CH INT 21H ; READ_CHAR PROC MOV CX,1 MOV DX,OFFSET BUFFER ;置缓冲区地址 MOV AH,3FH ;置功能调用号 INT 21H ;读 JC R2 ;读出错,转 CMP AX,CX ;判文件是否结束 MOV AL,EOF ;设文件已经结束,置文件结束符 JB R1 ;文件确已结束,转 MOV AL,BUFFER ;文件未结束,取所读字符 R1:CLC R2:RET READ_CHAR ENDP ; DMESS PROC DMESS1:MOV DL,SI INC SI OR DL,DL JZ DMESS2 MOV AH,2 INT 21H JMP DMESS1 DMESS2:RET DMESS ENDP PUTCH PROC PUSH DX MOV DL,AL MOV AH,2 INT 21H POP DX mov CL,41H LEA DI,ARRAY MOV CH,AL CMP CH,CL ;若IF<41H(A),OTHERS+ JB OTHER CMP CH,5AH ;若IF>5AH(Z),跳转继续比较 JA HIGHER2 H1: CMP CH,CL JE CHAR ;若IF=41H(A),CHAR0+ JA LOOP1 ; 若IF>41H(A),跳L1比较42H(B) LOOP1: INC CL ADD DI,1 JMP H1HIGHER2: mov CL,61H LEA DI,ARRAY CMP CH,CL ;若IF<61H(A),OTHERS+ JB OTHER CMP CH,7AH ;若IF>7AH(Z),跳转继续比较 JA OTHERH2: CMP CH,CL JE CHAR ;若IF=61H(a),CHAR0+ JA LOOP2 ; 若IF>61H(a),跳L02比较62H(b) LOOP2: INC CL ADD DI,1 JMP H2 CHAR: XOR CH,CH MOV CH,DI INC CH mov DI,CH OTHER: INC OTHERS ;OTHERS+ ;比较结束 RET PUTCH ENDP SHOW PROC LEA SI,ARRAY MOV DI,41HLOOP3: LEA DX,STRING1 ;字符串的输出Number of MOV AH,09H INT 21H MOV DX,DI MOV AH,02H INT 21H LEA DX, STRING2 ;字符串的输出 MOV AH,09H INT 21H XOR AX,AX MOV Al,SI ;将统计的数字送AX ADD SI,1 CALL DISPLAY ;调用输出两位数字的子程序 CALL ENDLINE INC DI CMP DI,5BH JB LOOP3 MOV AH,4CH INT 21H RET SHOW ENDP ENDLINE PROC NEAR;控制输出格式,输出回车换行子程序 MOV AH,02H MOV DL,0AH ; INT 21H ;输出换行符 MOV AH,02H MOV DL,0DH ; INT 21H ;输出回车符 RET ENDLINE ENDP DISPLAY PROC NEAR;输出两位数字的子程序(输出两位数字为十进制) MOV BL,10 DIV BL ;AX/BL,AL=商,AH余数 PUSH AX ;保存AX中的信息 MOV DL,AL ADD DL,30H MOV AH,02H INT 21H ;输出十位数 POP AX ;出栈送AX MOV DL,AH ADD DL,30H MOV AH,02H INT 21H ;输出个位数 RET DISPLAY ENDPCODES ENDS END START 2、斐波那契数(小于50).asm:DATAS SEGMENT M1 DB 13,10,'Fibonacci number Below 50 is: $' N DW 8 F1 DW 0 F2 DW 1 DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA DX,M1 MOV AH,9 INT 21H MOV DL,'1' ;输出1和空格,1在dl中 MOV AH,2 INT 21H MOV DL,' ' INT 21HLP: MOV AX,F1 ;ax=0 ADD AX,F2 ;ax=1 JC EXIT ;若有进位则跳出 MOV BX,F2 ;bx=1 MOV F1,BX ;f1=1 MOV F2,AX ;f2=1 CALL OUTPUT ;调用output MOV DL,' ' ;每个数字后的空格 MOV AH,2 INT 21H DEC N JNZ LPEXIT: MOV AH,4CH INT 21H ;返回DOSOUTPUT: MOV BX,10 MOV CX,0OL1:MOV DX,0 DIV BX ;ax=0,dx=1 ADD DL,'0' ;加上30h,使数字3变成字符3 PUSH DX INC CX ;CX=0,每次加1 CMP AX,0 ;比较ax=1和0 JNZ OL1 MOV AH,2 ;字符输出,要输出的字符已经在dl中OL2: POP DX INT 21H LOOP OL2 RETCODES ENDS END START、专心-专注-专业