计算机组成原理课程设计.docx
《计算机组成原理课程设计.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计.docx(30页珍藏版)》请在冰豆网上搜索。
计算机组成原理课程设计
计算机组成原理课程设计报告
班级:
08计算机0803班姓名:
陈祥学号:
20082908
完成时间:
2011.1.3
一、课程设计目的
1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;
2.通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;
3.培养综合实践及独立分析、解决问题的能力。
二、课程设计的任务
针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。
三、课程设计使用的设备(环境)
1.硬件
●COP2000实验仪
●PC机
2.软件
●COP2000仿真软件
四、课程设计的具体内容(步骤)
1.详细了解并掌握COP2000模型机的微程序控制器原理,通过综合实验来实现
1.该模型机指令系统的特点:
从指令字长来看该模型机指令系统包含单字长和双字长两种格式的指令,字长为8位,对于需要访问内存的指令都是双字长的,指令系统中大多数指令是单字长;从指令操作码是定长和变长来看,这里认为,虽然ADDA,R?
和ADDA,@R?
都是执行加法操作,但他们是不同的指令,将指令格式中寻址寄存器的两位也认为是操作码的一部分,这两条指令的操作码不同。
因此,指令系统的指令格式是定长操作码的,操作码为6位。
1)双字长的指令格式如下:
A
OPR?
举例:
助记符
机器码1
机器码2
ADDA,MM
000110xx
MM
ADDA,#II
000111xx
II
MOVA,MM
011110xx
MM
2)单字长的指令格式如下:
OPR?
举例:
助记符
机器码1
机器码2
ADDA,R?
000100xx
ORA,R?
011000xx
MOVR?
A
100000xx
2.该模型机微指令系统的特点(包括其微指令格式的说明等):
该模型机微指令系统的微指令格式是水平型微指令,微指令的字长为24位,是机器字长的3倍,每条微指令仅包含微操作控制字段,无顺序控制字段。
操作控制字段的每一位对应一个微操作,采用字段直接译码的方式对系统进行控制。
微指令的具体格式如下:
IREN
PCOE
S0
S1
S2
AEN
WEN
X0
X1
X2
FEN
CN
RWR
RRD
STEN
OUTEN
MAROE
MAREN
ELP
EINT
EMEN
EMRD
EMWR
XRD
举例:
微指令CBFFFF:
取指令
1
1
0
0
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2。
计算机中实现乘法和除法的原理
(1)无符号乘法
①实例演示(即,列4位乘法具体例子演算的算式):
1101被乘数
×1011乘数
1101位积
移位相加
11010位积
000000位积
1101000位积
10001111结果
②硬件原理框图:
右移
ALU
左移
CY
ST
W
A
被乘数
R0
乘数
R1
4
R2
③算法流程图:
开始
中间结果清0
乘数右移一位
移出位为1?
Yes
No
中间结果加被乘数
No
被乘数左移一位
移位次数为4
Yes
保存中间结果
结束
(2)无符号除法
①实例演示(即,列4位除法具体例子演算的算式):
01010------商
110110000111------被除数
00000000------不够减,商上0,除数右移一位
10000111------做差后的被除数
01101000------够减,商上1,除数右移一位
00011111------做差后的被除数
00000000------不够减,商上0,除数右移一位
00011111------做差后的被除数
00011010------够减,商上1,除数右移一位
00000101------移位4次后,余数
②硬件原理框图:
商
左移
R2
ALU
右移
ST
CY
W
A
除数
R0
被除数
R1
③算法流程图:
开始
商清0
除数左移四位
被除数与除数比较
Yes
溢出
CY=0
No
除数右移一位
商左移一位
被除数减除数
No
CY=0
Yes
No
商+1
移位次数为4
Yes
保存结果
结束
3.对应于以上算法如何分配使用COP2000实验仪中的硬件
(初步分配,设计完成后再将准确的使用情况填写在此处)
1)乘法程序的硬件分配:
硬件名称
在乘法算法中的功能
R0
1用来存放被乘数2保存乘积结果
R1
用来存放乘数
R2
未使用
R3
用做计数器,来控制程序循环次数
A
1、存放中间结果2、用来存放操作数参加ALU的运算
W
用来存放操作数参加ALU的运算
PC
程序计数器
EM
内存(存放程序)
IR
指令寄存器
ST
堆栈寄存器,可以用来暂存寄存器A的值
MAR
地址寄存器
2)除法程序的硬件分配
硬件名称
在除法运算中的功能
R0
用来存放被除数
R1
用来存放除数
R2
用来存放商
R3
1用作计数器,控制循环的次数2保存余数
A
1、存放中间数据2、用来存放操作数参加ALU的运算
W
用来存放操作数参加ALU的运算
PC
程序计数器
EM
内存(存放程序)
IR
指令寄存器
ST
堆栈寄存器,可以用来暂存寄存器A的值
MAR
地址寄存器
4.在COP2000集成开发环境下设计全新的指令/微指令系统
设计结果如表所示(可按需要增删表项)
(1)新的指令集
(设计两个不同指令集要分别列表)
助记符
机器码1
机器码2
指令说明
_FATCH_
000000XX
实验机占用,不可修改。
复位后,所有寄存器清0,首先执行_FATCH_指令取指
MOVR?
#II
000001XX
II
将立即数II送到寄存器R?
中
MOVR?
A
000010XX
将累加器A的值送到寄存器R?
中
MOVA,R?
000011xx
将寄存器R?
的值送入累加器A中
ANDA,#II
000100xx
II
将立即数与累加器A中的数相与
ANDR?
,#II
000101xx
II
将立即数与寄存器R?
中的数相与
SHRR?
000110xx
寄存器R?
带进位右移
SHLR?
000111xx
寄存器R?
带进位左移
JCMM
001000xx
MM
若进位标志置1,跳转到MM地址
JZMM
001001xx
MM
若零标志置1,跳转到MM地址
ADDR?
,#II
001010xx
II
将寄存器R?
中的数与立即数相加
ADDA,R?
001011xx
将累加器与寄存器R?
相加,结果存入累加器
SUBR?
,#II
001100xx
II
将寄存器R?
中的值与立即数相减
SUBA,R?
001101xx
将累加器与寄存器R?
的值相减,结果存入累加器
CMPA,R?
001110xx
累加器与寄存器R?
的值比较,结果影响进位、零标志
JMPMM
001111xx
MM
无条件跳转到MM处
PUSHA
010000xx
将累加器中的值暂存
POPA
010001xx
将暂存结果送回到累加器A中
SHRNR?
010010xx
寄存器R?
不带进位右移
SHLNR?
010011xx
寄存器R?
不带进位左移
(2)新的微指令集
助记符
状态
微地址
微程序
数据输出
数据打入
地址输出
运算器
移位控制
uPC
PC
_FATCH_
T0
00
CBFFFFF
指令寄存器IR
PC输出
A输出
写入
+1
01
FFFFFF
A输出
+1
02
FFFFFF
A输出
+1
03
FFFFFF
A输出
+1
MOVR?
#II
T1
04
E7FBFF
存储器EM
寄存器R?
PC输出
A输出
+1
+1
T0
05
CBFFFF
指令寄存器
PC输出
A输出
写入
+1
06
FFFFFF
A输出
+1
07
FFFFFF
A输出
+1
MOVR?
,A
T1
08
FFFB9F
ALU直通
寄存器R?
A输出
+1
T0
09
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
0A
A输出
+1
0B
A输出
+1
MOVA,R?
T1
OC
FFF7F7
寄存器值R?
寄存器A
A输出
T0
OD
CBFFFFF
指令寄存器IR
PC输出
A输出
写入
+1
0E
FFFFFF
A输出
+1
0F
FFFFFF
A输出
+1
ANDA,#II
T2
10
C&7FFEF
存储器值EM
寄存器W
PC输出
A输出
+1
+1
T1
11
FFFE93
ALU直通
寄存器A标志位C、Z
与运算
+1
T0
12
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
13
FFFFFF
A输出
+1
ANDR?
#II
T3
14
C7FFEF
存储器EM
寄存器W
PC输出
A输出
+1
+1
T2
15
FFF7F7
寄存器值R?
寄存器A
A输出
+1
T1
16
FFFA9B
ALU直通
寄存器R?
标志位C、Z
与运算
+1
T0
17
CBFFFF
指令寄存器IR
PC输出
A输出
+1
+1
SHRR?
T3
18
FFEF9F
ALU直通
堆栈寄存器ST
A输出
+1
T2
19
FFF7F7
寄存器值R?
寄存器A
A输出
+1
T1
1A
FFFABF
ALU右移
寄存器R?
标志位C、Z
A输出
带进位右移
+1
T0
1B
CBFF57
堆栈寄存器ST
寄存器A指令寄存器IR
PC输出
A输出
写入
+1
SHLR?
T3
1C
FFEF9F
AlU直通
推展寄存器ST
A输出
+1
T2
1D
FFF7F7
寄存器值R?
寄存器A
A输出
+1
T1
1E
FFFADF
ALU左移
寄存器R?
标志位C、Z
A输出
带进位左移
+1
T0
1F
CBFF57
堆栈寄存器ST
寄存器A指令寄存器IR
PC输出
A输出
写入
+1
JCMM
T1
20
C6FFFF
存储器值EM
寄存器PC
PC输出
A输出
+1
+1
T0
21
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
22
FFFFFF
A输出
+1
23
FFFFFF
A输出
+1
JZMM
T1
24
C6FFFF
存储器值EM
寄存器PC
PC输出
A输出
+1
+1
T0
25
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
26
FFFFFF
A输出
+1
27
FFFFFF
A输出
+1
ADDR?
#II
T3
28
FFF7F7
寄存器值R?
寄存器A
A输出
+1
T2
29
C7FFEF
存储器值EM
寄存器W
PC输出
A输出
+1
+1
T1
2A
FFFA98
ALU直通
寄存器R?
标志位C、Z
加运算
+1
T0
2B
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
ADDA,R?
T2
2C
FFF7EF
寄存器值R?
寄存器W
A输出
+1
T1
2D
FFFE90
ALU直通
寄存器R?
标志位C、Z
加运算
+1
T0
2E
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
2F
FFFFFF
A输出
+1
SUBR?
#II
T3
30
FFF7F7
寄存器值R?
寄存器A
A输出
+1
T2
31
C7FFEF
存储器值EM
寄存器W
PC输出
A输出
+1
+1
T1
32
FFFA99
ALU直通
寄存器R?
标志位C、Z
减运算
+1
T0
33
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
SUBA,R?
T2
34
FFF7EF
寄存器值R?
寄存器W
A输出
+1
T1
35
FFFE91
ALU直通
寄存器A标志位C、Z
减运算
+1
T0
36
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
37
FFFFFF
A输出
+1
CMPA,R?
T3
38
FFF7EF
寄存器值R?
寄存器W
A输出
+1
T2
39
FFEF9F
ALU直通
堆栈寄存器ST
A输出
+1
T1
3A
FFFE91
ALU直通
寄存器A标志位C、Z
减运算
+1
T0
3B
CBFF57
堆栈寄存器
寄存器A指令寄存器IR
PC输出
A输出
+1
+1
JMPMM
T1
3C
C6FFFF
存储器EM
寄存器PC
PC输出
A输出
+1
+1
T0
3D
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
3E
FFFFFF
A输出
+1
3F
FFFFFF
A输出
+1
PUSHA
T1
40
FFEF9F
ALU直通
堆栈寄存器ST
A输出
+1
T0
41
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
42
FFFFFF
A输出
+1
43
FFFFFF
A输出
+1
POPA
T1
44
FFFF57
堆栈寄存器ST
寄存器A
A输出
+1
T0
45
CBFFFF
指令寄存器IR
PC输出
A输出
写入
+1
46
FFFFF
A输出
+1
47
FFFFF
A输出
+1
SHRNR?
T3
48
FFEF9F
ALU直通
堆栈寄存器ST
A输出
+1
T2
49
FFF7F7
寄存器值R?
寄存器A
A输出
+1
T1
4A
FFF9BF
ALU右移
寄存器R?
A输出
右移
+1
T0
4B
CBFF57
堆栈寄存器ST
寄存器A指令寄存器IR
PC输出
A输出
写入
+1
SHLNR?
T3
4C
FFEF9F
ALU直通
堆栈寄存器ST
A输出
+1
T2
4D
FFF7F7
寄存器值R?
寄存器A
A输出
+1
T1
4E
FFF9DF
ALU左移
寄存器R?
A输出
左移
+1
T0
4F
CBFF57
堆栈寄存器
寄存器A指令寄存器IR
PC输出
A输出
写入
+1
5.用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序
(1)乘法
4位乘法的算法流程图与汇编语言程序清单:
1)流程图如下:
开始
被乘数送入R0
乘数送入R1
将4送入R3作计数送
寄存器A清0
R1带进位右移
CF=1?
YES
NO
ADDA,R0
NO
R0不带进位左移
暂存A
SUBR3,#01H
恢复A
ZF=1?
YES
MOVR0,A保存结果
结束
2)汇编语言程序清单如下:
MOVR0,#0FH---被乘数在R0中
MOVR1,#0FH---乘数在R1中
MOVR3,#04H
ANDA,#00H
LOOP1:
SHRR1
JCNEXT1
JMPLOOP2
NEXT1:
ADDA,R0
LOOP2:
SHLNR0
PUSHA
SUBR3,#01H
POPA
JZNEXT2
JMPLOOP1
NEXT2:
MOVR0,A--乘积结果在R0中
END
(2)除法
4位除法的算法流程图与汇编语言程序清单:
1)算法流程图如下
CF=1?
开始
NO
SUBA,R1
被除数送入R0中
YES
暂存A
除数送入R1中
R2(商)+1
计数值4送入R3中
恢复A
R2清0用来保存商
暂存A
R1左移4位
R3减1
MOVA,R0
恢复A
CMPA,R1
NO
CF=1?
ZF=1?
YES
YES
R1右移
MOVR3,A
NO
R2(商)左移
结束
CMPA,R1
2)汇编语言程序清单如下:
MOVR0,#87H---被除数在R0中
MOVR1,#0DH---除数在R1中
MOVR3,#04H
ANDR2,#00H---商在R2中
SHLNR1
SHLNR1
SHLNR1
SHLNR1
MOVA,R0
CMPA,R1
JCNEXT1
JMPQUIT
NEXT1:
SHRNR1
SHLNR2
CMPA,R1
JCNEXT2
SUBA,R1
PUSHA
ADDR2,#01H
POPA
NEXT2:
PUSHA
SUBR3,#01H
POPA
JZQUIT
JMPNEXT1
QUIT:
MOVR3,A---余数保存在R3中
END
6.上述程序的运行情况(跟踪结果)
按下表填写描述以上各程序运行情况的内容。
按每个程序一张表进行。
1)乘法程序运行的过程
汇编指令
程序地址
机器码
指令说明
微程序
PC
PC
运行时寄存器或存储器的值
MOVR0,#0F
00
040F
立即数0F送入R0中
E7FBFF
CBFFFF
+1
+1
+1
写入
R0:
0F
MOVR1,#0F
02
050F
立即数0F送入R1中
E7FBFF
CBFFFF
+1
+1
+1
写入
R1:
0F
MOVR3,#04
04
0704
立即数04送入R3中
E7FBFF
CBFFFF
+1
+1
+1
写入
R3:
04
ANDA,#00
06
1000
将寄存器A清0
C7FFEF
FFFE93
CBFFFF
+1
+1
+1
+1
写入
EM:
00
W:
00
SHRR1
08
19
寄存器R1带进位右移
FFEF9F
FFF7F7
FFFABF
CBFF57
+1
+1
+1
+1
写入
ST:
00
A:
0F
R:
07
A:
00
JC0D
09
200D
CF=1跳转到0D
C6FFFF
CBFFFF
写入
+1
+1
写入
2)除法程序运行的过程
7.设计结果说明
调试运行程序时是否出现问题,是否有重新调整指令/微指令系统设计的情况出现?
请在此做具体说明。
答:
出现了问题。
1)之前由于设计了ADDR?
,#II和SUBR?
,#II、SHLR?
、SHRR?
等这类指令,而这两些指令在执行过都需要先将立即数或者寄存器中的数保存到寄存器A中,再进行运算,运算完后再送回寄存器,这必然会改变寄存器A的值,也就是说如果运行这类指令就会改变累加器A的值,然而在设计乘法和除法的程序中都需要用到寄存器A来暂存一些中间数据,从而得不到正确的运行结果。
重新调整:
①为了尽量的减少这类指令改变寄存器A的情况,在最大范围内将这些指令设计成不改变其他寄存器的指令。
如原来的右移指令SHRR?