计算机组成原理大型实验 - 实验报告和源代码 联系客服

发布时间 : 星期二 文章计算机组成原理大型实验 - 实验报告和源代码更新完毕开始阅读

. . .

计算机组成原理大型实验任务书(计算机12级1、2、3班和实验班) 一、实验目的:

深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。 二、实验说明:

要进行这项大型实验,必须清楚地懂得: (1)TEC-2机的功能部件及其连接关系;

(2)TEC-2机每个功能部件的功能与具体组成; (3)TEC-2机支持的指令格式;

(4)TEC-2机的微指令格式,AM2910芯片的用法;

(5)已实现的典型指令的执行实例,即相应的微指令与其执行次序的安排与衔接; (6)要实现的新指令的格式与功能。 三、实验内容:

选定指令格式、操作码,设计如下指令:

(1)把用绝对地址表示的内存单元A中的内容与内存单元B中的内容相加,结果存于内存单元C中。

指令格式:D4××,ADDR1,ADDR2,ADDR3 四字指令(控存入口100H) 功能: [ADDR3]=[ADDR1]+[ADDR2]

(2)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。

指令格式:E0 DR SR,ADDR (SR,DR源、目的寄存器各4位)双字指令(控存入口130H) 功能: DR=SR - [ADDR]

(3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。

指令格式:E5 DR SR,ADDR 双字指令(控存入口140H) 功能: if DR==SR goto ADDR else 顺序执行。

设计:利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z

则当DR==SR时Z=1,微程序不跳转,接着执行MEM PC(即ADDR PC) 而当DR!=SR时Z=0,微程序跳转至A4。 四、实验要求:

(1)根据内容自行设计相关指令微程序;(务必利用非上机时间设计好微程序) (2)设计测试程序、实验数据并上机调试。

(3)设计报告内容:包括1、设计目的2、设计内容3、微程序设计(含指令格式、功能、设计及微程序)

4、实验数据(测试所设计指令的程序及结果)。(具体要求安最新规范为准) (4) 大型实验报告必须打印成册,各班班长收齐大型实验报告于19周星期五前,交张芳老师办公室。

实验设计并分析:

第一条:把用绝对地址表示的内存单元A中的内容与内存单元B中的内容相加,结果存于内存单元C中。

指令格式:D4××,ADDR1,ADDR2,ADDR3 四字指令(控存入口100H) 功能: [ADDR3]=[ADDR1]+[ADDR2]

指令格式:

D4XX ADDR1 ..........

. . . ADDR2 ADDR3 微程序:

PC→AR,PC+1→PC: 0000 0E00 A0B5 5402 MEM→AR: 0000 0E00 10F0 0002 MEM→Q: 0000 0E00 00F0 0000 PC→AR,PC+1→PC: 0000 0E00 A0B5 5402 MEM→AR: 0000 0E00 10F0 0002 MEM+Q→Q: 0000 0E01 00E0 0000

PC→AR,PC+1→PC: 0000 0E00 A0B5 5402 MEM →AR: 0000 0E00 10F0 0002 Q→MEM,CC#=0: 0029 0300 1020 0010

指令分析:

PC->AR, PC+1->PC

0000 0000 1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010 MEM->AR

0000 0000 1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0100 MEM->Q 0000 0000 1110 0000 0000 0000 0000 1111 0000 0000 0000 0000 0000 PC->AR, PC+1->PC

0000 0000 1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010 MEM->AR 0000 0000 1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0100 MEM+Q->Q 0000 0000 1110 0000 0001 0000 0000 1110 0000 0000 0000 0000 0000 PC->AR, PC+1->PC 0000 0000 1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010 MEM->AR 0000 0000 1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0100 Q->MEM, CC#=0 0029 0000 0011 0000 0000 0001 0000 0010 0000 0000 0000 0001 0000

假设从地址[0828]开始执行微程序,此时程序计数器PC的值是0829。因为运行程序的时候[0829]和[0830]中存了加法的两个加数的内存地址,所以要想方设法1)把这两个加数传到运算器的寄存器中,2)在运算器中相加,3)将结果输出到内存单元[ADDR1]。以下分别进行分析。

1)取每个加数要访问两次内存,第一次是取得加数所在的内存地址的值(MEM→AR), 第二次是取

得加数本身并保存在Q寄存器中(MEM→Q)。注意,取第二个加数的时候,第一次仍是MEM→AR,而第二次MEM+Q→Q的同时也把加法给完成了,请见接下来的分析。

2)相加的操作是MEM+Q→Q。MEM是从内存中取得的第二个加数的值,左边的Q是刚才取得的第

一个加数的值。他俩相加的和传给Q寄存器,覆盖掉了Q寄存器刚才保存的值(第一个加数)。

3)现在Q寄存器中存有加法的运算结果,最后的工作是把这个结果写到内存单元[ADDR1]中去。

如果AR或者PC指向[ADDR1]的话就好办了,难点在于现在AR已经到了[ADDR2]处,PC已经到了[ADDR2+1]处,而且又不知道如何让寄存器的值减一。后来问同学,得到了解决办法:利用IP寄存器。IP正好还呆在[ADDR1-1],即内存地址[0828]。显然,让IP+1就得到了[ADDR1],即[0829]。微指令是IP+1→AR以及MEM→AR,这时AR的值为第一个加数所在的单元[ADDR1]。

..........

. . .

现在Q的值是运算结果,AR的值是运算结果要传给的内存地址。显而易见,最后一步就是“存

储器写”操作Q→MEM。

其它要注意的地方:

1)微程序中有两处PC+1→PC,第一处是为了取得第二个加数所在的内存地址,第二处是为了把

PC指向下一句,在这里是RET,才能使程序正常结束。

2)程序最后要转向A4H执行后续处理程序。此处下地址的转换方法:将A4H从左到右用八位二

进制数写出,左边补两个“0”,右边加两个“0” (备用位B45、44),得到0010 1001 0000B,再把这个十二位二进制数翻译成十六进制,结果是290H。

3)使用Q寄存器的好处有:第一,不修改通用寄存器R0,R1等,因为别的程序可能用到它们。第二,程序易读、风格优美。

程序调试:

..........

. . .

第二条:将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。

指令格式:E0 DR SR,ADDR (SR,DR源、目的寄存器各4位)双字指令(控存入口130H) 功能: DR=SR - [ADDR]

微程序:PC→AR,PC+1→PC: 0000 0E00 A0B5 5402

MEM→AR: 0000 0E00 10F0 0002 SR - [ADDR] →DR: 0029 0301 31D0 0088

指令格式: E0XX ADDR 指令分析: 根据指令的功能和指令格式,先读取地址ADDR单元内容暂时放置于Q寄存器中,然后再读取内存单元中的DATA,同时与Q寄存器内容相减,结果存放在DR寄存器中。

每条指令系统微操作详细:

PC->AR, PC+1->PC 0000 0000 1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010 MEM->AR

0000 0000 1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0100 SR-MEM->DR 0029 0000 0011 0000 0001 0011 0001 1101 0000 0000 0000 1000 1000 调试: ..........