广州大学2021计算机组成原理课程设计实验报告

一、本课程设计的性质、目的、任务

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

二、本课程设计的基本理论

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

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

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

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

三、题目

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

编号

助记符

机器指令码

说明

0

SUB  Rd,Rs

1000 RdRs 

Rd-Rs→Rd

1

ADD  Rd,Rs

1001 RdRs 

Rd+Rs→Rd

2

AND  Rd,Rs

1010 RdRs 

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

3

DEC Rd

1011 Rd00

将Rd值减1

4

CLR Rd

1100 Rd00

将Rd清零

5

RL  Rd

1101 Rd00  

Rd循环左移一位

6

RRC  Rd

1110 Rd00

Rd带进位右移一位

7

MOV Rd,Rs 

1111 RdRs

Rs→Rd

8

LDI  Rd,*

0000 Rd00   XXXXXXXX

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

9

OUT  IOH,Rs

0001 00Rs

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

10

LDA  Rd,M

0010 Rd00   XXXXXXXX   XXXXXXXX

[M] →Rd

11

STA  M,Rs

0011 00Rs   XXXXXXXX   XXXXXXXX

Rs→[M]

12

JMP M

0100 0000  XXXXXXXX   XXXXXXXX

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

13

JZ M

0101 0000  XXXXXXXX   XXXXXXXX

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

14

JC M

0110 0000  XXXXXXXX   XXXXXXXX

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

15

HALT

0111 0000

停机

2、设计提示:

1)上表中,机器指令码的高4位为指令操作码,M为16位存储器地址, Rs为源寄存器,Rd为目的寄存器,占2位,并规定:

RsRd

选定的寄存器

00

01

10

11

R0

R1

R2

R3

2)在微程序中,微地址001为取指。

3)各指令指行阶段微程序入口地址的确定方式:

微地址位号

10   9

8   7  6   5

4  3  2  1  0

内容

1    1

IR7~IR4

0  0  0  0  0

例如,第5条指令”RL  Rd”  的指令码为0101 Rd00  则指令码的高4位IR7~IR4为0101,由上表知,微程序入口微地址为: 11 0101 00000 ,即6A0H。

注:第10、9位来自0001条微指令中upc所设置值的第10、9位。例如,如果是600则为11,如果是400则为10.

3、主要步骤:

(1)按照第3点的方法,给出所有16条指令的微程序入口微地址;

(2)通过分析每条指令的功能明确其的微程序流程,可参考实验指导书图3-4-1、图3-2-2、图3-3-1;

(3)写出每条微指令的微命令,即24个微控制位信号,可参考实验指导书表3.4.1、表3.2.1、表3.3.1和“微控制器编程手册”第2章。

(4)建议采用逐条指令设计实现的方式,一条实现并用汇编语句测试通过后(指令功能、下址顺序均正确)再进行下一条的设计。

5、检查

模型计算机设计完成后,用所给的测试程序check_1.asm(测12条非转移指令)和check_2.asm(测3条转移指令)检查正确性。检查方法:在测试程序中#load s本人的.IS微指令程序,实验箱电源关闭重启并连接,装载后选择“运行”或“单步”执行。

check_1.asm运行的正确结果为:寄存器R0R1R2R3分别显示00112233,IOH显示33。

check_2.asm运行的正确结果为:寄存器R0R1R2R3分别显示00112233,如果显示EE则执行有错误。

四、模型机指令系统(用列表方式给出,含助记符、操作数、指令码、长度、注释等)

;复杂模型机指令系统

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

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

LDI     R0,*               00     2;

LDI     R1,*               04     2;

LDI     R2,*               08     2;

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



OUT     IOH,R0             10     1;

OUT     IOH,R1             11     1;

OUT     IOH,R2             12     1;

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



STA     *,R0               30     3;

STA     *,R1               31     3;

STA     *,R2               32     3;

STA     *,R3               33     3;   Rs→[M]



JMP     *                  40     3; [M]→PC,即跳转到M所指单元

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

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

HALT    ""                 70     1;停机(总线锁定)



SUB     R0,R0              80     1

SUB     R0,R1              81     1

SUB     R0,R2              82     1

SUB     R0,R3              83     1

SUB     R1,R0              84     1

SUB     R1,R1              85     1

SUB     R1,R2              86     1

SUB     R1,R3              87     1

SUB     R2,R0              88     1

SUB     R2,R1              89     1

SUB     R2,R2              8A     1

SUB     R2,R3              8B     1

SUB     R3,R0              8C     1

SUB     R3,R1              8D     1

SUB     R3,R2              8E     1

SUB     R3,R3              8F     1 ;减法,Rd-Rs→Rd



ADD     R0,R0              90     1

ADD     R0,R1              91     1

ADD     R0,R2              92     1

ADD     R0,R3              93     1

ADD     R1,R0              94     1

ADD     R1,R1              95     1

ADD     R1,R2              96     1

ADD     R1,R3              97     1

ADD     R2,R0              98     1

ADD     R2,R1              99     1

ADD     R2,R2              9A     1

ADD     R2,R3              9B     1

ADD     R3,R0              9C     1

