计算机组成原理课程设计 Dais CMX16 模型机指令及微指令设计

      计算机组成原理(微机原理)是计算机专业学生必修的一门课程,也是考研的专业课,这是一门研究计算机工作原理的课程,但理论知识掌握的再好,不能用到实际中也只是文字而已,因此,课程设计就是将理论结合实际的很好的一种方式(全是废话)

      好的,说说本次的课程设计,首先,我所做的课程设计是在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



最后,如果有不懂得地方,可以留言,也可以加我的QQ1451574179,附上我的设计报告以及程序





你可能感兴趣的:(计算机组成原理,课程设计,16位模型机,DaisCMX16,微程序设计)