华中科技大学
文华学院
计算机组成原理
课程设计
学 部: 信息科学与技术学部
专 业: 软件工程
班 级: 1班
学 号: 1001070111
姓 名:
指导老师: 袁
一、课设目的 3
二、课设任务 3
三、使用的设备及软件 3
设备 3
软件 3
四、设备连接 4
五、编程题目 4
六、程序流程图 5
七、程序 5
八、对应的微指令 6
九、调试过程 7
十、结果 11
十一、总结 11
通过课程设计更清楚地理解下列基本概念:
1、计算机的硬件基本组成;
2、计算机中机器指令的设计;
3、计算机中机器指令的执行过程;
4、微程序控制器的工作原理;
5、微指令的格式设计原理。
6、通过使用软件HKCPT,了解程序编译、加载的过程。
7、通过微单步、单拍调试,理解模型机中的数据流向。
1、在掌握各模块功能的基础上,构成模型机;
2、熟悉模型机的通路、微指令系统、与汇编指令的关系;
3、使用微机与模型机连接调试的应用程序HKCPT;
4、编辑程序,了解程序编译、加载及运行的过程。
此次课设使用HK-CPT-IV型计算机组成原理实验平台,实验平台简介如下:
1.基本功能模块:运算器模块、指令部件模块、堆栈寄存器模块、存储器模块、总线传输模块、微程序模块、启停和时序模块,以及用于调试和观察数据的监控模块。
2.组成结构:采用总线结构。总线分为:内部、外部地址总线,内部、外部数据总线。
3.监控模块:为实验调试和程序设计带来了相当的便利。实验者可以通过监控模块来修改微程序和内存中的程序。
4.操作方式 : 单机方式——整个系统可单独使用;联机方式——系统可与PC机相连。
此次课设使用的软件为HKCPT,其使用介绍如下:
1.启动HKCPT:第一次启动HKCPT,用户需设置实验平台通讯端口。退出HKCPT时,会自动保存用户最后一次的设置。用户选择“设置——实验平台”菜单项,在弹出的对话框中,选择相应的通讯串口、通讯波特率和延时因子。点击确定按钮,即可使用。
2.程序编写:选择“文件—新文件”菜单项,将新建一个空的编辑窗口。用户在编辑窗口中输入以下程序。输入完毕,选择“文件—另存为”菜单项,把该文件保存为demo.asm。因为编译器支持长文件名,用户也可以把该文件保存在如“我的文档”之类的目录夹中。用户可以直接选择“文件—打开”菜单项打开该文件。
3.程序编译:编译是检查源文件的语法错误,如果源文件没有语法错误,编译器将生成源文件的目标代码,由于是单汇编文件,编译产生的目标代码可以直接加载调试。用户选择“编译——编译当前文件”菜单项,将编译当前活动窗口中的源文件,编译结果的信息显示在输出窗口中。用户可以根据输出窗口中错误信息直接定位到源文件的相应位置。
4.程序运行:加载后,可以运行程序,有三种运行方式:
1 微单步:每执行一条微程序,PC指针加1,微指令向后移动一步,同时结构图中绘出执行步及上一步的数据流向,各个寄存器和控制线状态会相应改变。
2 程序单步:从当前PC指针行执行源文件的一行语句,然后又停止。结构图中显示的寄存器值和控制线都会随之刷新,但不显示数据流。
3 全速运行:全速运行程序,遇到用户断点或按暂停键或执行到halt指令停止。
实验过程中的设备连接包括3部分的内容:
1.数据总线的连接:
接口1 | DJ1 | DJ2 | DJ3 | DJ4 | DJ5 | DJ6 | DJ7 | PC_OUT |
接口2 | ALU_IN | ALU_OUT | R_IN | R_OUT | RA_IN | RA_OUT | PC_IN | AJ1 |
2.各模块的连线:由于实验平台提供了连线板,在实验时,只要将连线板插在指定的地方,这样,各个模块就成功的连接了。
3.与计算机的连线:实验平台提供的连接线将实验平台与计算机相连,这样,计算机通过软件可以和平台相互通讯。
从1加到10,再带进位右移一位,最后,再加上自已学号的后三位,结果存放到RAM的40H号字节单元中。
根据程序流程图所示,可以进行代码的编写:
MOV R0,#0A
MOV A,#0
MOV R3,#1
MOV R1,#1
ADD A,R3
MOV R2,A
MOV A,R3
SUB A,R0
JZ 14
MOV A,R3
ADD A,R1
MOV R3,A
MOV A,R2
JMP 08
MOV A,R2
STA 20
RRC A
STA 30
MOV R0,#70
ADD A,R0
STA 40
HALT
指令 | 机器代码 | 微指令 | 微代码 |
MOV R0,#0A | 6E 0A | 取指指令 Dbus->Ri | DDBFFF 4DFFFF |
MOV A,#0 | 5F 00 | 取指指令 Dbus->Ri | DDFBFF 4DFFFF |
MOV R3,#1 | 6C 01 | 取指指令 Dbus->Ri | DDBFFF 4DFFFF |
ADD A,R3 | 0C | 取指指令A->Dbus->DR1 Ri->Dbus->DR1 ALU->Dbus->A | FFFCF9 FF7F79 FFFBA9 4DFFFF |
MOV R2,A | 4D | 取指指令A->Dbus->DR1 Ri->Dbus->DR1 ALU->Dbus->A | 7FBDFF 4DFFFF |
MOV A,R3 | 3C | 取指指令 Dbus->A | FF7BFF 4DFFFF |
SUB A,R0 | 1E | 取指指令 A->Dbus->Ri 取指指令 Ri->Dbus->IR2 (IR2)->Abus,Dbus->A | FFFCD6 FE7F56 FFFB86 4DFFFF |
JZ 14 | B3 14 | D4FFFF | |
MOV R3,A | 4C | 取指指令A->Dbus->DR1 Ri->Dbus->DR1 ALU->Dbus->A | 7FBDFF 4DFFFF |
MOV A,R2 | 3D | 取指指令A->Dbus->DR1 Ri->Dbus->DR1 ALU->Dbus->A | FF7BFF 4DFFFF |
JMP 08 | BF 06 | 取指指令 | |
MOV A,R2 | 3D | 取指指令A->Dbus->DR1 Ri->Dbus->DR1 ALU->Dbus->A | FF7BFF 4DFFFF |
RRC A | 9F | 取指指令 A>>1 | FFFEF1 4DFFFF |
MOV R0,#73 | 6C 73 | 取指指令 | DDBFFF 4DFFFF |
ADD A,R0 | 0C 8F | 取指指令A->Dbus->DR1 Ri->Dbus->DR1 ALU->Dbus->A | FFFCF9 FF7F79 FFFBA9 4DFFFF |
STA 40 | 0C 8F | 取指指令 A->Dbus->DR1 Ri->Dbus->DR1 ALU->Dbus->A | D5FFFF BBFDFF 4DFFFF |
1.全速执行:
全速执行可以一次性使所有的代码执行完毕,从而得出最终的结果。此过程一般用于代码准确无误之后的执行,其步骤为:单击菜单“调试”项,选择“全速执行”,最后可以看到最终的结果。在执行的过程中,实验平台上的指示灯不断地闪烁,是由于每一条微指令都对应着不同的指示灯的明暗情况。
2.程序单步:
程序单步用于调试使用,每一次执行一条指令,其步骤为:单击菜单“调试”项,选择“程序单步”,可以看到指令序列上的亮条纹移动了一条指令。在执行的过程中,实验平台上的指示灯不断地闪烁,是由于一条指令对应着多条微指令,每一条微指令都对应着不同的指示灯的明暗情况。
3.微单步:
微单步可以将每一条指令包含的微指令分步执行,其步骤为:单击菜单“调试”项,选择“微单步”,可以从结构图窗口中看到每一条微指令执行的操作。在实验平台上,可以看到指示灯的对应不同微指令的不同明暗变化。
例如:“SUB A,R2”对应的微指令序列为:
1 取指令
2 A->BUS->DR1
3 R2->BUS->DR2
4 ALU->BUS->A
微单步:
1.应得结果:
1+2+3+4+5+6+7+8+9+10=55=(00110111)B
移位后得(00011011)B=(1B)H
我学号的末3位为112=(70)H
则结果为(1B)H+(70)H=(8c)H。
2.查看方法:
在“程序代码窗口”范围内单击鼠标右键,选择“读出”项,在相应的内存区间可以看到内存中的结果:在本例中,数据显示在第4行、第1列(第40H号字节单元内存中)。
3.实际结果:
用读出命令,在程序代码窗口中读出结果——8CH,与计算结果一致。
总的来说,这个课设的完成确实是让我最有成就感的一件事,对于在一定的时间内完成到这种程度,我也确实感到惊讶,也对自己的成长感到自豪!虽然在这次实验中,我们并没有什么太大的亮点,也没有做出来高级功能的扩展,但是我们还是靠着自己的努力一步步实现了任务目标,靠自己的力量解决一系列难题,这也是一件很让人愉快的事。同时也很感谢老师们一直陪伴我们,给与我们指导与帮助,让我们能更有效率的完成这个实验。
最后也是对这次试验的一个感慨,这次试验确实让我有了很大的提高,不只是知识层面,精神层面也有着飞跃,思考能力,发现错误能力,排错纠错能力,这才是我觉得学到的最宝贵的东西,希望在以后的学习生活中还能再接触到相关的有趣知识,让我能有更大的提高!
¥29.8
¥9.9
¥59.8