计算机组成原理实验之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 ...
随机推荐
- C语言union关键字,union和struct区别
union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间 ...
- IIS HTTP 错误 404.17 - Not Found 解决方法
错误提示如下图: 出现这种情况的原因通常是因为先安装了Framework,后安装的IIS: 运行cmd,输入: C:\Windows\Microsoft.NET\Framework\V4.0.30 ...
- PHP array与Json学习
在 PHP 中,有三种数组类型: 索引数组 - 带有数字索引的数组,(可以理解C/C++/Java中的数组,按照索引位置直接访问) 关联数组 - 带有指定键的数组,(可以理解为map,按照键值对存储, ...
- go的基结构体如何使用派生结构体的方法
将派生类的方法声明为接口嵌入到基结构体中,派生结构体声明该接口为自身.
- Bootstrap学习js插件篇之标签页
简单的标签页 代码: <h1 class="page-header">4.3标签页</h1> <ul class="nav nav-tabs ...
- js实现trim() JS去掉首尾空格 JS去掉两头空格
function trimStr(str){ return str.replace(/(^\s*)|(\s*$)/g,""); } 用的时候就是直接 var 变量=trimStr( ...
- Discuz常见小问题-如何修改自己发布的帖子
在发布的帖子的下方就有编辑的按钮,可以直接点击进去编辑
- Excel中R1C1引用样式
在Excel处理中,经常需要修改某行某列的值.默认情况下Excel中的列号是字母,每次都要去数,因为对字母的位置不熟悉,特别是又有合并单元格的时候,很容易数错.能不能把列也显示成数字,我坚信Offic ...
- Oracle function实现根据输入的日期以及天数,获取此日期之后的天数的工作日
前提:在法定节日表(t_fdjr )中维护法定节日包括周六周天 /** * 功能描述:根据输入的日期以及天数,获取此日期之后的天数的工作日 * 输入参数: * i_date YYYY-MM-DD * ...
- jQuery Mobile的学习时间bottonbutton的事件学习
程序猿都非常懒.你懂的! 生命的绝唱来机仅仅争朝夕,如诗的年华更需惜时如金. 不要让今天的懈怠成为一生的痛. 每天都在进步. 近期在学习jquery mobile开发.使用的button,绑定事件,和 ...