计组课程设计

 

计算机组成与系统结构课程设计实验报告

 

 

 

 

学院: 计算机学科与网络工程学院                      

专业班级: 计算机科学与技术172                    

姓名:                        

学号:                       

 

 

 

 

2019.06.20

 

广州大学学生实验报告

开课学院及实验室:计算机科学与工程实验室                       2019年 6 月20日

学院

计算机科学与教育软件学院

年级/专业/

计科172

姓名

 

学号

 

实验课程名称

计算机组成与系统结构实验课

成绩

 

实验项目名称

计算机组成与系统结构课程设计

指导老师

 

 

2、课程设计的性质、目的、任务

《计算机组成与系统结构课程设计》是计算机学院各专业集中实践性环节之一,是学习完《计算机组成与系统结构》课程后进行的一次全面的综合练习。其目的是综合运用所学计算机原理知识,设计并实现一台模型计算机,以便巩固所学的知识,提高分析问题和解决问题的能力。

  1. 课程设计的基本理论

1、掌握算术、逻辑、移位运算实验,熟悉ALU运算控制位的运用。

2、掌握存储器组织、读写方式及与总路线组成的数据通路,掌握地址总线、数据总线的工作原理。

3、掌握指令结构和指令取指、执行工作过程。

4、掌握CPU的微程序控制原理。

4、课程设计的题目

综合运用所学计算机原理知识,设计并实现具有以下16条指令的指令集结构的模型计算机:

编号

助记符

机器指令码

说明

0

SUB  Rd,Rs

0000 RdRs 

Rd-Rs→Rd

1

ADD  Rd,Rs

0001 RdRs 

Rd+Rs→Rd

2

AND  Rd,Rs

0010 RdRs 

Rd&Rs→Rd (Rd和Rs相与)

3

DEC Rd

0011 Rd00

将Rd值减1

4

CLR Rd

0100 Rd00

将Rd清零

5

RL  Rd

0101 Rd00  

Rd循环左移一位

6

RR  Rd

0110 Rd00

Rd循环右移一位

7

MOV Rd,Rs 

0111 RdRs

Rs→Rd

8

LDI  Rd,*

1000 Rd00   XXXXXXXX

将指令中的立即数(第二字节)送入Rd

9

OUT  IOH,Rs

1001 00Rs

Rs→i/o(数据开关)高字节

10

LDA  Rd,M

1010 Rd00   XXXXXXXX   XXXXXXXX

[M] →Rd

11

STA  M,Rs

1011 00Rs   XXXXXXXX   XXXXXXXX

Rs→[M]

12

JMP M

1100 0000  XXXXXXXX   XXXXXXXX

[M]→PC,即跳转到M所指单元

13

JZ M

1101 0000  XXXXXXXX   XXXXXXXX

当Z=1时,跳转到M所指单元

14

JC M

1110 0000  XXXXXXXX   XXXXXXXX

当CY=1时,跳转到M所指单元

15

HALT

1111 0000

停机

 

  1. check_1

;课程设计检查程序1,含除跳转指令外的12条指令:

add,and,dec,ldi,clr,rl,rr,ldr,sta,mov,out,hlt

#LOAD "lcy.IS"  ;预调入指令系统/微程序,用自己的微程序文件名称

    org   0

       

start:LDI  r0,12h

sta 100h,r0

lda r1,100h

dec r1

rl r0

add r0,r1

rr r0

add r0,r1

ldi r2,76h

and r2,r0

mov r3,r2

add r3,r1

clr r0

out ioh,r3

hlt

  end

  1. check_2

;课程设计检查程序2,含3条跳转指令:jz,jc,jmp

#LOAD "lcy.IS"  ;预调入指令系统/微程序,用自己的微程序文件名称

    org   0

start:

 

LDI  r0,12h

sub  r0,r0

jz tag1

ldi  r3,0eeh

jmp tag2

tag1:ldi r3,33h

tag2:ldi r0,88h

add r0,r0

jc tag3

ldi r2,0eeh

jmp tag4

tag3:ldi r2,22h

tag4:ldi r1,11h

ldi r0,0

add r1,r0

jz tag5

jmp tag6

tag5:ldi r1,0eeh

tag6:jc tag7

ldi r0,0h

jmp tag8

tag7:ldi r0,0eeh

tag8:hlt

  end

 

5、画出微程序流程图(树型图)

 

6、填写所设计的模型机微指令表(只填写有微指令的相关行):

微址00002)1)

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

o2

o1

O0

OP

M

CN

S2

S2

S0

X2

X1

X0

XP

W

ALU

Iu

IE

IR

Icz

Ids

0000

1

1

1

1

1

1

1

1

FF

1

1

1

1

1

1

1

1

FF

1

1

1

1

1

1

1

1

FF

+1

 

0001

1

0

1

1

1

1

1

1

BF

1

1

1

1

1

0

1

1

FB

1

1

1

1

1

0

0

0

F8

+1

 

0600

1

1

1

1

1

0

1

0

