1. 试修改现有的指令系统,将加法指令的功能修改为R0的内容和某个存储单元的内容相加;增加存数、取数和减法三条机器指令,指令助记符分别为 STA、LAD 和SUB,指令操作码分别为十六进制的60、70和80。
<1>R0和某个存储器相加,R0是可以直接读进来的,R0和另一个存储单元内容相加,如果两个值都是读入的话,就要将一个放在R0中,可以直接读入,另一个放存在储单元。可以先将值读入到R0 中,在将R0保存到其他的存储单元中,进行加法时从存储单元中取出放在临时寄存器中,这样是两个寄存器相加减就可以。
具体步骤:1)将R0中的数据送ALU中的A; 2)给出另一个数在内存中的地址;
3)从内存中取出相应的数据并送ALU中的B; 4)进行加法运算并将结果送R0。
<2>对于增加存数、取数和减法三条机器指令,
存数指令STA具体操作过程如下:
1)从IN读入数据要存储的地址;
2)将地址送至AR;
3)从IN读入要存储的数据;
4)将数据送入内存中的相应存储单元。
对于取数指令LAD具体操作过程如下:
1)从IN读入数据的存储地址;
2)将存储地址送至AR;
3)将取出的数据送至R0
减法指令的具体操作过程如下:
1)将被减数送至ALU的A;
2)将减数送至ALU的B;
3)ALU进行减法操作,结果送R0;
2.利用修改后的指令系统编写一段程序,完成十六位二进制数的加减法运算。
。
答: 十六进制比八进制多了一半,该内容利用的指令系统,编写相应的程序。可以先将两个十六位的二进制数的高八位和低八位分别存入不同的地址,然后先取出两个数低八位进行相加,送至OUT单元显示,进位进行存储;再进行两个数低八位相加,结果在数据总线出显示。
微程序设计流程图:
微代码
$M 00 000001 ; NOP
$M 01 006D42 ; PC->AR,PC加1
$M 02 107073 ; MEM->IR, P<1>
$M 11 006412 ; pc->ar,PC++
$M 12 183013 ; mem->ar
$M 13 200401 ; mem->b
$M 15 006416 ; alu->r0 加法
$M 16 103001 ; pc->ar,PC++
$M 17 183018 ; mem->ar
$M 18 006419 ; mem->b
$M 19 102005 ; alu->r0 减法
$M 1D 105141 ; mem->ar
$M 2C 18302D ; R0->MEM STA
$M 2D 00642E ; m->ar
$M 2E 10202F ; m->r0 LAD
$M 2F 05B201 ; m->pc JMP PC++
$M 30 001417 ; R0->A 加法
$M 32 183001 ; R0->A 减法
$M 33 280401 ; pc->ar ,PC++ 置ro [AR]->R0 LAD
$M 35 000035 ; STA:PC->AR,PC++,mem->ar,R0->MEM(AR)
$M 36 183011 ; IN->R0 输入IN
$M 37 183015 ; R0->OUT 输出OUT
$M 38 00142C ; pc
$M 3C 006D5D ; pc->ar JMP
<2>利用修改后的指令系统编写一段程序,完成十六位二进制数的加减法运算。
以下的一段程序用于实现两个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)
- 在上实验课时,因为自己的实验器材的问题,一直都不能完成一个数与自身相加,之后也尝试了很多次才调整过来,感觉连线的过程千万不能将线接错,否则结果很难出来,做实验一定要很细心。
第二篇:CPU与简单模型机设计
湖南师范大学职业技术学院(工学院)实验数据报告单
实验课程:计算机组成原理
实验题目:CPU与简单模型机设计实验
实验日期: 20##年 6 月 1 日
一.实验目的
1. 掌握一个简单CPU的组成原理。
2. 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。
3. 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。
二.实验内容
本实验要实现一个简单的CPU,并且在此CPU的基础上,继续构建一个简单的模型计算机。
三.实验原理
CPU由运算器(ALU)、微程序控制器(MC)、通用寄存器(RO)、指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成,如图5-1-1所示。这个CPU在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU必须和主存挂接后,才有实际的意义,所以还需要在该CPU的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。
图5-1-1 基本CPU构成原理图
本模型机和前面微程序控制器实验相比,共有5条指令:IN(输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移)、HLT(停机),其指令格式如下:
助记符 机器指令码 说明
IN 0010 0000 IN->RO
ADD 0000 0000 RO+RO->RO
OUT 0011 0000 RO->OUT
HLT 0101 0000 停机
均为单字节指令,********为addr对应的二进制地址码。微程序控制器实验的指令是通过手动给出的,现在要求CPU自动从存储器读取指令并执行。
四.实验结果与分析
(1)程序运行前必须对微地址清零。拨动实验仪右下角清零开关CLR(1→0→1)后,观看实验仪右上方的微地址显示灯(UA0-UA5)是否全为零,若全为零,则正确,若不全为零,说明有问题,要检查。
(2)使用单步微指令运行程序,单击该系统第三行的“单步微指令”图标即可。
(3)在每次单步执行一条微指令的过程中,都要观察屏幕动态流线显示的运行结果,根据屏幕显示的结果分析与该条微指令的格式和功能是否一致。若不一致,必须检查原因。
(4)上面程序的运行中,每执行完一条机器指令,微地址都要返回到01,是应为为取下一条指令作准备。
(5)在每一条机器指令的执行过程中,第一个CPU周期,取指令阶段是由下列微指令组成:01 02。它们完成的操作是:PC AR,M DR,DR IR,PC+1。
实验成绩:
指导老师签名: