计算机组成大型实验报告机器指令设计实验.docx
《计算机组成大型实验报告机器指令设计实验.docx》由会员分享,可在线阅读,更多相关《计算机组成大型实验报告机器指令设计实验.docx(18页珍藏版)》请在冰豆网上搜索。
计算机组成大型实验报告机器指令设计实验
机器指令设计实验-实验报告
一、实验目的与要求
(1)通过实验分析简单模型机结构,了解计算机工作原理。
(2)掌握计算机微程序控制器的控制方法,掌握计算机指令执行过程。
(3)在简单模型计算机基础上设计新的技巧指令,在第二章实验八的基础上实施,使用的实验部件和接线不变,增加5条新机器指令,目的是提高学生对计算机机器指令的理解,锻炼学生自己动手设计模型计算机机器指令的能力。
二、实验原理
1.简单模型计算机构架
简单模型计算机逻辑结构如图1所示,构成简单模型计算机的实验部件以总线为基本连
接通道,主要有以下7个:
(1)算术逻辑运算部件ALUUNIT进行算术逻辑运算操作。
(2)存储器部件MEMUNIT,存储模型计算机汇编语言程序和操作数据。
(3)地址寄存器部件ADDRESSUNIT,包含两部分电路,地址寄存器AR:
接收存储器程序中的指令地址和指令中的数据地址;指令地址计数器PC:
用于指示程序中的指令地址并通过地址缓冲器送往地址寄存器AR。
(4)指令寄存器部件INSUNIT,寄存器当前正在执行的机器指令,此指令的指令码通过指令译码器向微程序控制器指示相应的微程序入口地址;此指令的地址码指示的操作数地址,送往地址寄存器AR。
(5)输入/输出部件INPUT/OUTPUT,操作数据的输入与输出显示。
(7)通用寄存器部件REGUNIT,暂存运算的中间数据。
(7)微程序控制器部件MAINCONTROLUNIT,控制各部件完成指令的功能。
2.简单模型计算机指令系统
每台计算机都有一套特定的指令系统,简单模型计算机设计了5条机器指令,表1是简单模型计算机5条指令基本功能表。
表中的指令名称反应了指令功能。
此简单模型计算机的指令系统包括控制台指令与机器指令。
共三条控制台指令,由手动控制单元(MANUALUNIT)的KB,KA开关设定。
控制台指令只能由手工操作一条条指令,不能编写在汇编程序中。
实验八已经给出5条机器指令。
另外根据微指令格式,可以设计出实验要求的5条指令。
先进行微指令译码分析,然后详细说明如何设计。
(1)微指令译码分析:
图1-简单模型计算机逻辑结构图
表1-简单模型机指令表
指令名称
助记符
指令码格式
输入
INR0,PORTAR
I7,I6,I5,I4,I3,I2,I1,I0
110000DR
PORTAR
算术加
ADDR0,[ADDR]
I7,I6,I5,I4,I3,I2,I1,I0
110001DR
ADDR
寄存器内容送存储器
STA[ADDR],R0
I7,I6,I5,I4,I3,I2,I1,I0
110010DR
ADDR
输出
OUTPORTAR,[ADDR]
I7,I6,I5,I4,I3,I2,I1,I0
110011DR
PORTAR
转移
JMPADDR
I7,I6,I5,I4,I3,I2,I1,I0
110100XX
ADDR
表2-微指令字段编码表
编码+译码
BTO
OTB
FS=1
FS=0
FUNC
000
PC+1(T4)
001
B-DA1(T4)
ALU-B#
J
(1)
M-W#(T3)
010
B-DA2(T4)
299-B#
J
(2)
M-R#(T2)
011
B-IR(T3)
SR-B#
J(3)
I/O-W#(T3)
100
B-DR(T4)
DR-B#
J(4)
I/O-R#(T2)
101
B-SP(T4)
SI-B#
J(5)
INT-R#(T2)
110
B-AR(T3)
SP-B#
CyCn#
INT-E#(T3)
111
B-PC#
PC-B#
CyNCn#
表3-散转微地址形成规则表
散转条件
散装微地址形成规则
j
(1)条件
指令码I7I6=11时,
散转入口地址=微代码下址(OR)0,1,0,I5,I4,I3,I2
指令码I7I6!
=11时,
散转入口地址=微代码下址(OR)0,0,0,I7,I6,I5,I4
j
(2)条件
散转入口地址=微代码下址(OR)0,0,0,0,0,I3,I2
j(3)条件
散转入口地址=微代码下址(OR)0,0,0,0,0,KB,KA
j(4)条件
散转入口地址=微代码下址(OR)0,0,0,0,0,FC,FZ
j(5)条件
散转入口地址=微代码下址(OR)0,INT,0,0,0,0,0
注:
表格中FC为进位标志,FZ为零标志。
本实验只要到J
(1),J(3),J(4)四条散转条件。
表4-简单模型计算机机器指令表
指令功能
IN
ADD
STA
OUT
JMP
指令符号
数据输入
算术加
数据传输
数据输入
跳转
微程序入口地址
30H
31H
32H
33H
34H
(2)微程序流程图
根据实验八的机器指令和控制台指令可以画出图2所示的流程图。
图2-模型计算机指令执行流程图
三、四条指令的微程序代码设计
根据实验要求的汇编程序,发现并不需要INCDR这条指令,所以也没有对其进行微代码的设计。
另外显然PC->AR,PC+1->PC;01H->02H
RAM->IR;02H->03H
J
(1)散转;03H->(10H)
三条微指令动作为公操作。
因此我们只需要考虑除此之外的其他微指令动作。
下面对4条指令,逐条进行解释分析。
1.无借位减:
SUBDR,[ADDR]
a.指令功能:
(SR)-(DR)->DR,影响Cy,Zi标志位。
当(SR)<(DR)时,Cy=1,当(SR)=DR时,Zi=1。
。
b.指令格式:
二字节指令
c.指令流程:
PC->AR,PC+1->PC;01H->02H
RAM->IR;02H->03H
J
(1)散转;03H->(10H)
PC->AR,PC+1->PC;35H->12H
RAM->AR;12H->13H
RAM->DA1;13H->14H
DR->DA2;14H->15H
DA1-DA2->DR;15H->01H
微地址
微代码
BTO
OTB
FUNC
FS
S3
S2
S1
S0
M
Ci
N
下址
微指令注释
35H
DC4012
110
111
000
1
0
0
0
0
0
0
0
0010010
PC->AR,PC=PC+1
12H
C10013
110
000
010
0
0
0
0
0
0
0
0
0010011
RAM->AR
13H
210014
001
000
010
0
0
0
0
0
0
0
0
0010100
RAM->DA1
14H
500015
010
100
000
0
0
0
0
0
0
0
0
0010101
DR->DA2
15H
87D801
100
001
111
1
0
1
1
0
0
0
0
0000001
DA1-DA2->DR
2.带进位加:
ADDCDR,[ADDR]
a.指令功能:
(SR)+(DR)+Cy->DR,影响Cy,Zi标志位。
当(SR)+(DR)+Cy>255时,Cy=1,当(SR)+(DR)+Cy=256时,Zi=1。
.这条指令可实现多字节的加法操作。
b.指令格式:
c.指令流程:
PC->AR,PC+1->PC;01H->02H
RAM->IR;02H->03H
J
(1)散转;03H->(10H)
PC->AR,PC+1->PC;36H->18H
RAM->AR;18H->19H
RAM->DA1;19H->1AH
DR->DA2;1AH->1BH
DA1+DA2+Cy->DR;1BH->01H
d.微程序代码:
微地址
微代码
BTO
OTB
FUNC
FS
S3
S2
S1
S0
M
Ci
N
下址
微指令注释
36H
DC4018
110
111
000
1
0
0
0
0
0
0
0
0011000
PC->AR,PC=PC+1
18H
C10019
110
000
010
0
0
0
0
0
0
0
0
0011001
RAM->AR
19H
21001A
001
000
010
0
0
0
0
0
0
0
0
0011010
RAM->DA1
1AH
50001B
010
100
000
0
0
0
0
0
0
0
0
0011011
DR->DA2
1BH
87D801
100
001
110
1
1
0
0
1
0
1
0
0000001
DA1+DA2+Cy->DR,CyCn
3.C条件转移:
JMPC[ADDR]
a.指令功能:
若Cy=1,则[ADDR]->PC,否则顺序执行下条指令。
影响Cy,Zi标志位。
b.指令格式:
c.指令流程:
PC->AR,PC+1->PC;01H->02H
RAM->IR;02H->03H
J
(1)散转;03H->(10H)
PC->AR,PC+1->PC;37H->41H
RAM->AR;41H->42H
RAM->DA1;42H->43H
J4#条件散转转移;43H->(44H)
若Cy=0;44H->01H
若Cy=1;44H->46HDA1->PC;46H->01H
d.微程序代码:
微地址
微代码
BTO
OTB
FUNC
FS
S3
S2
S1
S0
M
Ci
N
下址
微指令注释
37H
DC4041
110
111
000
1
0
0
0
0
0
0
0
1000001
PC->AR,PC=PC+1
41H
C10042
110
000
010
0
0
0
0
0
0
0
0
1000010
RAM->AR
42H
210043
001
000
010
0
0
0
0
0
0
0
0
1000011
RAM->DA1
43H
024044
000
000
100
1
0
0
0
0
0
0
0
1000100
J(4)
44H
000001
000
000
000
0
0
0
0
0
0
0
0
0000001
NULL
45H
000000
000
000
000
0
0
0
0
0
0
0
0
0000000
NULL
46H
E44101
111
001
000
1
0
0
0
0
0
1
0
0000001
DA1->PC,PC+1有效
4.存储器内容送通用寄存器LDADR,[ADDR]
a.指令功能:
(ADDR)->DR,不影响Cy,Zi标志位。
b.指令格式:
c.指令流程:
PC->AR,PC+1->PC;01H->02H
RAM->IR;02H->03H
J
(1)散转;03H->(10H)
PC->AR,PC+1->PC;39H->3CH
RAM->AR;3CH->3DH
RAM->DA1;3DH->3EH
DA1->DR;3EH->01H
微地址
微代码
BTO
OTB
FUNC
FS
S3
S2
S1
S0
M
Ci
N
下址
微指令注释
39H
DC403C
110
111
000
1
0
0
0
0
0
0
0
0111100
PC->AR,PC=PC+1
3CH
C1003D
110
000
010
0
0
0
0
0
0
0
0
0111101
RAM->AR
3DH
21003E
001
000
010
0
0
0
0
0
0
0
0
0111110
RAM->DA1
3EH
843C01
100
001
000
0
1
1
1
1
0
0
0
0000001
DA1->DR
根据这四条指令微代码可以得到如图3所示流程图。
图3-新增指令逻辑结构图
四、汇编程序设计
1.程序功能
程序功能是对输入开关上的数据和存储器某一单元中的数据进行加法操作,结果累计在存储器某个单元中,当累计值大于256时转而进行减法操作,即把此存储器单元中的值减去输入开关上的数据,结果送同一存储器单元中,当操作结果小于0时再转而进行加法操作,使输出显示顶上出现数据连续加,然后连续减,减到0时候连续加。
这样连续加、连续减直到拨动
结束程序运行为止。
2.程序流程图
3.汇编程序代码:
端口号(POATAR)只有一个,为00H。
主存储器单元地址为30H存放数据,用主存储器单元31H,32H来存放跳转地址。
由于JMPC[ADDR]跳转的是ADDR所指内容,故需要额外的开销。
如果尝试把C条件转移改成JMPCADDR也是很简单的事情,具体可以查看附件excel表格MY-CODE.XLS中的“汇编代码1”表。
每次存储器值更新,都通过OUT指令进行存储器内容送入输出设备(00H)显示。
另外,由于简单模型机机器指令并没有立即数传输给寄存器或存储器,因此存储器清零操作需要一定的技巧。
我们采用的方法是先把存储器内容传给寄存器,然后存储器内容减去寄存器内容,值送入寄存器,该值为0,然后把该值通过寄存器送入存储器。
详细的汇编程序代码如下表4所示。
主存窗口截图:
主存储器地址
指令码
汇编代码
说明
00H
E4H
LADR0,[30H]
存储器清零
01H
30H
02H
D4H
SUBR0,[30H]
03H
30H
04H
C8H
STA[30H],R0
05H
30H
06H
CCH
OUT[00H],[30H]
07H
30H
08H
00H
09H
COH
INR0,[00H]
存储器内容=存储器内容+输入值
0AH
00H
0BH
C4H
ADDR0,[30H]
0CH
30H
0DH
C8H
STA[30H],R0
0EH
30H
0FH
CCH
OUT[00H],[30H]
10H
30H
11H
00H
12H
DCH
JMPC[32H]
存储器内容>=265?
13H
32H
14H
D0H
JMP09H
15H
09H
16H
C0H
INR0,[00H]
存储器内容=存储器内容-输入值
17H
00H
18H
D4H
SUBR0,[30H]
19H
30H
1AH
C8H
STA[30H],R0
1BH
30H
1CH
CCH
OUT[00H],[30H]
1DH
30H
1EH
00H
1FH
DCH
JMPC[31H]
存储器内容<0?
20H
31H
21H
D0H
JMP16H
22H
16H
30H
[ADDR]
五、实验结果记录
对同一程序进行了多次实验,表5记录了其中的4组。
可以发现当数据从0增大至超过256后,截取数的高位,剩下低8位,相对于加上给数后又减去256。
进位符Cy=1,开始做减操作,显然该数减去输入数值必定小于0,相对于下溢,相当与减去该数后又加上256。
由于加的数与减的数是一样的,因此此时,输出结果呈现交替变化。
实验截图:
表5-实验结果记录
实验结果
输入值
58H
43H
39H
61H
第1次输出
58H
86H
72H
61H
第2次输出
B0H
C9H
ABH
C2H
第3次输出
58H
0CH
E4H
23H
第4次输出
00H
C9H
1D
C2H
第5次输出
58H
0CH
E4H
23H
第6次输出
B0H
C9H
1DH
C2H
第7次输出
58H
0CH
E4H
23H
第8次输出
00H
C9H
1DH
C2H
六、实验过程中出现的问题与解决方案
(1)微代码数据量比较大,校验多次以后才确保了正确。
(2)起初完成了要求的功能,但后来发现每次CLR有效时并没有清零,后来检查并询问了已经成功的同学解决了该问题。
将R0与存储单元[30H]的数自身相减。
(3)明确理解J(4)散转以后,加入了微地址47H,用以判断达到256H时做减法操作。