预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

网络空间安全与计算机学院计算机组成与体系结构实验报告实验目的:通过学习复杂模型机的内容掌握机器指令的运行过程,了解指令是如何分解为微指令来一步步执行的,并通过学习能够达到自主设计微指令。实验原理:通过计算微地址来散转到制定的微指令的位置,然后在此微地址编写实现功能的微指令,一步步执行,最后进行结尾变址,来实现预想的功能。实验过程及现象:首先定下想要实现的扩展指令功能和指令码形式扩展指令comr0,r1;功能R0,R1先求补码在与非,最后结果存入R0指令系统:助记符操作数指令码长度注释COMR0,R1C11将R0,R1中的数据,分别求补码后,进行与非操作首先我编写的指令是COM,指令码制定的为C1,所以计算散转地址为0780,于是COM指令的操作需在0780微地址处编写:COMR0,R1;指令功能是将R0,R1中的数据,分别求补码后,进行与非操作想要实现COM指令,需先弄清楚需要哪些微指令来实现这个操作。基本可以分解为如下微指令操作:1、输入R0,R12、(对R0,R1求补码)把R0取反再+1,把R1取反再+13、对R0,R1进行与非操作大致分好了基本的过程,下面就是具体的实现这三步的微操作了。第一步:输入R0,R1实现R0,R1的输入。散转到07A0,编写微指令实现从I/O准双向口输入数据到通用寄存器,R0放到通用寄存器偶CL,R1放到通用寄存器奇CH。第二步:(R0的取补码过程,R1类似)首先把通用寄存器CL的值取出到A运算寄存器,数据传送规则为偶送偶,对ALU中数据取反保存到A寄存器中,对ALU中数据+1保存到A寄存器中。最后把ALU中的数据保存到通用寄存器中暂时保存。R1进行类似的操作。第三步:对R0,R1进行与非操作从通用寄存器取出取补码后的R0,R1。R0取出到A运算寄存器,R1取出到B运算寄存器,进行与操作,保存到A运算寄存器。对A运算寄存器中的数据进行取反操作。需要注意的是最后取反以后因为是最后一步微操作,所以微变址出需要变为结尾变址。uPC改为0001。实验总览:实验过程中遇到问题及解决方法:刚开始时对于如何扩展指令一头雾水,不知道如何实现,后来慢慢的试着探索如何通过指令码来计算散转地址,发现散转地址计算方式为指令码左移一位+0600,计算得到的散转地址即为下一步微地址要跳转的地址,如果想要编写微指令就需要散转到指定的微地址,在相应的微地址处编写。比如实验中我的指令码为C1,C用16位进制为0110(12),左移再加0600为0780,(简单计算方法为12*2/16=1余8,所以为0780),所以编写指令时起始微地址为0780。解决完散转地址的问题,下面就是如何编写微指令的问题了。通过很久的思索和探讨,得知,首先得知道数据的源地址和目的地址,即从哪里取来的数据和操作完以后数据放到哪里。然后就是数据传送时总线的奇偶传送了,最后解决的是执行什么样的操作。编辑器中起始已经做了相应的提示:用o2o1o0来控制目标编码选项:用X2X1X0来控制源编码选项:用MS2S1S0来控制相应的算术运算、逻辑运算:用WXPOP来控制总线传送规则:知道了这些操作以后,剩下的就是如何来取数据、操作数据、传送数据、放置数据。就可以扩展一条指令了。实验心得:万事开头难,刚开始做实验时就是一脸懵逼,觉得以前做的实验就是简单的验证试验,没什么技术含量,但是真正到了扩展指令时,一开始还是比较蒙的,不知道该如何做了,后来慢慢来,一点点的研究,从如何计算散转地址,到了解到如何编写一条微指令,包括取数据、操作数据、传送数据、放置数据,慢慢的就发现,扩展指令其实就是把这些微指令组合起来来实现一条总得指令嘛,也就感觉豁然开朗,实验起来也就是有想法就能实现,感觉还是得心应手的。通过这次实验不仅仅了解到了指令的微指令的编写过程和实现过程,更让我深刻体会到了钻研和探索的重要性,在刚开始接触一个新东西时,一定是比较蒙的,感觉无从下手,那么就不妨从头开始,一点点的研究,慢慢的了解原理和方法,原理搞懂了那做东西只会是时间问题。没有深入的研究和探索就不会明白原理,那实现东西就无从谈起。六、实验源码: