计算机组成原理实验报告复杂模型机的组成与运行Word格式.docx
《计算机组成原理实验报告复杂模型机的组成与运行Word格式.docx》由会员分享,可在线阅读,更多相关《计算机组成原理实验报告复杂模型机的组成与运行Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
R0-1->
BZCEXIT;
当FC或FZ为1时,转到EXIT
JMPLOP
EXIT:
OUT0EH,R0;
[0EH]->
LED,直接寻址
0DH、0EH、0FH单元内容分别为03H、04H、02H。
2.设计设备
PC机一台,TD-CMA计算机组成原理教学实验系统
3.设计原理和方法
3.1设计原理
3.1.1指令设计
模型机设计三大类指令共十五条,其中包括运算类指令、控制转移类指令,数据传送类指令。
运算类指令包含三种运算,算术运算、逻辑运算和移位运算,设计有6条运算类指令,分别为:
ADD、AND、INC、SUB、OR、RR,所有运算类指令都为单字节,寻址方式采用寄存器直接寻址。
控制转移类指令有三条HLT、JMP、BZC,用以控制程序的分支和转移,其中HLT为单字节指令,JMP和BZC为双字节指令。
数据传送类指令有IN、OUT、MOV、LDI、LAD、STA共6条,用以完成寄存器和寄存器、寄存器和I/O、寄存器和存储器之间的数据交换,除MOV指令为单字节指令外,其余均为双字节指令。
3.1.2指令格式
所有单字节指令(ADD、AND、INC、SUB、OR、RR、HLT和MOV)格式如下:
7654
32
10
OP-CODE
RS
RD
其中,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,并规定:
RS或RD
选定的寄存器
00
01
10
11
RO
R1
R2
R3
IN和OUT的指令格式为:
32
(1)
10
(1)
7—0
(2)
P
系统设计五种数据寻址方式,即立即、直接、间接、变址和相对寻址,LDI指令为立即寻址,LAD、STA、JMP和BZC指令均具备直接、间接、变址和相对寻址能力。
LDI的指令格式如下,第一字节同前一样,第二字节为立即数:
7654
(1)
7—0
(2)
data
LAD、STA、JMP和BZC指令格式如下:
M
D
其中M为寻址模式,具体见表5-3-2,以R2作为变址寄存器RI:
寻址模式M
有效地址E
说明
E=D
E=(D)
E=(RI)+D
E=(PC)+D
直接寻址
间接寻址
RI变址寻址
相对寻址
3.1.3指令系统:
汇编符号
指令的格式
功能
MOVRD,RS
ADDRD,RS
SUBRD,RS
ANDRD,RS
ORRD,RS
RRRD,RS
INCRD
0100
RS
RD
0000
1000
0001
1001
1010
0111
**
RD
RS→RD
RD+RS→RD
RD-RS→RD
RD∧RS→RD
RD∨RS→RD
RS右循环→RD
RD+1→RD
LADMD,RD
STAMD,RS
JMPMD
BZCM,D
1100
M
D
1101
1110
1111
E→RD
RD→E
E→PC
当FC或FZ=1
E→PC
INRD,P
OUTP,RS
0010
0011
[P]→RD
RS→[P]
HALT
0101
**
停机
3.1.4微指令格式
23
22
21
20
18-15
14-12
11-9
8-6
5-0
M23
CN
WR
IOM
S3-S0
A字段
B字段
C字段
UA5-UA0
其中,A、B、C三个字段的编码方案如下表:
141312
选择
11109
876
000
NOP
001
LDA
ALU-B
P<
1>
010
LDB
RS_B
2>
011
LDRi
RD_B
3>
100
保留
RI_B
101
LOAD
LDPC
110
LDAR
PC_B
111
LDIR
运算器逻辑功能表:
运算类型
S3S2S1S0
逻辑运算
0000
0001
0010
0011
0100
x
x
F=A(直通)
F=B(直通)
F=AB(直通)
F=/AA+B(直通)
F=/A(直通)
移位运算
0101
0110
0111
0
1
1
F=A不带进位循环右移B(取低3位)位(FZ)
F=A逻辑右移一位(FZ)
F=A带进位循环右移一位(FC,FZ)
F=A逻辑左移一位(FZ)
F=A带进位循环左移一位(FC,FZ)
算术运算
1000
1001
1010
1011
1100
1101
1110
1111
置FC=CN(FC)
F=A加B(FC,FZ)
F=A加B加FC(FC,FZ)
F=A减B(FC,FZ)
F=A减1(FC,FZ)
F=A加1(FC,FZ)
(保留)
3.2设计依据
依据本实验使用的模型机的九条基本指令。
微程序流图:
图1
4.代码清单
4.1指令代码清单:
地址
十六进制
高五位
A字段
B字段
UA5—UA0
000001
00000
000001
006D43
000011
03
107070
00010
110000
04
106005
000101
05
102006
000110
06
001407
000111
07
05B201
1011
08
006D6C
001001
09
200201
00100
006011
010001
103000
12
063201
1100
13
106014
010100
14
0000C1
15
005201
16
006017
010111
17
103018
18
080001
00001
19
001411
30
000072
110010
32
183001
33
086D56
010110
34
006DB3
110011
35
038201
36
001412
010010
37
006D59
011001
38
006D44
000100
006D48
001000
3A
006D50
010000
4.2微程序代码清单:
地址内容
$P0020;
IN->
$P0180SUB0DH;
$P020F;
$P0350;
SHLR0;
$P0490;
STA0EH,R0;
$P0510;
$P06A0;
LDA0FH,R;
$P0711;
$P0860;
R0
$P0940;
BZCEXIT;
$P0A0D;
$P0B70;
JMPLOP
$P0C08;
$P0D30;
$P0E0E
$P0F03;
数据
$P1003
$P1102;
5.运行结果
第一步:
初始化
第二步:
分析指令
第三步:
指令开始执行
出错情况和出错原因分析:
在实验中常常会由于疏忽而遇到连线问题,通过系统自身的诊断,会找到这些错误,这样就能非常方便的解决这个问题。
代码也是困扰我的一个问题,要想把代码写对,就要熟悉二进制到十六进制的转换,并且熟练的掌握代码的格式,这样才能准确的写出代码,
但由于该实验所提供的实验的硬件不支持简单模型机,所以未出现正确的结果,可是在前面几步能顺利完成。
接下来将重新选取实验来练习操作。
6.设计体会
通过这次实验,使我对简单模型机的结构和设计有了更多的了解,也了解了程序在模型机中是怎样运行的。
实验本身并不困难,我认为更重要的是理解实验过程和微程序的设计。
先要读懂程序要做什么,然后要把实验过程转换成八位二进制指令代码,接下来要画程序流程图,最后就是把代码转换成模型机可处理的微指令代码。
微指令代码为模型机提供了每次需要进行什么操作,并且指出了下一条指令的地址,这样模型机就能自己连续的运行了。
在实验中,我发现团队合作也是学习中一项必不可少的因素,我们小组遇到问题时,经常进行讨论,每次讨论都能得到不少的收获,并且问题也能很快就能解决。
在做实验的时候,我们也会进行不同的分工,这样就加快了做实验的速度,所以我们的实验非常成功。
在这里我要感谢我的组员,更要感谢老师的细心指导!