计算机组成大型实验报告材料机器指令设计实验Word格式文档下载.docx
《计算机组成大型实验报告材料机器指令设计实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机组成大型实验报告材料机器指令设计实验Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
STA[ADDR],R0
110010DR
输出
OUTPORTAR,[ADDR]
110011DR
转移
JMPADDR
110100XX
注:
该模型机的输入输出设备端口号(PORTAR)只有一个,为00H。
DR指示4个通用寄存器中的一个。
JMP为跳转地址为直接地址,即将ADDR赋值给PC。
当模型机的一条指令执行时,由指令译码器确定一个与此指令对应的微程序入口地址,经地址缓冲器送微控制存储器的地址通道,然后从微控制存储器相应单元中读出24位微指令代码,其中高17位送微指令控制代码段寄存器,由微指令译码器产生控制信号,低7位送微指令地址代码段寄存器(7位),指出微控制存储器中下一微指令的地址。
微指令代码共分7段:
(1)BTO:
数据从总线送部件控制段,3位。
(2)OTB:
数据从部件送总线控制端,3位。
(3)FUNC:
地址转移、读写功能控制端,3位。
(4)FS:
方式功能控制段:
1位。
(5)S3,S2,S1,S0,M,Ci:
模式功能控制段,6位。
(6)N:
备分段,1位。
(7)NEXT:
下一条微指令地址段,7位。
表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->
J
(1)散转;
PC;
35H->
12H
AR;
12H->
13H
DA1;
13H->
14H
DR->
DA2;
14H->
15H
DA1-DA2->
DR;
15H->
01H
d.微程序代码:
微地址
微代码
FS
S3
S2
S1
S0
M
Ci
N
下址
微指令注释
35H
DC4012
1
0010010
AR,PC=PC+1
C10013
0010011
AR
210014
0010100
DA1
500015
0010101
DA2
87D801
0000001
DR
2.带进位加:
ADDCDR,[ADDR]
(SR)+(DR)+Cy->
当(SR)+(DR)+Cy>
255时,Cy=1,当(SR)+(DR)+Cy=256时,Zi=1。
.这条指令可实现多字节的加法操作。
c.指令流程:
PC;
IR;
J
(1)散转;
36H->
18H
AR;
18H->
19H
DA1;
19H->
1AH
DA2;
1AH->
1BH
DA1+DA2+Cy->
1BH->
36H
DC4018
0011000
C10019
0011001
21001A
0011010
50001B
0011011
DR,CyCn
3.C条件转移:
JMPC[ADDR]
若Cy=1,则[ADDR]->
PC,否则顺序执行下条指令。
影响Cy,Zi标志位。
b.指令格式:
37H->
41H
41H->
42H
42H->
43H
J4#条件散转转移;
43H->
(44H)
若Cy=0;
44H->
若Cy=1;
46HDA1->
46H->
37H
DC4041
1000001
C10042
1000010
210043
1000011
024044
1000100
44H
000001
NULL
45H
000000
0000000
46H
E44101
DA1->
PC,PC+1有效
值得注意的是,此条“C条件转移”指令,跳转的是ADDR中的内容,而非ADDR,这一点也JMP不同。
而将JMPC[ADDR],改成JMPCADDR也相当得容易。
只要将微程序代码中微地址为37H的微代码改成DC4042即可。
也就是跳过RAM->
AR不执行。
4.存储器内容送通用寄存器LDADR,[ADDR]
(ADDR)->
DR,不影响Cy,Zi标志位。
39H->
3CH
3CH->
3DH
3DH->
3EH
DR;
3EH->
39H
DC403C
0111100
C1003D
0111101
21003E
0111110
843C01
根据这四条指令微代码可以得到如图3所示流程图。
图3-新增指令逻辑结构图
四、汇编程序设计
1.程序功能
程序功能是对输入开关上的数据和存储器某一单元中的数据进行加法操作,结果累计在存储器某个单元中,当累计值大于256时转而进行减法操作,即把此存储器单元中的值减去输入开关上的数据,结果送同一存储器单元中,当操作结果小于0时再转而进行加法操作,使输出显示顶上出现数据连续加,然后连续减,减到0时候连续加。
这样连续加、连续减直到拨动
结束程序运行为止。
2.程序流程图
图4-汇编语言程序流程图
3.汇编程序代码:
端口号(POATAR)只有一个,为00H。
主存储器单元地址为30H存放数据,用主存储器单元31H,32H来存放跳转地址。
由于JMPC[ADDR]跳转的是ADDR所指内容,故需要额外的开销。
如果尝试把C条件转移改成JMPCADDR也是很简单的事情,具体可以查看附件excel表格MY-CODE.XLS中的“汇编代码1”表。
每次存储器值更新,都通过OUT指令进行存储器内容送入输出设备(00H)显示。
另外,由于简单模型机机器指令并没有立即数传输给寄存器或存储器,因此存储器清零操作需要一定的技巧。
我们采用的方法是先把存储器内容传给寄存器,然后存储器内容减去寄存器内容,值送入寄存器,该值为0,然后把该值通过寄存器送入存储器。
详细的汇编程序代码如下表4所示。
表4-汇编程序代码表
主存储器地址
指令码
汇编代码
说明
00H
E4H
LADR0,[30H]
存储器清零
D4H
SUBR0,[30H]
04H
C8H
STA[30H],R0
05H
06H
CCH
OUT[00H],[30H]
07H
08H
09H
COH
INR0,[00H]
存储器内容=存储器内容+输入值
0AH
0BH
C4H
ADDR0,[30H]
0CH
0DH
C8H
STA[30H],R0
0EH
0FH
10H
11H
DCH
JMPC[32H]
存储器内容>
=265?
D0H
JMP09H
16H
C0H
存储器内容=存储器内容-输入值
17H
1CH
1DH
1EH
1FH
JMPC[31H]
存储器内容<
0?
20H
21H
JMP16H
22H
[ADDR]
9
16
五、实验步骤
通过Yy-z02模型机软件,省去了微代码与机器指令汇编程序的手动写入与检查,大大提高了实验效率。
因为这里不再对微代码与机器指令汇编程序的装入操作进行说明。
而实验连线也相对简单,故也不再进行罗列。
实验步骤如下:
(1)根据《计算机组成原理实验指导》(主编张建中,严义)P76的说明,对YY-Z02实验仪进行连线。
(2)启动Yy-z02模型机软件。
为了保证防止由于连线错误而导致运行结果不对,因此先将工作方式选为“仿真模式”。
该模式下装入的速度也比较快。
(3)将微程序代码与汇编代码分别写入控存窗口与主存窗口的表格中。
如图5,6所示。
微代码与汇编程序代码详见MY-CODE.XLS中的“微代码表”与“汇编代码2”。
图5-微代码的部分数据-控存窗口
图6-汇编代码的数据-主存窗口
(4)点击“下装程序与微程序按钮
(5)设定输入值
,在input中写入值,并回车结束。
(6)运行程序。
按连续运行按钮
(7)改变输入值,观察输出值变化。
六、实验结果记录
对同一程序进行了多次实验,表5记录了其中的4组。
可以发现当数据从0增大至超过256后,截取数的高位,剩下低8位,相对于加上给数后又减去256。
进位符Cy=1,开始做减操作,显然该数减去输入数值必定小于0,相对于下溢,相当与减去该数后又加上256。
由于加的数与减的数是一样的,因此此时,输出结果呈现交替变化,比如输入值为54H时,最后输出结果在FDH与52H交替。
表5-实验结果记录
实验结果
输入值
54H
61H
第1次输出
86H
72H
第2次输出
A8H
C9H
ABH
C2H
第3次输出
FDH
23H
第4次输出
52H
1D
第5次输出
第6次输出
第7次输出
第8次输出
七、实验过程中出现的问题与解决方案
(1)微代码数据量大,当发现Yy-z02模型机软件内置了部分微代码后,用了部分数据。
但由于前后微代码的时常更改,导致部分微代码输入错误。
这也直接导致程序输出结果的不正确。
更大的问题是很难查错,不知道是微代码的指令逻辑错了,还是下一地址错了,还是汇编程序有问题了。
我们的解决方案是找到已完成同学的正确汇编代码对微代码进行查错。
当确定微代码的确有错后,我们再次对微代码进行逐条检查(由于模型机软件界面不是很友好,操作起来也很不方便,因此我们的原始微代码是写在excel表格中的)。
通过Yy-z02模型机软件中伪代码确认指令逻辑是否正确,通过检查下一地址确定程序转移的正确性。
通过多次的检查,最终程序输出结果正确。
(2)微代码正确了,然后对汇编程序进行改良优化。
刚开始,我们连加动作指令的是ADDC,即带进位加,导致每次从连减操作转化为连加操作后,都会多加一个1,这也不难理解,减法操作溢出使得Cy=1。
因此,我们改用ADD指令。
显然ADDC是为了实现多字节的加法操作而准备的,对于连加并不适用。
(3)对微指令理解不深。
刚开始认识JMPC[ADDR]跳转的地址是ADDR中的内容,这本来是正确的,但由于不够自信,被告知是直接ADDR地址跳转。
导致输出结果依然不正确。
然后对微指令再此进行研读,发现JMPC[ADDR指令的确是跳转ADDR所指主存单元中存放的内容。
最好得到正确结果。
另外,我们通过修改微代码的部分数据,使得“C条件跳转”实现了JMPCADDR的功能,即直接地址跳转。
同时我们也写出了与此相对的汇编程序,详见附近excel表格的汇编代码1。