2)除法程序运行的过程
7.设计结果说明
调试运行程序时是否出现问题,是否有重新调整指令/微指令系统设计的情况出现?请在此做具体说明。
答:出现了问题。
1)之前由于设计了ADD R?,#II和SUB R?,#II、SHL R?、SHR R?等这类指令,而这两些指令在执行过都需要先将立即数或者寄存器中的数保存到寄存器A中,再进行运算,运算完后再送回寄存器,这必然会改变寄存器A的值,也就是说如果运行这类指令就会改变累加器A的值,然而在设计乘法和除法的程序中都需要用到寄存器A来暂存一些中间数据,从而得不到正确的运行结果。
重新调整:
①为了尽量的减少这类指令改变寄存器A的情况,在最大范围内将这些指令设计成不改变其他寄存器的指令。
如原来的右移指令SHR R?的微指令设计成:
T2:FFF7F7 将寄存器R?中的值送入到寄存器A中 T1:FFFABF 带进位右移,结果送入R?中 T0:CBFFFF 取指令
重新设计SHR R?微指令:
T3:FFEF9F 将寄存器A的值送入到堆栈寄存器ST中 T2: FFF7F7 将寄存器R?中的值送入到寄存器A中 T1:FFFABF 带进位右移,结果送入R?中
T0: CBFF57 将堆栈寄存器ST的值送回到寄存器A中,并取指令 其他的类似指令对应的微指令也同上设计。
②对于ADD R?,#II和SUB R?,#II这两条指令,由于一条指令周期中机器周期(最多4个)的限制,所对应的微指令无法在T3-T0中完成所需操作,于是又增加了两条指令PUSH A和POP A,在执行以上ADD R?,#II和SUB R?,#II这两条指令之前需先执行PUSH A将寄存器A的值保存,在执行完后立即用POP A恢复A的值。
通过以上的方法就解决了上述问题。 在本人设计的指令系统中,W寄存器的值是不受保护的,不能用来暂存数据。
A寄存器如果暂存数据,在遇到ADD R?,#II和SUB R?,#II时需要执行PUSH A(之后)POP A指令来保护数据,而寄存器R?都是受保护的,可以用来保存数据。
2)对移位指令的设计。
在设计移位指令时,之前是设计的SHR R?和SHL R?都是采用带进位的,在实验过程中发现这种带进位的方式为循环进位,如果CF=1,在执行SHR R?指令时,CF的1会先移入到R?的高位,然后R?的低位会移入到CF中。如果只想采用汇编中的逻辑移位指令,将移出位移入到CF中,对已寄存器移入0。发现上述自己设计的指令无法实现。
重新设计:扩充指令系统,添加移位指令SHRN R?和SHLN R?,不带进位。
五、本次课程设计的总结体会(不少于200字)
主要总结学到的具体知识、方法及设计中的切身体会;包括列出在设计的各个阶段出现的问题及解决方法。
答:通过本次的计算机组成原理课程设计:
1)加深了对指令系统、微指令系统的理解。
自己亲自设计乘法和除法的指令系统,首先要了解指令的格式,包括单字长和双字长的指令,以及在指令设计时操作码和地址码的设计,运用何种寻址方式等等;通过设计微指令系统,了解微指令的格式,微指令控制部分的设计,以及如何设计与指令对应的微指令程序;
在设计指令的过程中遇到的问题:条件转移指令和非条件转移指令得操作码如何设计,让他们和硬件相对应?
解决的方法:通过观察具体的硬件电路,发现在ELP为低电平好的前提下,要使PCOE为低电平,无条件转移需要使IR3位1,JC转移需要IR2为0,IR3为0,JZ转移需要IR2为1,IR3为0,下面是对应转移指令设计的操作码:JMP R?001111xx JC R?001000xx JZ R?001001xx
2)综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念 通过微程序控制器的设计,进一步了解了控制器如何控制各个部件的协同工作,通过有时序的读取一系列的微指令,产生对应于各个部件的控制信号,使各个部件产生微操作,解释执行指令和程序。虽然这次微程序控制器的设计与计算机组成原理课本中关于控制器的设计不太相同,在这次微指令设计中微指令格式并没有顺序控制字段,完全采用指令的操作码来获得下一条微指令的地址,原因在于每条指令的指令周期固定为四个机器周期,操作码与微地址之间有简单的对应关系,因此设计起来比较简单。但也在很大的程度上帮助我们加深了对控制器工作原理的理解,建立起整机系统的概念。
3) 培养了综合实践及独立分析、解决问题的能力。
(以上红色字内容为由设计者完成并填写)