计算机组成原理(微机原理)是计算机专业学生必修的一门课程,也是考研的专业课,这是一门研究计算机工作原理的课程,但理论知识掌握的再好,不能用到实际中也只是文字而已,因此,课程设计就是将理论结合实际的很好的一种方式(全是废话)
好的,说说本次的课程设计,首先,我所做的课程设计是在Dais CMX16 的16位模型机基础上实现的,地点是烟台大学,各个大学的课程设计可能稍有差别,但大体思路应该是一样的。
设计目的:
1、计算机组成原理课程设计的主要任务是让学生通过动脑和动手解决计算机设计中的实际问题。
2、综合运用所学计算机组成原理知识,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本的模型计算机,掌握整机概念,并设计机器指令系统,编写程序,在所设计的模型计算机上调试运行。
3、通过一台模型机的设计过程,明确计算机的控制原理与控制过程,巩固和灵活应用所学的理论知识,掌握计算机组成的一般设计方法,提高学生设计能力和实践操作技能,为从事计算机研制与设计打下基础
设计分析:
一、实验原理
本实验将能在微程序控制下自动产生各部件单元的控制信号,实现特定指令的功能。这里,计算机数据通路的控制将由微程序控制器来完成,CPU从EM主存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
二、机器指令格式
系统体系结构图
7 6 5 |
4 |
3 2 |
1 0 |
OP-CODE |
0 |
Rs |
Rd |
Addr |
其中OP-CODE为操作码段,位于指令字节高三位(IR7~IR5);第四位IR4是保留位,指定为零;低四位为源与目的寄存器地址,它们的编码见下表;Addr定义操作数或操作地址。
Rs或Rd |
选定的寄存器 |
00 01 10 11 |
R0 R1 R2 R3 |
三、微指令格式
按照系统建议的微指令格式,参照微指令流程图,将每条微指令代码化,译成二进制代码表,并将二进制代码表转换成十六进制格式文件。
M23 |
M22 |
M21 |
M20 |
M19 |
M18 |
M17 |
M16 |
M15 |
M14 |
M13 |
M12 |
M11 |
M10 |
M9 |
M8 |
M7 |
M6 |
M5 |
M4 |
M3 |
M2 |
M1 |
M0 |
E/M |
IP |
MWR |
R/M |
目的编码 |
OP |
M |
CN |
S2 |
S1 |
S0 |
源编码 |
XP |
W |
ALU |
Iu |
IE |
IR |
Icz |
Ids |
源编码 |
|
目的编码 |
||||||
M10 |
M9 |
M8 |
功能 |
|
M19 |
M18 |
M17 |
功能 |
X2 |
X1 |
X0 |
O2 |
O1 |
O0 |
|||
1 |
1 |
1 |
禁止 |
1 |
1 |
1 |
禁止 |
|
1 |
1 |
0 |
ALU |
1 |
1 |
0 |
MAR |
|
1 |
0 |
1 |
SP |
1 |
0 |
1 |
BX |
|
1 |
0 |
0 |
IOR |
1 |
0 |
0 |
AX |
|
0 |
1 |
1 |
MRD |
0 |
1 |
1 |
SP |
|
0 |
1 |
0 |
XRD |
0 |
1 |
0 |
IOW |
|
0 |
0 |
1 |
RRD |
0 |
0 |
1 |
XWR |
|
0 |
0 |
0 |
PC |
0 |
0 |
0 |
RWR |
指令(程序)设计:
一、指令系统
设计八条机器指令:IN(输入)、ADD(十六进制加法)、SUB(减法)、MUL(乘法)、DIV(除法)、STA(置数)、OUT(输出)、JMP(无条件转移)。
助记符 |
机器指令码 |
说明 |
IN R0,IOL |
00100000 |
i/o(数据开关)偶字节→r0 |
ADD R0,[addr] |
01000000 XXXXXXXX XXXXXXXX |
R0+[addr]→R0 |
SUB R0,[addr] |
00000000 XXXXXXXX XXXXXXXX |
R0-[addr] →R0 |
MUL [num1,2] |
11000101 XXXX XXXX |
num1*num2→R1 |
DIV [num1,2] |
11101010 XXXX XXXX |
num2/num1→R2 |
STA [num],IOH |
01100000 XXXXXXXX XXXXXXXX |
[num] →i/o |
OUT [addr],IOH |
10000000 XXXXXXXX XXXXXXXX |
RAM→i/o(奇字节) |
JMP addr |
10100000 XXXXXXXX XXXXXXXX |
addr→PC |
其中IN为单字节(8位)指令,其余为三字节指令,XXXXXXXX XXXXXXXX为addr对应的二进制地址码,XXXX XXXX为立即数。
二、指令流程图
三、实验所用的机器指令
地址 |
指令代码 |
助记符 |
功能 |
000 |
20 |
in r0,ioL |
i/o(数据开关)偶字节→r0 |
001 |
40 60 02 |
add r0,[addr] |
r0+RAM→r0 |
004 |
00 60 02 |
SUB R0,[ADDR] |
R0-RAM→R0 |
007 |
C5 03 02 |
MUL [num1,2],r0 |
num1*num2→r0 |
00A |
60 ff 01 |
sta [num],ioh |
num→ioh |
00d |
ea 04 02 |
div [num1,2],r0 |
num2/num1→r0 |
010 |
80 61 02 |
out [addr],ioH |
RAM→i/o(奇字节) |
013 |
a0 00 00 |
jmp 0000h |
0000h→pc |
四、指令系统
;基本模型机指令系统
;助记符 操作数 指令码 长度
;-----------------------------------------------------
SUB R0,* 00 3 ;(600)寄存器内容减去内存单元内容
IN R0,IOL 20 1 ;(640)将IOL数据读出到寄存器R0
ADD R0,* 40 3 ;(680)直接字节加到寄存器R0
STA *,IOH 60 3 ;(6C0)寄存器R0写入直接内存
OUT IOH,* 80 3 ;(700)直接字节输出到IOH
JMP * A0 3 ;(740)无条件转移
MUL * C5 3 ;(780)寄存器数据与内存单元数据相乘后存入内存
DIV * EA 3 ;(7C0)将两个内存单元的数相除
;基本模型机程序
#LOAD"InstructionSys.IS" ;预调入指令系统/微程序
#SETRAM 0260H = 1100h;数据区0260H单元预置数据1100h
data segment ;将程序装载到数据存储器
assume ds:data
org 0
start:
in r0, iol ;将IO低位送到R0
add r0, 0260h ;将R0的内容与内存0260单元的内容相加,送回R0
sub r0,0260h ;将R0的内容与内存0260单元的内容相减,送回R0
mul 0203h ;立即数02和03,将02和03相乘送到R1
sta 01ffh,ioh ;将FF00送到IO
div 0204h ;将立即数04除以立即数02送到R2
out ioh, 0260h;将内存0260单元的内容输出到IO
jmp 0000h ;将PC的内容置零,返回第一条机器指令
data ends
end star