评语: 课中检查完成的题号及题数: 成绩:
指导教师:
课后完成的题号与题数:
实验报告
实验名称:
CPU与简单模型机设计实验
学号:
2008300085
日期: 2010-12-26 姓名:
张浩
班级:
JS000803
一、实验目的:
1. 掌握一个简单CPU的组成原理。
2. 在掌握简单单元电路的基础上,进一步将其构造成一台基本模型计算机。 3. 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。
二、实验内容:
1. 修改现有的指令系统,将加法指令的功能修改为R0的内容和某个存储单元的
内容相加。增加存数,取数和减法三条机器指令,指令助记符分别为STA,LAD和SUB,指令操作码分别为60,70和80。
2 利用修改后的指令系统编写一段程序,完成16位二进制数的加减法运算。
三、项目要求及分析:
(1)
将加法指令的功能修改为R0的内容和某个存储单元的内容相加。原来的加法指令中的两个数相等且均来自R0寄存器,因此只需要在加法指令中增加取数操作,并将当前的操作数存入运算单元即可。具体的操作步骤如下:
1)将R0中的数据送ALU中的A; 2)给出另一个数在内存中的地址;
3)从内存中取出相应的数据并送ALU中的B; 4)进行加法运算并将结果送R0。
存数指令的具体操作过程如下:
1)从IN读入数据要存储的地址; 2)将地址送至AR; 3)从IN读入要存储的数据;
4)将数据送入内存中的相应存储单元。
取数操作的具体操作过程如下: 1)从IN读入数据的存储地址; 2)将存储地址送至AR; 3)将取出的数据送至R0
减法指令的具体操作过程如下: 1)将被减数送至ALU的A; 2)将减数送至ALU的B;
3)ALU进行减法操作,结果送R0; (2)
该内容只要利用以后的指令系统,编写相应的程序。可以先将两个十六位的二进制数的高八位和低八位分别存入不同的地址,然后先取出两个数低八位进行相加,送至OUT单元显示,进位进行存储;再进行两个数低八位相加,结果在数据总线出显示。
四、具体实现
微程序流程图如下:
问题一其函数的代码生成二进制代码表
各种具体操作如下几个表:
以下的一段程序用于实现两个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 停机
五、调试运行结果:
加法:
输入的两个数据分别为: 01010010,11111111(52FF) 00110010,00000001(3201) 输出的结果为:
00000001,00000000(8500) 减法:
输入的两个数据分别为:
01010110,11111111(56FF) 00110010,00000001(3201) 输出的结果为:
001111111,11111110(3FFE)
注:其中低八位在OUT单元显示,高八位在数据总线显示。
六、所遇问题及解决方法:
问题:有死循环。 解决方法;
检查加载的程序,发现同一个地址放了两个不同的微程序,修改地址,使地址不再发生冲突,成功解决了问题。
七、实验总结:
1 2. 3
通过本次实验。细致地了解了计算机内部的基本电路,对简单模型机有了深刻的了认识。
我们修改了部分指令,并且增加了存数,取数和减法指令,学习了微程序编写和设计方法,并成功的验证了编写的程序
只有在实验中乐于动手,勤于动脑,不会就问,才能使实验更快更好地完成。