计算机组成大型实验报告材料机器指令设计实验.docx

上传人:b****7 文档编号:9273375 上传时间:2023-02-03 格式:DOCX 页数:21 大小:214.41KB
下载 相关 举报
计算机组成大型实验报告材料机器指令设计实验.docx_第1页
第1页 / 共21页
计算机组成大型实验报告材料机器指令设计实验.docx_第2页
第2页 / 共21页
计算机组成大型实验报告材料机器指令设计实验.docx_第3页
第3页 / 共21页
计算机组成大型实验报告材料机器指令设计实验.docx_第4页
第4页 / 共21页
计算机组成大型实验报告材料机器指令设计实验.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

计算机组成大型实验报告材料机器指令设计实验.docx

《计算机组成大型实验报告材料机器指令设计实验.docx》由会员分享,可在线阅读,更多相关《计算机组成大型实验报告材料机器指令设计实验.docx(21页珍藏版)》请在冰豆网上搜索。

计算机组成大型实验报告材料机器指令设计实验.docx

计算机组成大型实验报告材料机器指令设计实验

机器指令设计实验-实验报告

一、实验目的与要求

(1)通过实验分析简单模型机结构,了解计算机工作原理。

(2)掌握计算机微程序控制器的控制方法,掌握计算机指令执行过程。

(3)简单模型计算机部件构架、微程序控制器中微程序代码功能实现、微程序流程、指令系统定义和简单模型计算机汇编语言程序进行验证。

(4)在简单模型计算机基础上设计新的技巧指令,在第二章实验八的基础上实施,使用的实验部件和接线不变,增加5条新机器指令,目的是提高学生对计算机机器指令的理解,锻炼学生自己动手设计模型计算机机器指令的能力。

二、实验原理

1.简单模型计算机构架

简单模型计算机逻辑结构如图1所示,构成简单模型计算机的实验部件以总线为基本连

接通道,主要有以下7个:

(1)算术逻辑运算部件ALUUNIT进行算术逻辑运算操作。

(2)存储器部件MEMUNIT,存储模型计算机汇编语言程序和操作数据。

(3)地址寄存器部件ADDRESSUNIT,包含两部分电路,地址寄存器AR:

接收存储器程序中的指令地址和指令中的数据地址;指令地址计数器PC:

用于指示程序中的指令地址并通过地址缓冲器送往地址寄存器AR。

(4)指令寄存器部件INSUNIT,寄存器当前正在执行的机器指令,此指令的指令码通过指令译码器向微程序控制器指示相应的微程序入口地址;此指令的地址码指示的操作数地址,送往地址寄存器AR。

(5)输入/输出部件INPUT/OUTPUT,操作数据的输入与输出显示。

(7)通用寄存器部件REGUNIT,暂存运算的中间数据。

(7)微程序控制器部件MAINCONTROLUNIT,控制各部件完成指令的功能。

2.简单模型计算机指令系统

此简单模型计算机的指令系统包括控制台指令与机器指令。

共三条控制台指令,由手动控制单元(MANUALUNIT)的KB,KA开关设定。

控制台指令只能由手工操作一条条指令,不能编写在汇编程序中。

实验八已经给出5条机器指令。

分别是输入指令INR0,PORTAR,算术加指令ADDR0,[ADDR],寄存器内容送存储器指令STA[ADDR],R0,输出指令OUT[PORTAR],[ADDR],转移指令JMPPORTAR。

如表1所示。

另外根据微指令格式,可以设计出实验要求的5条指令。

先进行微指令译码分析,然后详细说明如何设计。

(1)微指令译码分析:

图1-简单模型计算机逻辑结构图

表1-简单模型机指令表

指令名称

助记符

指令码格式

输入

INR0,PORTAR

I7,I6,I5,I4,I3,I2,I1,I0

110000DR

PORTAR

算术加

ADDR0,[ADDR]

I7,I6,I5,I4,I3,I2,I1,I0

110001DR

ADDR

寄存器内容送存储器

STA[ADDR],R0