ADD     R3,R1              9D     1

ADD     R3,R2              9E     1

ADD     R3,R3              9F     1 ;加法,Rd-Rs→Rd



AND     R0,R0              A0     1

AND     R0,R1              A1     1

AND     R0,R2              A2     1

AND     R0,R3              A3     1

AND     R1,R0              A4     1

AND     R1,R1              A5     1

AND     R1,R2              A6     1

AND     R1,R3              A7     1

AND     R2,R0              A8     1

AND     R2,R1              A9     1

AND     R2,R2              AA     1

AND     R2,R3              AB     1

AND     R3,R0              AC     1

AND     R3,R1              AD     1

AND     R3,R2              AE     1

AND     R3,R3              AF     1 ;Rd&Rs→Rd (Rd和Rs相与)



DEC     R0                 B0     1;

DEC     R1                 B4     1;

DEC     R2                 B8     1;

DEC     R3                 BC     1;将Rd值减1



CLR     R0                 C0     1;

CLR     R1                 C4     1;

CLR     R2                 C8     1;

CLR     R3                 CC     1;将Rd清零



LDA     R0,*               20     3;

LDA     R1,*               24     3;

LDA     R2,*               28     3;

LDA     R3,*               2C     3;[M] →Rd



RL      R0                 D0     1;

RL      R1                 D4     1;

RL      R2                 D8     1;

RL      R3                 DC     1;Rd循环左移一位



RRC     R0                 E0     1;

RRC     R1                 E4     1;

RRC     R2                 E8     1;

RRC     R3                 EC     1;Rd带进位右移一位



MOV     R0,R0              F0     1;

MOV     R0,R1              F1     1;

MOV     R0,R2              F2     1;

MOV     R0,R3              F3     1;

MOV     R1,R0              F4     1;

MOV     R1,R1              F5     1;

MOV     R1,R2              F6     1;

MOV     R1,R3              F7     1;

MOV     R2,R0              F8     1;

MOV     R2,R1              F9     1;

MOV     R2,R2              FA     1;

MOV     R2,R3              FB     1;

MOV     R3,R0              FC     1;

MOV     R3,R1              FD     1;

MOV     R3,R2              FE     1;

MOV     R3,R3              FF     1;  Rs→Rd

六、画出微程序流程图

七、填写下面的微指令表(只填写有微指令的相关行):

注意:这个好像还是有点问题的。。但是答辩的时候都通过了,老师问的问题也很简单基础。。。后来自己再回过来看发现还是有点问题-----

微址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

0

0

0

0

0

0

0

0

00

0

0

0

0

0

0

0

0

00

0

0

0

0

0

0

0

0

00

0001

空操作

0001

0

1

0

0

0

0

0

0

40

0

0

0

0

0

0

0

0

00

0

0

0

0

0

1

1

1

07

0600

IBUS->IR

0600

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BX

0601

0

1

0

0

1

1

1

1

4F

0

0

1

1

1

0

0

1

39

1

0

0

1

0

0

1

0

92

0001

BX->RD

0620

0

0

0

0

1

0

1

0

0A

0

0

0

0

0

1

1

0

06

0

0

0

1

0

0

1

0

12

0001

RS->IOH

0640

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

0

0

04

0

0

1

0

0

0

0

0

20

+1

ROM->BL

0641

0

1

0

0

0

1

0

0

44

0

0

1

1

0

1

0

0

34

0

0

1

0

0

0

0

0

20

+1

R0M->BH

0642

0

1

0

0

0

0

1

1

43

0

0

1

1

1

0

0

1

39

1

1

0

0

0

0

0

0

C0

+1

BX->AR

0643

1

0

0

0

1

1

1

1

8F

0

0

0

0

0

1

0

0

04

0

0

0

1

0

0

1

0

12

0001

RAM->RD

0660

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

0

0

04

1

0

0

0

0

0

0

0

80

+1

ROM->BL

0661

0

1

0

0

0

1

0

0

44

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BH

0662

0

1

0

0

0

0

1

1

43

0

0

1

1

1

0

0

1

39

1

1

0

0

0

0

0

0

C0

+1

BX->AR

0663

1

0

1

0

0

0

0

0

A0

0

0

0

0

0

1

1

0

06

0

0

0

1

0

0

1

0

12

0001

RS->RAM

0680

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BL

0681

0

1

0

0

0

1

1

0

46

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BH

0682

1

1

0

0

0

0

0

1

C1

0

0

0

0

0

0

0

1

01

1

1

0

1

0

0

1

0

D2

0001

BX->PC

6A0

0

0

0

0

0

1

0

1

05

0

0

1

1

1

1

0

0

3C

0

0

0

0

0

0

0

0

00

+1

ROM->BL

6A1

0

1

0

0

0

1

0

0

44

0

0

1

1

1

1

0

0

3C

0

0

0

0

0

0

0

0

00

+1

ROM->BH

6A2

0

0

1

1

1

1

0

1

40

0

0

1

1

1

0

0

0

38

0

0

0

0

0

0

1

1

03

06A4

判定0标志

06A4

0

0

0

0

0

0

0

0

00

0

0

