一、实验目的
(1)将微程序控制器同执行部件( 整个数据通路)联机,组成一台模型计算机;
(2)用微程序控制器控制模型机数据通路;
(3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。
二、实验任务
(1)对机器指令系统组成的简单程序进行译码。将下表的程序按指令格式手工汇编成十六进制机器代码。
地址 | 指令 | 机器代码 |
00H | LDA、R0、[R2] | 58H |
01H | LDA、R1、[R3] | 5DH |
02H | ADD、R0、R1 | 04H |
03H | JC、+5 | 95H |
04H | AND、R2、R3 | 3EH |
05H | SUB、R3、R2 | 1BH |
06H | STA、R3、R2 | 4BH |
07H | MUL、R0、R1 | 24H |
08H | STP | 60H |
09H | JMP、[R1] | 84H |
(2)按照下面框图,参考前面实验的电路图完成连线,控制器是控制部件,数据通路(包括上面各模块)是执行部件,时序产生器是时序部件。连线包括控制台、时序部分、数据通路和微程序控制器之间的连接。其中,为把操作数传送给通用寄存器组RF,数据通路上的RS1、RS0、RD1、RD0应分别与IR3至IR0连接,WR1、WR0也应接到IR1、IR0上。
三、实验工具
模拟程序
四、实验步骤及实验结果
(1)对机器指令系统组成的简单程序进行译码
(2)连线
仿真面板图:
数据通路图
(3)存程序机器代码,设置通用寄存器R2、R3及内存相关单元的数据。
●设置通用寄存器R2、R3 的值。
使R2 = 60H,R3 = 61H。
1.令DP=0,DB=0,DZ =0,使实验系统处于连续运行状态。令SWC = 0、SWB = 1、SWA = 1,使实验系统处于寄存器加载工作方式KLD。按CLR#按钮,使实验系统处于初始状态。
2.在SW7-SW0上设置一个存储器地址,该存储器地址供设置通用寄存器使用。该存储器地址最好是不常用的一个地址,以免设置通用寄存器操作破坏重要的存储器单元的内容。例如可将该地址设置为0FFH。按一次QD按钮,将0FFH写入AR0和AR1。
3.在SW7-SW0 上设置02H, 作为通用寄存器R2的寄存器号。按一次QD按钮,则将02H写入IR。
4.在SW7-SW0设置60H, 作为R2的值。按一次QD按钮,将60H写入IR指定的R2寄存器。
5.在SW7-SW0 上设置03H, 作为通用寄存器R3的寄存器号。按一次QD按钮,将03H写入IR.
6.在SW7-SW0设置61H, 作为R3的值。按一次QD按钮,将61H写入R3.
7. 设置R2、 R3结束,按CLR#按钮,使实验系统恢复到初始状态。
●存程序机器代码。
本操作中,从00地址开始存10个机器代码: 58H,5DH,04H, 95H,3EH,1BH,4BH, 24H,60H,84H。在60H存入24H,用于给R0置初值:在61H存入83H,用于给R0置初值。
1.令DP=0,DB=0,DZ=0,使实验系统处于连续运行状态。令SWC=0、SWB=1、SWA=0,使实验系统处于写双端口存储器工作方式KWE。按CLR#按钮,使实验系统处于初始状态。
2.置SW7-SW0为00H,按QD按钮,将00H写入AR1。
3.置SW7-SW0为58H, 按QD按钮,将58H写入存储器00H单元。AR1自动加1,变为01H。
4.置SW7- SW0为5DH, 按QD按钮,将5DH写入存储器01H单元。AR1自动加1,变为02H。
5.按QD按钮,使AR1+1。AR1此时为03H。
6.重复进行下去,直到将84H写入存储器09H单元。按CLR#按钮, 使实验系统恢复到初始状态。
7.置SW7- SW0为60H, 按QD按钮,将60H写入AR1。
8.置SW7- SW0为24H, 按QD按钮,将24H写入存储器60H单元。AR1自动加1,变为61H。
9.置SW7-SW0为83H, 按QD按钮,将83H写入存储器61H单元。
按CLR#按钮, 使实验系统恢复到初始状态。
(4)用单拍(DP)方式执行一遍程序
在单拍执行过程中,首先要随时监测AR2的值和IR的值,以判定程序执行到何处,正在执行哪条指令。监测微地址指示灯和判断字段指示灯,对照微程序流程图,可以判断出微指令的地址和正在进行的微操作。程序执行的结果如下: .
初值:R0未定,R1未定,R2=60H,R3=61H。存储器60H单元的内容是24H,61H单元的内容是83H。
1. LDA R0, [R2]
执行结果R2 = 60H,R0 = 24H。
2. LDA R1, [R3]
执行结果R3 = 61H, R1 = 83H。
3. ADD R0, R1
执行结果R0=0A7H,R1=83H,C=0。
4. JC +5
执行结果转移到03H,因为C = 0。
5. AND R2, R3
执行结果R2 =60 H, R3 =61H。
6. SUB R3, R2
执行结果R2=60H,R3=01H
7. STA R3, [R2]
执行结果R2=60H,R3=01H,存储器60单元的内容为01H。
8. MUL R0, R1
执行结果R0=15H,R1=83H
9. STP
执行结果:无变化
10. JMP [R1]
执行结果转移到83H。
第一遍执行结束。执行结果是R0=15H,R1=83H,R2=60H,R3=01H,存储器60H单元的内容是01H,61H 单元的内容是83H。
(5)用单指(DZ)方式执行一遍程序。
初值:R0= 15H,R1 = 83H,R2 = 60H,R3 = 01H,存储器60H单元的内容是01H,61H单元的内容是83H。
1. LDA RO,[R2]
执行结果R2 = 60H,R0 = 01H。
2. LDA R1,[R3]
执行结果 R3 = 01H,R1 = 5DH。
3. ADD R0,R1
执行结果R0 = 5EH,R1= 5DH,C = 0
4.JC+5
执行结果转移到03H,因为C= 0。
5. AND R2,R3
执行结果 R2=00 H,R3 =01H。
6.SUB R3,R2
执行结果 R2 = 00H,R3 = 01H
7. STA R3,[R2]
执行结果R2 = 00H,R3 = 01H,存储器00单元的内容为01H。
8.MUL RO,R1
执行结果R0 = 0B6H,R1= 5DH
9. STP
执行结果:无变化
10. JMP [R1]
执行结果转移到5DH
第二遍执行结束。执行结果是R0 = B6H,R1= 5DH,R2 = 00H,R3 = 01H,存储器60H单元的内容是01H,61H单元的内容是83H,00H单元的内容为01H。
(6)用连续方式执行一遍程序
由于00单元的内容已被修改,因此在执行前应首先恢复00H单元的内容58H。
初值:R0 = 0B6H,R1 = 5DH,R2 = 00H,R3 = 01H,存储器60H单元的内容是01H,61H单元的内容是83H,00H单元的内容为58H。
1. LDA R0,[R2]
执行结果R2= 00H,R0 = 58H。
2. LDA R1,[R3]
执行结果R3 = 01H,R1 = 5DH。
3. ADD R0,R1
执行结果 R0 = 0B5H,R1 = 5DH,C = 0
4.JC+5
执行结果转移到03H,因为C= 0。
5. AND R2,R3
执行结果R2 =00 H,R3 =01H
6. SUB R3,R2
执行结果R2 = 00H,R3 = 01H
7. STA R3,[R2]
执行结果R2 = 00H,R3 = 01H,存储器00单元的内容为01H。
8.MUL R0,R1
执行结果R0 = 41H,R1 = 5DH
9. STP
执行结果:无变化
五、个人总结
在做第3个实验任务的存程序代码时很好的了解到如何给指定地址赋予指定的值,并没按下一次QD,地址值就会加一,就可以对下一个地址进行赋值。