I7,I6,I5,I4,I3,I2,I1,I0

110010DR

ADDR

输出

OUTPORTAR,[ADDR]

I7,I6,I5,I4,I3,I2,I1,I0

110011DR

PORTAR

转移

JMPADDR

I7,I6,I5,I4,I3,I2,I1,I0

110100XX

ADDR

注:

该模型机的输入输出设备端口号(PORTAR)只有一个,为00H。

DR指示4个通用寄存器中的一个。

JMP为跳转地址为直接地址,即将ADDR赋值给PC。

当模型机的一条指令执行时,由指令译码器确定一个与此指令对应的微程序入口地址,经地址缓冲器送微控制存储器的地址通道,然后从微控制存储器相应单元中读出24位微指令代码,其中高17位送微指令控制代码段寄存器,由微指令译码器产生控制信号,低7位送微指令地址代码段寄存器(7位),指出微控制存储器中下一微指令的地址。

微指令代码共分7段:

(1)BTO:

数据从总线送部件控制段,3位。

(2)OTB:

数据从部件送总线控制端,3位。

(3)FUNC:

地址转移、读写功能控制端,3位。

(4)FS:

方式功能控制段:

1位。

(5)S3,S2,S1,S0,M,Ci:

模式功能控制段,6位。

(6)N:

备分段,1位。

(7)NEXT:

下一条微指令地址段,7位。

表2-微指令字段编码表

编码+译码

BTO

OTB

FS=1

FS=0

FUNC

000

 

 

PC+1(T4)

 

001

B-DA1(T4)

ALU-B#

J

(1)

M-W#(T3)

010

B-DA2(T4)

299-B#

J

(2)

M-R#(T2)

011

B-IR(T3)

SR-B#

J(3)

I/O-W#(T3)

100

B-DR(T4)

DR-B#

J(4)

I/O-R#(T2)

101

B-SP(T4)

SI-B#

J(5)

INT-R#(T2)

110

B-AR(T3)

SP-B#

CyCn#

INT-E#(T3)

111

B-PC#

PC-B#

CyNCn#

 

表3-散转微地址形成规则表

散转条件

散装微地址形成规则

j

(1)条件

指令码I7I6=11时,

散转入口地址=微代码下址(OR)0,1,0,I5,I4,I3,I2

指令码I7I6!

=11时,

散转入口地址=微代码下址(OR)0,0,0,I7,I6,I5,I4

j

(2)条件

散转入口地址=微代码下址(OR)0,0,0,0,0,I3,I2

j(3)条件

散转入口地址=微代码下址(OR)0,0,0,0,0,KB,KA

j(4)条件

散转入口地址=微代码下址(OR)0,0,0,0,0,FC,FZ

j(5)条件

散转入口地址=微代码下址(OR)0,INT,0,0,0,0,0

注:

表格中FC为进位标志,FZ为零标志。

本实验只要到J

(1),J(3),J(4)四条散转条件。

表4-简单模型计算机机器指令表

指令功能

IN

ADD

STA

OUT

JMP

指令符号

数据输入

算术加

数据传输

数据输入

跳转

微程序入口地址

30H

31H

32H

33H

34H

(2)微程序流程图

根据实验八的机器指令和控制台指令可以画出图2所示的流程图。

图2-模型计算机指令执行流程图

三、四条指令的微程序代码设计

根据实验要求的汇编程序,发现并不需要INCDR这条指令,所以也没有对其进行微代码的设计。

另外显然PC->AR,PC+1->PC;01H->02H

RAM->IR;02H->03H

J

(1)散转;03H->(10H)

三条微指令动作为公操作。

因此我们只需要考虑除此之外的其他微指令动作。

下面对4条指令,逐条进行解释分析。

1.无借位减:

SUBDR,[ADDR]

a.指令功能:

(SR)-(DR)->DR,影响Cy,Zi标志位。

当(SR)<(DR)时,Cy=1,当(SR)=DR时,Zi=1。

b.指令格式:

c.指令流程:

