计算机组成原理实验之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中有的连线接触不良。
计算机组成原理实验之CPU组成与指令周期实验的更多相关文章
- 【计算机组成原理】中央处理器CPU
一.CPU的功能和基本结构 1.功能 当用计算机解决某个问题是,我们首先必须为他编写程序,程序是一个指令序列,这个序列明确告诉计算机应该执行什么操作,在什么地方找到用来操作的数据,一旦把程序装入内存器 ...
- 计算机组成原理--64位CPU装载32位操作系统,它的寻址能力还是4GB吗?
借由这个问题,今天我们就把 32 位 CPU.64 位 CPU.32 位操作系统.64 位操作系统之间的区别与联系彻底搞清楚.对于这个问题,博主也是一知半解了好长时间啊~ 基本概念 32位的CPU与6 ...
- 计算机组成原理——中央处理器(CPU)考研题
(一) CPU的功能和基本结构 (二) 指令执行过程 (三) 数据通路的功能和基本结构 (四) 控制器的功能和工作原理 1. 硬布线控制器2. 微程序控制器微程序.微指 ...
- 计算机组成原理 — CPU 中央处理器
目录 文章目录 目录 前文列表 逻辑电路部件 组合逻辑电路 时序逻辑电路 阵列逻辑电路 中央处理器(CPU) 控制单元(控制器) 运算单元(运算器) 存储单元(寄存器组和片内缓存) CPU 的工作原理 ...
- 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器
计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...
- linux的系统组成和计算机组成原理,linux常用操作
Linux入门 linux简介 学习目的:linux服务器操作系统稳定长期运行,python,pycharm装于linux上 linux系统组成 应用软件:调用系统软件接口 linux操作系统分两 ...
- day01-编程与计算机组成原理
什么是编程 编程语言:是人与计算机沟通交流的介质,通过标准化的规则传递信息 编程:就是为了使计算机能够理解人的意图,通过编程语言写出一个个文件,这堆文件完成相应的目的 编程的目的:用计算机取代人完成工 ...
- 【0725 | Day 1】计算机编程/计算机组成原理/计算机操作系统
什么是编程 编程语言:人与计算机交流的手段 编程:通过编程语言编写文件 学习编程的目的:让计算机代替人力,为我们服务 计算机组成原理 计算机由五大部分组成:控制器.运算器.存储器.输入设备.输出设备. ...
- 重学计算机组成原理(五)- "旋转跳跃"的指令实现
CPU执行的也不只是一条指令,一般一个程序包含很多条指令 因为有if-else.for这样的条件和循环存在,这些指令也不会一路平直执行下去. 一个计算机程序是怎么被分解成一条条指令来执行的呢 1 CP ...
随机推荐
- 跟我学Spring3(9.2):Spring的事务之事务管理器
原文出处: 张开涛9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManage ...
- Linux命令缩写来由
A 命令 全称 功能 备注 apt AdvancedPackaging Tool APT用来自动下载,配置,安装二进制或者源代码格式的软件包 awk Aho Weiberger and Kerni ...
- HDU 4462 DFS
2012 Asia Hangzhou Regional Contest 给出N*N的矩阵,所有标记为0,当中有K个点标记为1.而且能够在该位置放置一个能够覆盖曼哈顿距离为r的草人.问最少放置几个草人, ...
- IntPtr 转 string
假设有 intPtr pBuffer 方法一: 直接使用Marshal.PtrToStringAnsi方法: string ss = Marshal.PtrToStringAnsi(pBuffer); ...
- (转)Unity中protobuf的使用方法
在移动手机游戏开发中,目前Unity3D已成为比较主流的开发技术. 那么对于客户端服务器协议的打解包,我们有3中常用的处理方式: 1.自定义结构体:在协议中直接传输代码中自定义的结构体:这种方式的坏处 ...
- Mac下Sublime Text 总是以新窗口打开文件的解决办法
Mac下的Sublime有个毛病,经常打开后,之前打开的窗口都没了,太难受了. Windows/Linux下的sublime总是默认的以标签页的形式打开关联的文件,但是在Mac下使用Sublime打开 ...
- Passing address of non-local object to __autoreleasing parameter for write-back
在希望通过函数的參数返回Objective-C对象的时候.遇到了这个问题 错误代码例如以下: - (void)methodA:(NSString **)string<span style=&qu ...
- ArcEngine10.x开发的许可问题
1. ArcEngine9.x迁至ArcEngine10.x 相信很多同学都知道,在ArcEngine9.x下正常编译的代码到ArcEngine10.x会报错:ArcGIS version not s ...
- 修改上一篇文章的node.js代码,支持调用自定义页面
上一篇文章所有请求只能调用index.html,现在做个改造,允许调用自定义页面 服务端 app.js var app = require('http').createServer(handler) ...
- Hibernate(十一)检索
一.Hibernate检索策略 二.检索方法 三.get和load比较 get和load的区别: get不支持延迟加载,而load支持. 当查询特定的数据库中不存在的数据时,get会返回null, ...