计算机组成原理实验之CPU组成与指令周期实验
(实验五 CPU组成与指令周期实验)
课程 计算机组成原理实验
实验日期 2015 年 12 月 8 日
一、实验目的
1.将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机。
2.用微程序控制器控制模型计算机的数据通路。
3.通过TEC-5执行由8条机器指令组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。
二、实验内容
1. 实验电路图1
2.实验任务
(1)将下表5-1的程序按机器指令格式手工汇编成二进制机器代码(要求预习时完成)。
表5-1
内存地址 |
机器指令 |
机器代码(十六进制表示) |
00H |
ADD R1, R0 |
01H |
01H |
JC R3 |
5CH |
02H |
STA R1, [R2] |
39H |
03H |
LDA R2, [R2] |
4AH |
04H |
AND R2, R0 |
22H |
05H |
SUB R2, R3 |
1EH |
06H |
OUT R2 |
78H |
07H |
STP |
60H |
(2) 将实验任务(1)中的程序代码用控制台指令存入内存中,并根据程序的需要,用数码开关SW7-SW0设置通用寄存器的数据和内存数据。要求使用两组寄存器数据,第一组寄存器数据在执行 ADD R1,R0指令时产生进位,第二组寄存器数据在执行ADD R1,R0指令时不产生进位,以观察同一程序的不同执行流程。
(3)用单拍(DP)方式执行一遍程序,记录最后得到的四个寄存器的数据,以及由STA指令存入RAM中的数据,与理论分析值比较。执行时注意观察各个指示灯的显示,以跟踪程序执行的详细过程(可观察到每一条微指令的执行过程)。
(4)用连续方式再次执行程序。这种情况相当于计算机正常的工作。程序执行到STP指令后自动停机。读出寄存器中的运算结果,与理论值比较。
参考数据:
假设第一组数据:
预置寄存器数据R0=35H,R1=43H,R2=10H,R3=07H。存储器10H单元的内容为55H。
假设第二组数据:
预置寄存器数据R0=86H,R1=88H,R2=10H,R3=07H。存储器10H单元的内容为55H。
三、实验环境
软件: WIN XP、串口调试助手软件
硬件:1.微机 1台
2.TEC-5实验系统 1台
3.逻辑测试笔 1支
4.编程器 公用
四、实验步骤和实验结果
(一)对机器指令系统组成的简单程序进行手工译码的结果如下:
内存地址 |
机器指令 |
机器代码(十六进制表示) |
00H |
ADD R1, R0 |
01H |
01H |
JC R3 |
5CH |
02H |
STA R1, [R2] |
39H |
03H |
LDA R2, [R2] |
4AH |
04H |
AND R2, R0 |
22H |
05H |
SUB R2, R3 |
1EH |
06H |
OUT R2 |
78H |
07H |
STP |
60H |
(二)接线表:
控制器 |
LDIR |
PC+1 |
LDPC# |
AR+1 |
LDAR# |
LDDR1 |
LDDR2 |
LDRi |
数据通路 |
LDIR |
PC+1 |
LDPC# |
AR+1 |
LDAR# |
LDDR1 |
LDDR2 |
LDRi |
控制器 |
SW_BUS# |
Rs_BUS# |
ALU_BUS# |
RAM_BUS# |
CER# |
CEL# |
数据通路 |
SW_BUS# |
Rs_BUS# |
ALU_BUS# |
RAM_BUS# |
CER# |
CEL# |
控制器 |
LR/W# |
Cn# |
M |
S0 |
S1 |
S2 |
S3 |
数据通路 |
LR/W# |
Cn# |
M |
S0 |
S1 |
S2 |
S3 |
控制器 |
进位C |
IR7 |
IR6 |
IR5 |
IR4 |
数据通路 |
进位C |
IR7 |
IR6 |
IR5 |
IR4 |
数据通路 |
IR3 |
IR2 |
IR1 |
IR0 |
IR1 |
IR0 |
数据通路 |
RS1 |
RS0 |
RD1 |
RD0 |
WR1 |
WR0 |
控制器 |
TJ |
时序电路 |
TJ |
(三)打开TEC-5电源。
(四)用串口调试助手对控存EEPROM进行改写。
首先需要用串口调试助手对控存EEPROM进行改写:
TEC-5中的4片EEPROM(CM0-CM3,U35-U38)是控存,里面装有TEC-5微程序的微代码。由于它是电可擦除可编程的EEPROM,因此可以实现不用将CM0-CM3从插座上取出就能实现对其编程的目的。为此我们在TEC-5上用1片单片机芯片89S52(U39)和一些附加电路实现了不用拔出CM0-CM3就能对其编程,从而改写这些EEPROM中微代码的目的。89S52中包含一个监控程序,它负责通过串行口和PC机通讯,向PC机发出提示信息、接收命令和数据,并根据接收到的命令(0,1,2,3)决定将随后收到的64个数据写入指定的EEPROM。命令0、1、2、3指定写那个器件,0对应CM0,1对应CM1,2对应CM2,3对应CM3。64个字节的数据将写入指定EEPROM的前64个单元(地址00H-3FH)。
注意波特率为1200波特。
CM0-CM3的下载步骤:
(1)在TEC-5关闭电源的情况下,用出厂时提供的RS232串口线将TEC-5实验仪的串口与主机的串口连接起来。TEC-5上的编程开关拨到“1编程”位置。将串口调试助手程序打开,设置好参数。打开电源。按一下复位键RESET,使控制存储器处于接收信息状态,此时TEC-5中微地址与微码的指示灯全亮。(注意:在数据传送过程中这些指示灯会闪烁)。
(2)软件的数据接收区此时会显示‘WAITING FOR COMMAND ...’,如下图4。按“清空重填”按钮,然后请在数据发送窗口写入‘0’,按‘手动发送’按钮,将命令‘0’发送给89S52,表示通知它要写CM0文件了。
(3)此时数据接收区会出现‘PLEASE CHOOSE A CM FILE’,如下图5所示,请通过按钮‘选择发送文件’,选择要写入二进制文件(如CM0.BIN),文件必须是“BIN”格式,长度为64字节。然后点击‘发送文件’按钮,将文件发往89S52。89S52接收数据并对CM0编程,然后它读出CM0的数据和从PC机接收到数据比较,不管正确与否,89S52都向PC机发出结果信息,在串口调试助手软件数据接收窗口显示出来。如果发送成功,则结果如下图6所示。
图4 数据接收区等待命令窗口
图5 选择发送文件窗口
图6 数据接收区发送成功窗口
(4)等待文件发送完毕的提示(注意看软件的最底下的状态行和数据接收区),请注意看数据接收区的命令提示,重复(2)-(3)步骤,分别输入命令‘1’、‘2’、‘3’,同时,应分别选择CM1、CM2、CM3文件,对相应的EEPROM编程。CM1、CM2、CM3全部编程完后,按RESET按钮结束编程。最后将TEC-5上的编程开关拨到正常位置。
注意:对CM0、CM1、CM2、CM3的编程顺序无规定,只要在发出器件号后紧跟着发送该器件的编程数据(文件)即可。例如,可以按CM3、CM2、CM0、CM1的顺序编程。编程也可以只对一个或者几个EEPROM编程,不一定对4个EEPROM全部编程,只要编程结束后按RESET按钮结束编程,最后将TEC-5上的编程开关拨到正常位置即可
(五)存程序代码。
设置通用寄存器R0、R1、R2和R3的第一组值及存储器相关单元的数据。
设本组的寄存器数据R0=35H,R1=43H,R2=10H,R3=07H。存储器10H单元的内容为55H。选择这组数据的目的是执行ADD R1,R0指令时不产生进位C,从而在执行JC R3指令时不产生跳转,而是顺序执行。
设置通用寄存器R0、R1、R2和R3的值
在本操作中,置R0=35H,R1=43H,R2=10H,R3=07H
(1)令DP=0,DB=0,使系统处于连续运行状态。令SWC=0,SWB=1,SWA=1,使系统处于写寄存器状态WRF。按CLR#按钮,使实验系统处于初始状态。
(2)在SW7—SW0上设置一个存储器地址,该存储器地址供设置通用寄存器使用。即该地址设置为0FFH。按一次QD按钮,将0FFH写入左端口地址寄存器AR。
(3)在SW7—SW0上设置00H,作为通用寄存器R0的寄存器号。按一次QD按钮,将00H写入指令寄存器IR。
(4)在SW7—SW0设置35H,按一次QD按钮,将35H写入IR指定的R0寄存器。
(5)写入R1、R2、R3方法与写入R0类似,即重复(3)和(4)。
具体写寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器号 |
SW7-SW0 |
执行 |
结果 |
SW7-SW0 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
00H写入IR |
35H |
将35H写入IR指定的R0寄存器 |
||||
(R1)01H |
0000 0001 |
01H写入IR |
43H |
将43H写入IR指定的R0寄存器 |
|||||
(R2)02H |
0000 0010 |
02H写入IR |
10H |
将10H写入IR指定的R0寄存器 |
|||||
(R3)03H |
0000 0011 |
03H写入IR |
07H |
将07H写入IR指定的R0寄存器 |
设置完R0-R3的值后,用读寄存器控制台操作检查一下写入内容是否正确。
具体读寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器号 |
SW7-SW0 |
执行 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
DBUS上显示35H |
||||
(R1)01H |
0000 0100 |
DBUS上显示43H |
|||||
(R2)02H |
0000 1000 |
DBUS上显示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上显示07H |
向存储器中输入程序机器代码和数据
本操作中,我们从00地址开始存8个机器代码:01H,5CH,39H,4AH,22H,1EH,78H,60H。在10H单元存入55H,作为10H单元的初值,以检查LDA和STA两条指令的作用。
(1)令DP = 0,DB = 0,使实验系统处于连续运行状态。令SWC = 0、SWB = 0、SWA = 1,使实验系统处于写双端口存储器工作方式WRM。按CLR#按钮,使实验系统处于初始状态。
(2)置SW7—SW0为00H,按QD按钮,将00H写入左端口地址寄存器AR。
(3)置SW7—SW0 为01H,按QD按钮,将01H写入存储器00H单元。AR自动加1,变为01H。
(4)置SW7—SW0 为5CH,按QD按钮,将5CH写入存储器01H单元。AR自动加1,变为02H。
(5)将数据39H、4AH、22H、1EH、78H、60H分别写入存储器02H单元、03H单元、04H单元、05H、06H单元、07H单元的方法与上述类似。
(6)按CLR#按钮,使实验系统恢复到初始状态。
(7)置SW7—SW0为10H,按QD按钮,将10H写入左端口地址寄存器AR。
(8)置SW7—SW0 为55H,按QD按钮,将55H写入存储器10H单元。AR自动加1,变为11H。
具体写存储器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 0 1) |
|||||
|
||||||
(内存单元) |
(机器代码)SW7-SW0 |
执行 |
执行结果 |
|||
(00H) |
00H |
按QD按钮 |
将00H写入左边地址寄存器AR |
|||
(00H) |
01H |
将01H写入存储器00H单元,AR自动加1,变为01H |
||||
(01H) |
5CH |
将5CH写入存储器01H单元,AR自动加1,变为02H |
||||
(02H) |
39H |
将39H写入存储器02H单元,AR自动加1,变为03H |
||||
(03H) |
4AH |
将4AH写入存储器03H单元,AR自动加1,变为04H |
||||
(04H) |
22H |
将22H写入存储器04H单元,AR自动加1,变为05H |
||||
(05H) |
1EH |
将1EH写入存储器05H单元,AR自动加1,变为06H |
||||
(06H) |
78H |
将78H写入存储器06H单元,AR自动加1,变为07H |
||||
(07H) |
60H |
将60H写入存储器07H单元,AR自动加1,变为08H |
||||
按CLR#使系统处于初始状态 |
||||||
(内存单元) |
(机器代码)SW7-SW0 |
执行 |
执行结果 |
|||
(10H) |
10H |
按QD按钮 |
将10H写入左边地址寄存器AR |
|||
|
55H |
将55H写入存储器10H单元,AR自动加1,变为11H |
设置完存储器的程序和数据后,用存储器控制台操作检查一下写入的内容是否正确。
具体读存储器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
内存单元 |
SW7-SW0 |
执行 |
执行结果 |
|||
AR7-AR0显示 |
DBUS7-DBUS0显示 |
|||||
00H |
00H |
按QD按钮 |
00H |
01H |
||
01H |
- |
01H |
5CH |
|||
02H |
- |
02H |
39H |
|||
03H |
- |
03H |
4AH |
|||
04H |
- |
04H |
22H |
|||
05H |
- |
05H |
1EH |
|||
06H |
- |
06H |
78H |
|||
按CLR#使系统处于初始状态 |
||||||
10H |
10H |
按QD按钮 |
10H |
55H |
||
|
|
|
|
●用单拍(DP)方式执行一遍程序。
置SWC=0,SWB=0,SWA=0,DP=1,DB=0,使实验系统处于单拍运行状态。置SW7—SW0=00H,使程序从地址00H开始执行。按CLR#按钮,使实验系统处于初始状态,然后一次一次按QD按钮,使程序一拍一拍的执行。
在单拍执行过程中,首先要随时监测AR、PC、µA5—µA0和IR的值,以判定程序执行到何处,正在执行哪条指令和微指令。对照微程序流程图,可以判断出微指令的地址和正在进行的微操作。
程序执行的结果如下:
初值:R0=35H,R1=43H,R2=10H,R3=07H。存储器10H单元的内容为55H。
(1)ADD R1,R0
执行结果 R0=35H,R1=78H,R2=10H,R3=07H。存储器10H单元的内容为( 55 )H。无进位C。
(2)JC R3
执行结果 R0=35H,R1=78H,R2=10H,R3=07H。存储器10H单元的内容为( 55 )H。PC为(02)H。进位C不变。
(3)STA R1,[R2]
执行结果 R0=35H,R1=78H,R2=( 10 )H,R3=07H。存储器10H单元的内容为( 78 )H。
(4)LDA R2,[R2]
执行结果 R0=35H,R1=78H,R2=(78)H,R3=07H。存储器10H单元的内容为(78)H。
(5)AND R2,R0
执行结果 R0=35H,R1=78H,R2=(30)H,R3=07H。存储器10H单元的内容为(78)H。
(6)SUB R2,R3
执行结果 R0=35H,R1=78H,R2=( 29 )H,R3=07H。存储器10H单元的内容为(78)H。进位C为1。
(7)OUT R2
执行结果 R0=35H,R1=78H,R2=(29)H,R3=07H。存储器10H单元的内容为( 78 )H。可在数据总线DBUS指示灯上观察到( 29 )H。
(8)STP
执行结果 R0=( 35 )H,R1=(78)H,R2=( 29 )H,R3=(07)H。存储器10H单元的内容为( 78 )H。
最后的执行结果可通过控制台的读寄存器操作和读存储器操作观察到,在观察最后结果之前,首先应按CLR#按钮,使实验系统处于初始状态。
具体读寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器号 |
SW7-SW0 |
执行 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
DBUS上显示35H |
||||
(R1)01H |
0000 0100 |
DBUS上显示78H |
|||||
(R2)02H |
0000 1000 |
DBUS上显示29H |
|||||
(R3)03H |
0000 1100 |
DBUS上显示07H |
具体读存储器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
内存单元 |
SW7-SW0 |
执行 |
执行结果 |
|||
AR7-AR0显示 |
DBUS7-DBUS0显示 |
|||||
10H |
10H |
按QD按钮 |
10H |
78H |
●用连续方式执行一遍程序
(1)由于上面的单拍执行程序,已破坏了寄存器R1、R2和存储器10单元的内容(程序没有破坏),因此需要重新设置寄存器R1、R2和存储器10单元的值。初值:R0=35H,R1=43H,R2=10H,R3=07H。存储器10H单元的内容为55H。
重新写寄存器R1、R2的值的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器号 |
SW7-SW0 |
执行 |
结果 |
SW7-SW0 |
执行结果 |
||||
(R1)01H |
0000 0001 |
|
01H写入IR |
43H |
将35H写入IR指定的R1寄存器 |
||||
(R2)02H |
0000 0010 |
02H写入IR |
10H |
将10H写入IR指定的R2寄存器 |
重新写存储器10单元的值的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 0 1) |
|||||
|
||||||
(内存单元) |
(机器代码)SW7-SW0 |
执行 |
执行结果 |
|||
(10H) |
10H |
按QD按钮 |
将10H写入左边地址寄存器AR |
|||
|
55H |
将55H写入存储器10H单元,AR自动加1,变为11H |
(2)置SWC=0,SWB=0,SWA=0,DP=0,DB=0,使实验系统处于连续运行状态。置SW7—SW0=00H,使程序从地址00H开始执行。按CLR#按钮,使实验系统处于初始状态,然后按一次QD按钮,则程序自动连续运行到地址为07H的STP指令。
执行结果 R0=( 35 )H,R1=(78)H,R2=( 29 )H,R3=(07)H。存储器10H单元的内容为( 78 )H。
最后的执行结果可通过控制台的读寄存器操作和读存储器操作观察到,在观察最后结果之前,首先应按CLR#按钮,使实验系统处于初始状态。
具体读寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器号 |
SW7-SW0 |
执行 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
DBUS上显示35H |
||||
(R1)01H |
0000 0100 |
DBUS上显示78H |
|||||
(R2)02H |
0000 1000 |
DBUS上显示29H |
|||||
(R3)03H |
0000 1100 |
DBUS上显示07H |
具体读存储器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
内存单元 |
SW7-SW0 |
执行 |
执行结果 |
|||
AR7-AR0显示 |
DBUS7-DBUS0显示 |
|||||
10H |
10H |
按QD按钮 |
10H |
78H |
(六)存程序代码,(如果前面4.的存入程序代码不被破坏,就不要重新输入)
设置通用寄存器R0、R1、R2和R3的第二组值及存储器相关单元的数据。
设本组寄存器数据:R0=86H,R1=88H,R2=10H,R3=07H。存储器10H单元的内容为55H。选择这组数据的目的是执行ADD R1,R0指令时产生进位C,从而在执行JC R3指令时产生跳转,而不是顺序执行。
设置通用寄存器R0、R1、R2和R3的值
在本操作中,设R0=86H,R1=88H,R2=10H,R3=07H,
具体写寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器号 |
SW7-SW0 |
执行 |
结果 |
SW7-SW0 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
00H写入IR |
86H |
将86H写入IR指定的R0寄存器 |
||||
(R1)01H |
0000 0001 |
01H写入IR |
88H |
将88H写入IR指定的R0寄存器 |
|||||
(R2)02H |
0000 0010 |
02H写入IR |
10H |
将86H写入IR指定的R0寄存器 |
|||||
(R3)03H |
0000 0011 |
03H写入IR |
07H |
将86H写入IR指定的R0寄存器 |
设置完R0-R3的值后,用读寄存器控制台操作检查一下写入内容是否正确。
具体读寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器号 |
SW7-SW0 |
执行 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
DBUS上显示86H |
||||
(R1)01H |
0000 0100 |
DBUS上显示88H |
|||||
(R2)02H |
0000 1000 |
DBUS上显示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上显示07H |
向存储器中输入程序机器代码和数据。
本操作中,我们从00地址开始存8个机器代码:01H,5CH,39H,4AH,22H,1EH,78H,60H。在10H单元存入55H。
具体写存储器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 0 1) |
|||||
|
||||||
(内存单元) |
(机器代码)SW7-SW0 |
执行 |
执行结果 |
|||
(00H) |
00H |
按QD按钮 |
将00H写入左边地址寄存器AR |
|||
(00H) |
01H |
将01H写入存储器00H单元,AR自动加1,变为01H |
||||
(01H) |
5CH |
将5CH写入存储器01H单元,AR自动加1,变为02H |
||||
(02H) |
39H |
将39H写入存储器02H单元,AR自动加1,变为03H |
||||
(03H) |
4AH |
将4AH写入存储器03H单元,AR自动加1,变为04H |
||||
(04H) |
22H |
将22H写入存储器04H单元,AR自动加1,变为05H |
||||
(05H) |
1EH |
将1EH写入存储器05H单元,AR自动加1,变为06H |
||||
(06H) |
78H |
将78H写入存储器06H单元,AR自动加1,变为07H |
||||
(07H) |
60H |
将60H写入存储器07H单元,AR自动加1,变为08H |
||||
按CLR#使系统处于初始状态 |
||||||
(内存单元) |
(机器代码)SW7-SW0 |
执行 |
执行结果 |
|||
(10H) |
10H |
按QD按钮 |
将10H写入左边地址寄存器AR |
|||
|
55H |
将55H写入存储器10H单元,AR自动加1,变为11H |
设置完存储器的程序和数据后,用读存储器控制台操作检查一下写入内容是否正确。
具体读存储器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
内存单元 |
SW7-SW0 |
执行 |
执行结果 |
|||
AR7-AR0显示 |
DBUS7-DBUS0显示 |
|||||
00H |
00H |
按QD按钮 |
00H |
01H |
||
01H |
- |
01H |
5CH |
|||
02H |
- |
02H |
39H |
|||
03H |
- |
03H |
4AH |
|||
04H |
- |
04H |
22H |
|||
05H |
- |
05H |
1EH |
|||
06H |
- |
06H |
78H |
|||
按CLR#使系统处于初始状态 |
||||||
10H |
10H |
按QD按钮 |
10H |
55H |
- 用单拍(DP)方式执行一遍程序。
置SWC=0,SWB=0,SWA=0,DP=1,DB=0,使实验系统处于单拍运行状态。置SW7—SW0=00H,使程序从地址00H开始执行。按CLR#按钮,使实验系统处于初始状态,然后一次一次按QD按钮,使程序一拍一拍的执行。
在单拍执行过程中,首先要随时监测AR、PC、µA5—µA0和IR的值,以判定程序执行到何处,正在执行哪条指令和微指令。对照微程序流程图,可以判断出微指令的地址和正在进行的微操作。程序执行的结果如下:
初值:R0=86H,R1=88H,R2=10H,R3=07H。存储器10H单元的内容为55H。
(1)ADD R1,R0
执行结果 R0=(86 )H,R1=(0E)H,R2=(10)H,R3=( 07 )H。存储器10H单元的内容为(55)H。有进位C。
(2)JC R3
执行结果 R0=(86)H,R1=(0E)H,R2=(10)H,R3=(07)H。存储器10H单元的内容为(55)H。PC为(07)H。进位C不变。
(3)STP
执行结果 R0=(86)H,R1=( 0E )H,R2=(10 )H,R3=(07)H。存储器10H单元的内容为(55)H,进位C为1。
最后的执行结果可通过控制台的读寄存器操作和读存储器操作观察到,在观察最后结果之前,首先应按CLR#按钮,使实验系统处于初始状态。
具体读寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器号 |
SW7-SW0 |
执行 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
DBUS上显示86H |
||||
(R1)01H |
0000 0100 |
DBUS上显示0EH |
|||||
(R2)02H |
0000 1000 |
DBUS上显示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上显示07H |
读存储器:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
内存单元 |
SW7-SW0 |
执行 |
执行结果 |
|||
AR7-AR0显示 |
DBUS7-DBUS0显示 |
|||||
10H |
10H |
按QD按钮 |
10H |
55H |
●用连续方式执行一遍程序。
(1)由于上面的单拍执行程序,已破坏了寄存器R1内容(程序没有破坏),因此需要重新设置寄存器R1的值。初值:R0=86H,R1=88H,R2=10H,R3=07H。存储器10H单元的内容为55H。
写寄存器R1的值:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器号 |
SW7-SW0 |
执行 |
结果 |
SW7-SW0 |
执行结果 |
||||
(R1)01H |
0000 0001 |
按QD按钮 |
01H写入IR |
88H |
将88H写入IR指定的R1寄存器 |
(2)置SWC=0,SWB=0,SWA=0,DP=0,DB=0,使实验系统处于连续运行状态。置SW7—SW0=00H,使程序从地址00H开始执行。按CLR#按钮,使实验系统处于初始状态,然后按一次QD按钮,则程序自动连续运行到地址为07H的STP指令。
执行结果 R0=(86)H,R1=( 0E )H,R2=(10 )H,R3=(07)H。存储器10H单元的内容为( 55 )H。
最后的执行结果可通过控制台的读寄存器操作和读存储器操作观察到,在观察最后结果之前,首先应按CLR#按钮,使实验系统处于初始状态。
具体读寄存器的操作如下表所示:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
SW7-SW0 |
按QD将0FFH写入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器号 |
SW7-SW0 |
执行 |
执行结果 |
||||
(R0)00H |
0000 0000 |
按QD按钮 |
DBUS上显示86H |
||||
(R1)01H |
0000 0100 |
DBUS上显示0EH |
|||||
(R2)02H |
0000 1000 |
DBUS上显示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上显示07H |
读存储器:
DP DB |
使系统处于连续状态 |
SWC SWB SWA |
按CLR#使系统处于初始状态 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
内存单元 |
SW7-SW0 |
执行 |
执行结果 |
|||
AR7-AR0显示 |
DBUS7-DBUS0显示 |
|||||
10H |
10H |
按QD按钮 |
10H |
55H |
五、实验结果与讨论
(一)第一组数据的实验结果:
在存完寄存器和存储器数据,并通过读取数据及指令以确保数据及指令无误后,用单拍方式和连续方式执行程序,查看寄存器R0、R1、R2、R3及(10H)单元的值,如下所示:
最终通用寄存器和内存单元数据表(实验结果表)
寄存器号 |
R0 |
R1 |
R2 |
R3 |
(10H) |
理论值 |
35H |
78 H |
29H |
07 H |
78H |
实验值 |
35H |
78 H |
29H |
07 H |
78H |
实验数据与理论数据相符。
(二)第二组数据的实验结果:
在存完寄存器和存储器数据,并通过读取数据及指令以确保数据及指令无误后,用单拍方式和连续方式执行程序,查看寄存器R0、R1、R2、R3及(10H)单元的值,如下所示:
最终通用寄存器和内存单元数据表(实验结果表)
寄存器号 |
R0 |
R1 |
R2 |
R3 |
(10H) |
理论值 |
86H |
0E H |
10H |
07 H |
55H |
实验值 |
86H |
0E H |
10H |
07 H |
55H |
实验数据与理论数据相符。
六、思考题
请简述设计模型计算机的步骤。
答:模型机设计具体步骤下:
1、 确定指令系统;
2、 规划设计整机逻辑;
3、 设计数据通路;
4、 设计控制器(以常规型微程序控制器为例);
a.设计时序电路;
b.最后确定指令周期;
c.画出微程序流程图,同时检查设计的数据通路和控制器是否满足1、指令系统的要求。
d.根据微程序流程图化简、归并微信号;
e.设计微指令格式;
f.设计地址转移逻辑;
g.若不满足,则进行修改,返回到C进行修改;
h.根据流程图编写微代码;
i.写微代码到控制存储器,并检查写入代码的正确性;
5、将数据通路与控制器联机,组成一台模型计算机;
6、通过运行一段简单的程序(应包括该机的所有指令系统),便可知道设计的正确性。不过程序运行前须通过控制台为所用的寄存器、内存单元提供必要的数据以及向内存送程序的机器代码。
七、总结
(一) 本次实验按时按量完成。
(二) 通过本次实验我将微程序控制器同执行部件(整个数据通路)联机,组成了一台模型计算机。并用微程序控制器控制模型计算机的数据通路。最后通过TEC-5执行由8条机器指令组成的简单程序,掌握机器指令与微指令的关系,牢固建立了计算机的整机概念。
(三) 本次实验将前面几个实验中的所有电路,包括运算器、存储器、通用寄存器堆、微程序控制器等模块组合在一起,构成一台简单的模型机。因此,本实验与前面的实验相比,虽然会比较复杂些,但也是收获最多的一个实验。
(四) 在前面的实验中,我们学生本身作为“控制器”,完成了对数据通路的控制。而在这次实验中,数据通路的控制将交由微程序控制器来完成。TEC-5从内存中取出一条机器指令到执行指令结束的一个指令周期,是由微程序完成的,即一条机器指令对应一个微程序序列。
(五) 本次实验起初多次出现存入寄存器的数据无法正确读出的问题,经过反复排查与请教老师,发现是因为接线接触不良的问题,接下来的几次独立试验则十分注意接线的接触问题,情况得到很好改善。
(六) 开始执行程序的时候,如果指令没有按照应该有的顺序执行,而是跳到下一条或者是其他条,则应该排查接线IR7-IR4的接触是否良好。
(七) 若74LS181运算结果有的对,有的错,可能是S3-S0中有的连线接触不良。
posted on 2016-01-03 16:16 CuriousZero 阅读(11296) 评论(0) 编辑 收藏 举报