PC->AR,PC+1->PC;01H->02H

RAM->IR;02H->03H

J

(1)散转;03H->(10H)

PC->AR,PC+1->PC;35H->12H

RAM->AR;12H->13H

RAM->DA1;13H->14H

DR->DA2;14H->15H

DA1-DA2->DR;15H->01H

d.微程序代码:

微地址

微代码

BTO

OTB

FUNC

FS

S3

S2

S1

S0

M

Ci

N

下址

微指令注释

35H

DC4012

110

111

000

1

0

0

0

0

0

0

0

0010010

PC->AR,PC=PC+1

12H

C10013

110

000

010

0

0

0

0

0

0

0

0

0010011

RAM->AR

13H

210014

001

000

010

0

0

0

0

0

0

0

0

0010100

RAM->DA1

14H

500015

010

100

000

0

0

0

0

0

0

0

0

0010101

DR->DA2

15H

87D801

100

001

111

1

0

1

1

0

0

0

0

0000001

DA1-DA2->DR

2.带进位加:

ADDCDR,[ADDR]

a.指令功能:

(SR)+(DR)+Cy->DR,影响Cy,Zi标志位。

当(SR)+(DR)+Cy>255时,Cy=1,当(SR)+(DR)+Cy=256时,Zi=1。

.这条指令可实现多字节的加法操作。

b.指令格式:

c.指令流程:

PC->AR,PC+1->PC;01H->02H

RAM->IR;02H->03H

J

(1)散转;03H->(10H)

PC->AR,PC+1->PC;36H->18H

RAM->AR;18H->19H

RAM->DA1;19H->1AH

DR->DA2;1AH->1BH

DA1+DA2+Cy->DR;1BH->01H

d.微程序代码:

微地址

微代码

BTO

OTB

FUNC

FS

S3

S2

S1

S0

M

Ci

N

下址

微指令注释

36H

DC4018

110

111

000

1

0

0

0

0

0

0

0

0011000

PC->AR,PC=PC+1

18H

C10019

110

000

010

0

0

0

0

0

0

0

0

0011001

RAM->AR

19H

21001A

001

000

010

0

0

0

0

0

0

0

0

0011010

RAM->DA1

1AH

50001B

010

100

000

0

0

0

0

0

0

0

0

0011011

DR->DA2

1BH

87D801

100

001

110

1

1

0

0

1

0

1

0

0000001

DA1+DA2+Cy->DR,CyCn

3.C条件转移:

JMPC[ADDR]

a.指令功能:

若Cy=1,则[ADDR]->PC,否则顺序执行下条指令。

影响Cy,Zi标志位。

b.指令格式:

c.指令流程:

PC->AR,PC+1->PC;01H->02H

RAM->IR;02H->03H

J

(1)散转;03H->(10H)

PC->AR,PC+1->PC;37H->41H

RAM->AR;41H->42H

RAM->DA1;42H->43H

J4#条件散转转移;43H->(44H)

若Cy=0;44H->01H

若Cy=1;44H->46HDA1->PC;46H->01H

d.微程序代码:

微地址

微代码

BTO

OTB

FUNC

FS

S3

S2

S1

S0

M

Ci

N

下址

微指令注释

37H

DC4041

110

111

000

1

0

0

0

0

0

0

0

1000001

PC->AR,PC=PC+1

41H

C10042

110

000

010

0

0

0

0

0

0

0

0

1000010

RAM->AR

42H

210043

001

000

010

0

0

0

0

0

0

0

0

1000011

RAM->DA1

43H

024044

000

000

100

1

0

0

0

0

0

0

0

1000100

J(4)

44H

000001

000

000

000

0

0

0

0

0

0

0

0

0000001

NULL

45H

000000

000

000

000

0

0

0

0

0

0

0

0

0000000

NULL

46H

E44101

111

001

000

1

0

0

0

0

0

1

0

0000001

DA1->PC,PC+1有效

值得注意的是,此条“C条件转移”指令,跳转的是ADDR中的内容,而非ADDR,这一点也JMP不同。