FA

1

1

1

1

1

0

0

1

F9

1

1

0

1

1

1

1

1

DF

+1

SUB

0601

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

1

F9

0

0

1

1

1

1

1

1

5F

+1

 

0602

1

1

1

1

0

0

0

0

F0

0

1

1

0

1

1

1

0

6E

0

1

0

0

1

1

1

1

4F

0001

 

0620

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

1

F9

1

1

1

1

1

1

1

1

FF

+1

ADD

0621

1

1

1

1

1

0

1

0

FA

1

1

1

1

1

0

0

1

F9

0

1

1

1

1

1

1

1

7F

+1

 

0622

1

1

1

1

0

0

0

0

F0

0

1

1

0

0

1

1

0

66

0

1

1

0

1

1

0

1

6D

0001

 

0640

1

1

1

1

1

0

1

0

FA

1

1

1

1

1

0

0

1

F9

1

1

0

1

1

1

1

1

DF

+1

AND

0641

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

1

F9

0

1

0

1

1

1

1

1

5F

+1

 

0642

1

1

1

1

0

0

0

0

F0

1

1

1

0

1

1

1

0

EE

0

1

0

0

1

1

1

1

4F

0001

 

0660

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

1

F9

0

1

0

1

1

1

1

1

5F

+1

DEC

0661

1

1

1

1

0

0

0

0

F0

1

1

0

1

0

1

1

0

D6

0

1

0

0

1

1

0

1

4D

0001

 

0680

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

1

F9

0

1

0

1

1

1

1

1

5F

+1

CLR

0681

1

1

1

1

0

0

0

0

F0

1

1

0

1

1

1

1

0

DE

0

1

0

0

1

1

0

1

4D

0001

 

06A0

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

1

F9

0

1

0

1

1

1

1

1

5F

+1

RL

06A1

1

1

1

1

0

0

0

0

F0

0

1

1

1

0

1

1

0

76

0

1

0

0

1

1

0

1

4D

0001

 

06C0

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

1

F9

0

1

1

1

1

1

1

1

7F

+1

RR

06C1

1

1

1

1

0

0

0

0

F0

0

1

0

1

1

1

1

0

5E

0

1

1

0

1

1

0

1

6D

0001

 

06E0

1

1

1

1

0

0

0

0

F0

1

1

1

1

1

0

0

1

F9

1

1

1

0

1

1

0

1

ED

0001

MOV

0700

1

1

1

1

0

0

0

0

F0

1

1

1

1

1

0

1

1

FB

1

1

0

1

1

1

1

1

DF

+1

LDI

0701

1

0

1

1

1

1

1

1

BF

1

1

1

1

1

1

1

1

FF

1

1

1

0

1

1

0

1

ED

0001

 

0720

1

1

1

1

0

1

0

1

F5

1

1

1

1

1

0

0

1

F9

1

1

1

0

1

1

0

1

ED

0001

OUT

0740

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

1

1

FB

1

1

0

1

1

1

1

1

DF

+1

LDA

0741

1

0

1

1

1

0

0

1

B9

1

1

1

1

1

0

1

1

FB

1

1

0

1

1

1

1

1

DF

+1

 

0742

1

0

1

1

1

1

0

0

BC

1

1

1

1

1

1

1

0

FE

0

0

0

1

1

1

1

1

1F

+1

 

0743

0

1

1

1

0

0

0

0

70

1

1

1

1

1

0

1

1

FB

1

1

1

0

1

1

0

1

ED

0001

 

0760

1

1

1

1

1

0

1

0

FA

1

1

1

1

1

0

1

1

FB

1

1

0

1

1

1

1

1

DF

+1

STA

0761

1

1

1

1

1

0

1

0

BB

1

1

1

1

1

0

1

1

FB

1

1

0

1

1

1

1

1

DF

+1

 

0762

1

0

1

1

1

1

0

0

BC

1

1

0

0

0

1

1

0

C6

0

0

0

0

1

1

1

1

0F

0763

 

0763

0

1

0

1

1

1

1

1

5F

1

1

1

1

1

0

0

1

F9

1

1

1

0

1

1

0

1

ED

0001

 

0780

1

1

1

1

1

0

1

0

FA

1

1

1

1

1

0

1

1

FB

1

1

1

1

1

1

1

1

FF

+1

JMP

0781

1

1

1

1

1

0

1

0

BB

1

1

1

1

1

0

1

1

FB

1

1

1

1

1

1

1

1

FF

+1

 

0782

0

0

1

1

1

1

1

1

3F

1

1

0

0

0

1

1

0

C6

0

0

1

0

1

1

0

1

2D

0001

 

07A0

1

1

1

1

1

0

1

0

FA

1

1

1

1

1

0

1

1

FB

1

1

1

1

1

1

1

1

FF

+1

JZ

07A1

1

1

1

1

1

0

1

0

BB

1

1

1

1

1

0

1

1

FB

1

1

1

1

1

1

1

1

FF

+1

 

07A2

1

0