1

1

1

0

0

0

38

0

0

0

1

0

0

1

0

12

0001

空操作

06A5

1

1

0

0

0

0

0

0

C1

0

0

1

1

1

0

0

1

38

0

0

1

0

1

1

0

1

D2

0001

BX->PC

06C0

1

1

1

1

1

0

1

0

05

1

1

1

1

1

0

1

1

04

0

0

0

0

0

0

0

0

00

+1

ROM->BL

06C1

0

1

0

0

0

1

0

0

44

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BH

06C2

0

0

0

0

0

0

0

0

40

0

0

0

0

0

0

0

0

00

0

0

0

0

1

0

0

1

05

06C4

判断CY标志

06C4

0

0

0

0

0

0

0

0

00

0

0

0

0

0

0

0

0

00

0

0

0

1

0

0

1

0

12

0001

空操作

06C5

1

1

0

0

0

0

0

0

C1

0

0

1

0

1

0

0

1

39

1

1

0

1

0

0

1

0

D2

0001

BX->PC

06E0

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

1

07

1

1

0

0

0

0

0

0

C0

+1

PC->AX

06E1

1

1

0

0

0

0

0

0

C0

0

0

1

0

1

0

0

1

29

1

1

0

1

0

0

1

0

D2

06E0

AX-1->PC

0700

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

1

0

0

0

88

+1

RD->AX

0701

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

1

0

06

0

0

0

0

0

0

0

0

00

+1

RS->BX

0702

0

0

0

0

1

1

1

1

0F

1

0

0

1

0

0

0

0

91

1

0

0

1

0

0

1

0

92

0001

AX-BX->RD

0720

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

RD->AX 

0721

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

1

0

06

0

0

0

0

0

0

0

0

00

+1

RS->BX

0722

0

0

0

0

1

1

1

1

0F

1

0

0

1

1

0

0

1

99

1

0

0

1

0

0

1

0

92

0001

AX+BX->RD

0740

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

RD->AX

0741

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

1

0

06

0

0

0

0

0

0

0

0

00

+1

RS->BX

0742

0

0

0

0

1

1

1

1

0F

0

0

0

1

0

0

0

1

11

1

0

0

1

0

0

1

0

92

0001

AX&BX->RD

0760

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

RD->AX

0761

0

0

0

0

1

1

1

1

0F

0

0

1

0

1

0

0

1

29

1

0

0

1

0

0

1

0

92

0001

AX-1->RD

0780

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

1

0

0

0

0

0

A0

+1

     RD->AX

0781

0

0

0

0

1

1

1

1

0F

0

0

1

0

0

0

0

1

21

1

0

1

1

0

0

1

0

B2

0001

AX=0->RD

07A0

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

RD->AX

07A1

0

0

0

0

1

1

1

1

0F

1

0

1

0

1

0

0

1

A9

1

0

0

1

0

0

1

0

92

0001

RL AX->RD

07C0

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

RD->AX

07C1

0

0

0

0

1

1

1

1

0F

1

0

1

0

0

0

0

1

A1

1

0

0

1

0

0

1

0

92

0001

RR AX->RD

07E0

0

0

0

0

1

1

1

1

0F

0

0

0

0

0

1

1

0

06

0

0

0

1

0

0

1

0

12

0001

Rd=Rs

八、验证程序

程序一:

;课程设计检查程序1,含除跳转指令外的12条指令:add,and,dec,ldi,clr,rl,rr,ldr,sta,mov,out,hlt

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

    org   0

       

start:

LDI  r0,12h

sta 100h,r0

lda r1,100h

dec r1

rl r0

add r0,r1

rrc r0

add r0,r1

ldi r2,76h

and r2,r0

mov r3,r2

add r3,r1

clr r0

out ioh,r3

halt

;qq:jmp qq

  End

程序二:

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

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

    org   0

start:

ldi r0,12h

sub r0,r0

jz p1

ldi r0,0eeh

p1:ldi r1,11h

ldi r2,0ffh

add r1,r2

jc p2

ldi r1,0eeh

jmp p3

p2:ldi r1,11h

p3:ldi r2,22h

ldi r3,011h

add r3,r2

jc p4

jmp p5

p4:ldi r2,0eeh

p5:halt



  end

检查结果:

Check1:

Check2:

  • 存在的问题及体会
  1. HALT终止指令是取出PC放在AX,经过ALU使得A-1后重新赋值给PC,然后PC跳回后经过0001时又PC++,相当于不断循环PC-1+1=PC的操作,死锁在循环中,起了终止的作用。
  2. CY进位/Z置零跳转是在标志位为1时,跳转到地址转移的微指令地址的下一个地址,否则直接跳转到地址转移的微指令地址入口
  3. 涉及到立即数时,需要把存储立即数的地址放在ROM后存在AX/BX,在经过ALU传到AR/输出到指定寄存器
  4. 取分寄存器和暂存器的作用。寄存器是有限存贮容量的高速存贮部件,可用来暂存指令、数据和位址等;暂存器暂时存放一定数量数据,例如:编程时某一逻辑信号经常多次使用,中间结果需要暂时记忆。

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值