而将JMPC[ADDR],改成JMPCADDR也相当得容易。

只要将微程序代码中微地址为37H的微代码改成DC4042即可。

也就是跳过RAM->AR不执行。

4.存储器内容送通用寄存器LDADR,[ADDR]

a.指令功能:

(ADDR)->DR,不影响Cy,Zi标志位。

b.指令格式:

c.指令流程:

PC->AR,PC+1->PC;01H->02H

RAM->IR;02H->03H

J

(1)散转;03H->(10H)

PC->AR,PC+1->PC;39H->3CH

RAM->AR;3CH->3DH

RAM->DA1;3DH->3EH

DA1->DR;3EH->01H

d.微程序代码:

微地址

微代码

BTO

OTB

FUNC

FS

S3

S2

S1

S0

M

Ci

N

下址

微指令注释

39H

DC403C

110

111

000

1

0

0

0

0

0

0

0

0111100

PC->AR,PC=PC+1

3CH

C1003D

110

000

010

0

0

0

0

0

0

0

0

0111101

RAM->AR

3DH

21003E

001

000

010

0

0

0

0

0

0

0

0

0111110

RAM->DA1

3EH

843C01

100

001

000

0

1

1

1

1

0

0

0

0000001

DA1->DR

根据这四条指令微代码可以得到如图3所示流程图。

图3-新增指令逻辑结构图

四、汇编程序设计

1.程序功能

程序功能是对输入开关上的数据和存储器某一单元中的数据进行加法操作,结果累计在存储器某个单元中,当累计值大于256时转而进行减法操作,即把此存储器单元中的值减去输入开关上的数据,结果送同一存储器单元中,当操作结果小于0时再转而进行加法操作,使输出显示顶上出现数据连续加,然后连续减,减到0时候连续加。

这样连续加、连续减直到拨动

结束程序运行为止。

2.程序流程图

图4-汇编语言程序流程图

3.汇编程序代码:

端口号(POATAR)只有一个,为00H。

主存储器单元地址为30H存放数据,用主存储器单元31H,32H来存放跳转地址。

由于JMPC[ADDR]跳转的是ADDR所指内容,故需要额外的开销。

如果尝试把C条件转移改成JMPCADDR也是很简单的事情,具体可以查看附件excel表格MY-CODE.XLS中的“汇编代码1”表。

每次存储器值更新,都通过OUT指令进行存储器内容送入输出设备(00H)显示。

另外,由于简单模型机机器指令并没有立即数传输给寄存器或存储器,因此存储器清零操作需要一定的技巧。

我们采用的方法是先把存储器内容传给寄存器,然后存储器内容减去寄存器内容,值送入寄存器,该值为0,然后把该值通过寄存器送入存储器。

详细的汇编程序代码如下表4所示。

表4-汇编程序代码表

主存储器地址

指令码

汇编代码

说明

00H

E4H

LADR0,[30H]

存储器清零

01H

30H

02H

D4H

SUBR0,[30H]

03H

30H

04H

C8H

STA[30H],R0

05H

30H

06H

CCH

OUT[00H],[30H]

07H

30H

08H

00H

09H

COH

INR0,[00H]

存储器内容=存储器内容+输入值

0AH

00H

0BH

C4H

ADDR0,[30H]

0CH

30H

0DH

C8H

STA[30H],R0

0EH

30H

0FH

CCH

OUT[00H],[30H]

10H

30H

11H

00H

12H

DCH

JMPC[32H]

存储器内容>=265?

13H

32H

14H

D0H

JMP09H

15H

09H

16H

C0H

INR0,[00H]

存储器内容=存储器内容-输入值

17H

00H

18H

D4H

SUBR0,[30H]

19H

30H

1AH

C8H

STA[30H],R0

1BH

30H

1CH

CCH

OUT[00H],[30H]

1DH

30H

1EH

00H

1FH

DCH

JMPC[31H]

存储器内容<0?

20H

31H

21H

D0H

JMP16H

22H

16H