1

1

1

1

0

0

BC

1

1

0

0

0

1

1

0

C6

0

0

1

1

1

1

1

1

3F

+1

 

07A3

1

1

1

1

1

1

1

1

FF

1

1

0

0

0

1

1

0

C6

1

1

1

1

1

1

0

0

FC

07A4

 

07A4

1

1

1

1

1

1

1

1

FF

1

1

1

1

1

1

1

1

FF

1

1

1

0

1

1

0

1

ED

0001

 

07A5

0

0

1

1

1

1

1

1

3F

1

1

0

0

0

1

1

0

C6

0

0

1

0

1

1

0

1

2D

0001

 

07C0

1

1

1

1

1

0

1

0

FA

1

1

1

1

1

0

1

1

FB

1

1

1

1

1

1

1

1

FF

+1

JC

07C1

1

1

1

1

1

0

1

0

BB

1

1

1

1

1

0

1

1

FB

1

1

1

1

1

1

1

1

FF

+1

 

07C2

1

0

1

1

1

1

0

0

BC

1

1

0

0

0

1

1

0

C6

0

0

1

1

1

1

0

1

3D

07C4

 

07C4

1

1

1

1

1

1

1

1

FF

1

1

1

1

1

1

1

1

FF

1

1

1

0

1

1

0

1

ED

0001

 

07C5

0

0

1

1

1

1

1

1

3F

1

1

0

0

0

1

1

0

C6

0

0

1

0

1

1

0

1

2D

0001

 

07E0

1

1

1

1

1

0

0

0

F8

1

1

1

1

1

0

0

0

F8

0

0

1

1

1

1

1

1

3F

+1

HLT

07E1

0

0

1

1

1

1

1

1

3F

1

1

0

1

0

1

1

0

D6

0

0

1

0

1

1

0

1

2D

0001

 

  1. 列表说明检测的机器指令程序,包括每个语句的地址、指令代码、助记符(即汇编语句)、功能说明。

;分段/RISC模型机指令系统

 

;助记符 操作数              指令码 长度

;-----------------------------------------------------

LDI     R0,*                80      2             ;将指令中的立即数(第二字节)送入R0

LDI     R1,*                84      2             ;将指令中的立即数(第二字节)送入R0

LDI     R2,*                88      2             ;将指令中的立即数(第二字节)送入R2

LDI     R3,*                8C      2             ;将指令中的立即数(第二字节)送入R3

STA     *,R0                B0      3             ;Rs(R0)→[M]

STA     *,R3                B3      3             ;Rs(R0)→[M]

LDA     R1,*                A4      3             ;[M] →R1

DEC     R1                  34      1             ;将R1值减1

RL      R0                  50      1             ;R0循环左移一位

SUB     R0,R1               01      1             ;R0-R1→R1

RR      R0                  60      1             ;R0循环右移一位

ADD     R0,R0               10      1             ;R0+R0→R0

ADD     R0,R1               11      1             ;R0+R1→R0

ADD     R1,R0               14      1             ;R0+R1→R1

ADD     R2,R3               1B      1             ;R2+R3→R2

ADD     R3,R2               1E      1             ;R2+R3→R3

ADD     R3,R1               1D      1             ;R1+R3→R3

SUB     R0,R0               00      1             ;R0-R0->R0

AND     R0,R1               21      1              ;Rd&Rs→Rd (R2和R0相与)

AND     R2,R0               28      1              ;Rd&Rs→Rd (R2和R0相与)

MOV     R3,R2               7E      1             ;R2→R3

MOV     R0,R1               71      1             ;R1→R0

CLR     R0                  40      1             ;将R0清零

OUT     IOH,R0              90      1             ;R0→I/O(数据开关)高字节

OUT     IOH,R1              91      1             ;R1→I/O(数据开关)高字节

OUT     IOH,R2              92      1             ;R1→I/O(数据开关)高字节

OUT     IOH,R3              93      1             ;R3→I/O(数据开关)高字节

JMP     *                   C0      3             ;[M]->PC,即跳到M所指单元

JZ      *                   D0      3             ;当Z=1时,跳转到M所指单元

JC      *                   E0      3             ;当CY=1时,跳转到M所指单元

HLT     ""                  F0      1             ;停机

 

  1. 运行检测程序后的结果图片。

Check.1程序跑完的结果:

 

Check.2程序跑完的结果:

 

9、存在的问题及体会

 

计算机组成是计算机专业课程,对计算机组成的了解深入与否很大程度决定一个的程序员水平的高低。我对计算机组成原理这门课程是非常感兴趣的。特别是计算机组成实验课。课堂上的知识碍于时间限制,老师不可能面面俱到,而且对于新手来说,这门课程显得生涩难懂,需要学生投入足够的时间硬啃。老实说,上了一学期的课,我还是对很多知识感到陌生。在接下来的暑假,我打算自己再学一遍。这学期,感谢老师的循循善诱 诲人不倦。

 

你可能感兴趣的:(大二计算机组成实验)