计算机组成原理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
评语: 课中检查完成的题号及题数:
课后完成的题号与题数:
成绩:自评成绩:XX
实验报告
实验名称:CPU 与简单模型机设计实验日期:2016.XX.XX
班级:1001XXXX学号:2014XXXX 姓名:XX
同组同学信息
班级:1001XXXX 学号:2014XXXXX 姓名:XXXX
一、实验目的:
1. 掌握一个简单CPU 的组成原理。
2. 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机
3. 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。
二、实验内容:
1. 修改现有的指令系统,将加法指令的功能修改为R0的内容和某个存储单元的内容相加。
增加存数,取数和减法三条机器指令,指令助记符分别为STA,LAD和SUB,指令操作码分别为60,70和80。
2. 利用修改后的指令系统编写一段程序,完成16位二进制数的加减法运算。
三、项目要求及分析:
1. 将加法指令的功能修改为R0的内容和某个存储单元的内容相加。
原来的加法指令中的两个数相等且均来自R0寄存器,因此只需要在加法指令中增加取数操作,并将当前的操作数存入运算单元即可。
具体的操作步骤如下:
a) 将R0中的数据送ALU中的A;
b) 给出另一个数在内存中的地址;
c) 从内存中取出相应的数据并送ALU中的B;
d) 进行加法运算并将结果送R0。
存数指令的具体操作过程如下:
a) 从IN读入数据要存储的地址;
b) 将地址送至AR;
c) 从IN读入要存储的数据;
d) 将数据送入内存中的相应存储单元。
取数操作的具体操作过程如下:
a) 从IN读入数据的存储地址;
b) 将存储地址送至AR;
c) 将取出的数据送至R0;
减法指令的具体操作过程如下:
a) 将被减数送至ALU的A;
b) 将减数送至ALU的B;
c) ALU进行减法操作,结果送R0;
2. 实现16位二进制数的加减法运算只要利用以后的指令系统,编写相应的
程序。
可以先将两个十六位的二进制数的高八位和低八位分别存入不同的地
址,然后先取出两个数低八位进行相加,送至OUT单元显示,进位进行存储;
再进行两个数低八位相加,结果在数据总线出显示。
四、具体实现:
应包含以下内容:画出增加机器指令的微程序流程图、编制二进制代码表、编写微程序、编写机器指令验证程序。
机器指令的微程序流程图如下:
二进制代码表如下:
将加法指令的功能修改为R0的内容和某个存储单元的内容相加程序代码如下:
; //***** Start Of Main Memory Data *****//
$P 00 20 ; START: IN R0 从IN单元读入数据送R0
$P 01 00 ; ADD R0,R0 R0和自身相加,结果送R0
$P 02 30 ; OUT R0 R0的值送OUT单元显示
$P 03 80 ;SUB ro,mem
$P 04 30 ; OUT R0
$P 05 60 ;sta
$P 06 70 ;load
$P 07 30 ;
$P 04 E0 ;JMP START 跳转至00H地址 $P 08 50 ; HLT 停机
; //***** End Of Main Memory Data *****//
; //** Start Of MicroController Data **//
$M 00 000001 ; NOP
$M 01 006D43 ; PC->AR,PC加1
$M 03 107070 ; MEM->IR, P<1>
$M 05 04B201 ; A加B->R0
$M 1D 105141 ; MEM->PC
$M 30 001417 ; R0->A
$M 17 183018 ; in->r0
$M 18 006419 ; r0->ar
$M 19 102005 ; mem->b
$M 32 183001 ; IN->R0
$M 33 280401 ; R0->OUT
$M 35 000035 ; NOP
$M 3C 006D5D ; PC->AR,PC加1
$M 38 00142C ;r0->a
$M 2C 18302D ;IN->r0
$M 2D 00642E ;r0->ar
$M 2E 10202F ;mem->b
$M 2F 05B201 ;a-b->r0
$M 36 183011 ;in->r0
$M 11 006412 ;r0->ar
$M 12 183013 ;in->r0
$M 13 200401 ;r0->mem
$M 37 183015 ;in->r0
$M 15 006416 ; r0->ar
$M 16 103001 ;mem->r0
以下的一段程序用于实现两个16位二进制数的加法,其思想为高位
和低位分别对应相加,将低位的进位给高位,减法同理。
结果的低八
位在OUT单元显示,高八位数据在数据总线显示,最高位的进位忽略。
代码如下:
$P 00 60 ;STA 存加数的低八位
$P 01 60 ;STA 存被加数的低八位
$P 02 60 ;STA 存加数的高八位
$P 03 60 ;STA 存被加数的高八位
$P 04 70 ;LDA 取出加数的低八位存入R0中
$P 05 00 ;ADD 两个数低八位相加
$P 06 30 ;OUT 两个数低八位相加的结果在OUT单元显示
$P 07 70 ;LDA 取出加数的高八位存入R0中
$P 08 00 ;ADD 两个数的高八位相加
$P 09 50 ;HLT 停机
五、调试运行结果:
从IN单元输入02,送入寄存器A,其对应的存储器单元里的地址数值为30,送入寄存器B,2+30=32加法结果:
加法的结果32被送入寄存器A,从IN单元输入02,其对应的存储器单元里的地址数值为30,送入寄存器B,32-30=02,减法结果如下:
完成十六位二进制数的加减法运算
加法:
输入的两个数据分别为:
输出的结果为:10000101,00000000(8500)
减法:
输入的两个数据分别为:
注:其中低八位在OUT单元显示,高八位在数据总线显示。
六、所遇问题及解决方法:
1.接线问题,由于线路复杂,一不小心接错了一根线,运行时,OUT单元总是没有显示,在用软件模拟时,单步执行,每次数据做完加减后,结果应该在OUT单元显示的,结果数据总是无法到达OUT单元,然后检查了一下线路,发现OUT单元的线路连错了,改正后,终于成功了。
2. 实验中遇到过死循环情况。
我们检查加载的程序,发现同一个地址放了两个不同的微程序,修改地址,使地址不再发生冲突,成功解决了问题。
七、实验总结:
1.通过本次实验,细致地了解了计算机内部的基本电路,对简单模型机有了深刻的了认识。
我们修改了部分指令,并且增加了存数,取数和减法指令,学习了微程序编写和设计方法,并成功的验证了编写的程序只有在实验中乐于动手,勤于动脑,不会就问,才能使实验更快更好地完成。
2. 上课的时候有很多都不是很理解,通过实验能让自己理解的更透彻,更能从实际角度去看待这些问题。
数据和理论分析进行比较、验证,我们掌握了CPU的基本结构,及工作原理。
八、建议:
1. 实验指导希望能再详细些,难度能够适当降低一点,难度有点大。
2. 希望多提供一些相关的资料,对于我们有所帮助。
3. 希望能多安排些助教,助教不仅是检查我们做的情况,更多的是为我们答疑解惑,指导我们完成实验。