30H

 

[ADDR]

 

31H

 

9

 

32H

 

16

 

五、实验步骤

通过Yy-z02模型机软件,省去了微代码与机器指令汇编程序的手动写入与检查,大大提高了实验效率。

因为这里不再对微代码与机器指令汇编程序的装入操作进行说明。

而实验连线也相对简单,故也不再进行罗列。

实验步骤如下:

(1)根据《计算机组成原理实验指导》(主编张建中,严义)P76的说明,对YY-Z02实验仪进行连线。

(2)启动Yy-z02模型机软件。

为了保证防止由于连线错误而导致运行结果不对,因此先将工作方式选为“仿真模式”。

该模式下装入的速度也比较快。

(3)将微程序代码与汇编代码分别写入控存窗口与主存窗口的表格中。

如图5,6所示。

微代码与汇编程序代码详见MY-CODE.XLS中的“微代码表”与“汇编代码2”。

图5-微代码的部分数据-控存窗口

图6-汇编代码的数据-主存窗口

(4)点击“下装程序与微程序按钮

(5)设定输入值

,在input中写入值,并回车结束。

(6)运行程序。

按连续运行按钮

(7)改变输入值,观察输出值变化。

六、实验结果记录

对同一程序进行了多次实验,表5记录了其中的4组。

可以发现当数据从0增大至超过256后,截取数的高位,剩下低8位,相对于加上给数后又减去256。

进位符Cy=1,开始做减操作,显然该数减去输入数值必定小于0,相对于下溢,相当与减去该数后又加上256。

由于加的数与减的数是一样的,因此此时,输出结果呈现交替变化,比如输入值为54H时,最后输出结果在FDH与52H交替。

表5-实验结果记录

实验结果

输入值

54H

43H

39H

61H

第1次输出

54H

86H

72H

61H

第2次输出

A8H

C9H

ABH

C2H

第3次输出

FDH

0CH

E4H

23H

第4次输出

52H

C9H

1D

C2H

第5次输出

FDH

0CH

E4H

23H

第6次输出

52H

C9H

1DH

C2H

第7次输出

FDH

0CH

E4H

23H

第8次输出

52H

C9H

1DH

C2H

七、实验过程中出现的问题与解决方案

(1)微代码数据量大,当发现Yy-z02模型机软件内置了部分微代码后,用了部分数据。

但由于前后微代码的时常更改,导致部分微代码输入错误。

这也直接导致程序输出结果的不正确。

更大的问题是很难查错,不知道是微代码的指令逻辑错了,还是下一地址错了,还是汇编程序有问题了。

我们的解决方案是找到已完成同学的正确汇编代码对微代码进行查错。

当确定微代码的确有错后,我们再次对微代码进行逐条检查(由于模型机软件界面不是很友好,操作起来也很不方便,因此我们的原始微代码是写在excel表格中的)。

通过Yy-z02模型机软件中伪代码确认指令逻辑是否正确,通过检查下一地址确定程序转移的正确性。

通过多次的检查,最终程序输出结果正确。

(2)微代码正确了,然后对汇编程序进行改良优化。

刚开始,我们连加动作指令的是ADDC,即带进位加,导致每次从连减操作转化为连加操作后,都会多加一个1,这也不难理解,减法操作溢出使得Cy=1。

因此,我们改用ADD指令。

显然ADDC是为了实现多字节的加法操作而准备的,对于连加并不适用。

(3)对微指令理解不深。

刚开始认识JMPC[ADDR]跳转的地址是ADDR中的内容,这本来是正确的,但由于不够自信,被告知是直接ADDR地址跳转。

导致输出结果依然不正确。

然后对微指令再此进行研读,发现JMPC[ADDR指令的确是跳转ADDR所指主存单元中存放的内容。

最好得到正确结果。

另外,我们通过修改微代码的部分数据,使得“C条件跳转”实现了JMPCADDR的功能,即直接地址跳转。

同时我们也写出了与此相对的汇编程序,详见附近excel表格的汇编代码1。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1