计算机组成原理课程设计复杂模型机设计实验.docx
《计算机组成原理课程设计复杂模型机设计实验.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计复杂模型机设计实验.docx(13页珍藏版)》请在冰豆网上搜索。
![计算机组成原理课程设计复杂模型机设计实验.docx](https://file1.bdocx.com/fileroot1/2023-2/21/7100743d-cbcd-44a6-995b-8c37126673e6/7100743d-cbcd-44a6-995b-8c37126673e61.gif)
计算机组成原理课程设计复杂模型机设计实验
复杂模型机设计实验
一、实验目的
综合运用所学计算机原理知识,设计并实现较为完整的计算机。
二、实验设备
1、ZYE1603B计算机组成原理教学实验系统一台,排线若干。
2、PC机一台。
三、数据格式及指令系统
1.指令格式
模型机设计四大类指令共十六条,其中包括算术逻辑指令、I/O指令、访问及转移指令和停机指令。
1).算术逻辑指令
设计9条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:
D7D6D5D4
D3D2
D1D0
OP-CODE
rs
rd
其中,OP-CODE为操作码,rs为源寄存器,rd为目的寄存器,并规定:
rs或rd
选定的寄存器
00
01
10
R0
R1
R2
9条算术逻辑指令的名称、功能和具体格式见表
2).访存指令及转移指令
模型机设计2条访存指令――存数(STA)和取数(LDA),2条转移指令――无条件转移(JMP)和结果为零或有进位转移指令(BZC),这4条指令长度为2个字节,其指令格式为:
D7D6
D5D4
D3D2
D1D0
00
M
OP-CODE
rd
D
其中,OP-CODE为操作码,rd为目的寄存器地址(LDA、STA指令使用)。
D为偏移量(正负均可),M为寻址模式,其定义如下:
寻址模式M
有效地址E
说明
00
01
10
11
E=D
E=(D)
E=(RI)+D
E=(PC)+D
直接寻址
间接寻址
RI变址寻址
相对寻址
本模型机规定变址寄存器RI指定为寄存器R2。
3).I/O指令
输入(IN)和输出(OUT)指令采用单字节指令,其格式如下:
D7D6D5D4
D3D2
D1D0
OP-CODE
addr
rd
其中,addr=01时,选中“INPUTDEVICE”中的开关组作为输入设备,addr=10时,选中“OUTPUTDEVICE”中的数码块作为输出设备。
4).停机指令
指令格式如下:
D7D6D5D4
D3D2
D1D0
OP-CODE
00
00
HALT指令用于实现停机操作。
2.指令系统
本模型机共有16条基本指令,其中算术逻辑指令7条,访存指令和程序控制指令4条,输入输出指令2条,其它指令1条,表列出了各条指令的格式、汇编符号、指令功能。
表1
助记符号
指令格式
功能
CLRrd
MOVrs,rd
ADCrs,rd
SBCrs,rd
INCrd
ANDrs,rd
COMrd
RRCrs,rd
RLCrs,rd
0111
00
rd
1000
rs
rd
1001
rs
rd
1010
rs
rd
1011
rd
1100
rs
rd
1101
rd
1110
rs
rd
1111
rs
rd
0→rd
rs→rd
rs+rd+cy→rd
rs-rd-cy→rd
rd+1→rd
rs∧rd→rd
→rd
rs→rd
rs←rd
LDAM,D,rd
STAM,D,rd
JMPM,D
BZCM,D
00
M
00
rd
D
00
M
01
rd
D
00
M
00
rd
D
00
M
00
rd
D
E→rs
rd→E
E→PC
当CY=1或Z=1,
E→PC
INaddr,rd
OUTaddr,rd
0100
01
rd
0101
01
rd
addr→rd
rd→addr
HALT
0100
01
rd
停机
四、总体设计
本模型机的数据通路框图如图所示。
图1:
复杂模型机数据通路图
根据机器指令系统的要求,设计微程序流程图及确定微地址如下:
图2:
复杂模型机微程序流程图
按照系统建议的微指令格式,参照微指令流程图,将每条微指令代码化,译成二进制代码表,并将二进制代码表转换为联机操作时的十六进制格式文件。
五、实验步骤
1.根据复杂模型机的指令系统,编写实验程序。
实验过程如下:
本实验完全使用寄存器操作。
程序首先从数据输入开关采集数据放入R0中,经循环左移两次放入R1中。
然后再次从数据输入开关采集数据放入R0中,经循环将右移一次与R1中的数据相加,其结果送到R1中,然后判断加法的结果是否有进位或为全零,若是就循环运行,否则,输出结果到数码管上显示。
实验的机器指令程序如下:
根据流程图,确定如下微程序:
微程序:
$M00018108$M2205DB81
$M0101ED82$M230180E4
$M0200C050$M24018001
$M0300A004$M2595AAA0
$M0400E0A0$M2600A027
$M0500E006$M2701BC28
$M0600A007$M2895EA29
$M0700E0A0$M2995AAA0
$M0801ED8A$M2A01B42B
$M0901ED8C$M2B959B41
$M0A00A03B$M2C01A42D
$M0B018001$M2D65AB6E
$M0C00203C$M2E0D9A01
$M0D00A00E$M2F01AA30
$M0E01B60F$M300D8171
$M0F95EA25$M31959B41
$M1001ED83$M32019A01
$M1101ED85$M3301B435
$M1201ED8D$M3405DB81
$M1301EDA6$M35B99B41
$M14001001$M360D9A01
$M15030401$M37298838
$M16018016$M38019801
$M173D9A01$M3919883A
$M18019201$M3A019801
$M1901A22A$M3B070A08
$M1A01B22C$M3C068A09
$M1B01A232
$M1C01A233
$M1D01A236
$M1E318237
$M1F318239
$M20009001
$M21028401
验证程序:
助记符机器码
IN01,R0$P0044
IN01,R2$P0146
SBCR2,R0$P02A8
MOVR0,R1$P0381
RLCR1,R1$P04F5
OUTR1,R1$P0559
HALT$P0600
指令功能:
在实验板的数据开关手动输入一个数存到R0寄存器里,在输入另一个数到R2寄存器里,然后用R2-R0存到R0寄存器里,接着把R0里的数转存到R1寄存器,然后再把R1的数左移一位存到R1,接着在数码管显示输出当前R1寄存器里的数,最后停止。
1.按图连接实验线路
2.写入程序/运行程序
1)手动写入
A.按如下步骤讲微代码写入微控器中的存储器2816中:
1将编程开关置为PROM(编程)状态。
2将实验板上“STATEUNIT”中的“STEP”置为“STEP”,“STOP”置为“RUN”状态。
3用二进制模拟开关置微地址MA5—MA0。
4在MK24-MK1开关上置微代码,24位开关对应24位显示灯,开关量置为“0”时灯亮,开关量为“1”时灯灭。
5启动时序电路(按动启动按钮“START”),即将微代码写入到2816的相应地址对应的单元中。
6重复①-⑤步骤,将所有的微代码写入2816中。
B.按如下步骤校验微代码
1将编程开关置为READ(校验)状态。
2将实验板上“STATEUNIT”中的“STEP”置为“STEP”,“STOP”置为“RUN”状态。
3用二进制模拟开关置微地址MA5—MA0。
4启动时序电路(按动启动按钮“START”),读出微代码。
观察显示灯MD24-MD1的状态(灯亮为“0”,灭为“1”),检查读出的微代码是否与写入的相同。
如果不同,则将开关置于PROM编程状态,重新执行
)即可。
C.按如下步骤使用KWE微程序进行机器指令程序的装入。
1使编程开关处于“RUN”,STEP为“STEP”状态,STOP为“RUN”状态。
2拨动总清开关CLR(0→1→0),微地址寄存器清零,程序计数器清零,然后使控制台SWB、SWA开关置为“01”,并按动一次START,微地址显示灯显示“010001”。
3再按动一次START,微地址灯显示“010100”,此时数据开关的内容置为要写入的机器指令。
再按动两次START键后,即完成该条指令的写入,并且微地址显示灯显示“010001”。
(注:
由KWE的流程图可知,该流程每执行一次,将向PC寄存器所指向的存储器单元中写入一个字节的数据,并且将PC加1。
)
4如果还需要向存储器中输入数据,则需重复重新执行
。
D.按如下步骤使用KRD微程序进行机器指令程序的检查。
1使编程开关处于“RUN”,STEP为“STEP”状态,STOP为“RUN”状态。
2拨动总清开关CLR(0→1→0),微地址寄存器清零,程序计数器清零,然后使控制台SWB、SWA开关置为“00”,并按动一次启动开关START,微地址显示灯显示“010000”。
3再按动一次START,微地址灯显示“010010”,第三次按动STRAT,微地址灯显示为“010111”,再按动STRAT后此时输出单元的数码管显示为PC寄存器所指单元的内容。
(注:
由KRD的流程图可知,该流程每执行一次,将显示PC寄存器所指向的存储器单元中一个字节的数据,并且将PC加1。
)
4如果还需要检查存储器中其他单元的数据,则需重复重新执行
。
2)联机读/写程序
将微代码写入文本文件中,通过联机软件载入实验系统。
3.运行程序
1)本机运行
A.单步运行程序
1使编程开关处于“RUN”状态,STEP为“STEP”状态,STOP为“RUN”状态。
2拨动总清开关CLR(0→1→0),微地址寄存器清零,程序计数器清零。
3单步运行一条微指令,每按动一次START键,即单步运行一条微指令。
对照微程序流程图,观察微地址显示灯是否与流程一致。
4当运行结束后,可检查存数单元(0BH)中的结果是否和理论计算结果一致。
B.连续运行程序
1使编程开关处于“RUN”状态,STEP为“EXEC”状态,STOP为“RUN”状态。
2拨动总清开关CLR(0→1→0),微地址寄存器清零,程序计数器清零。
3按动START键,系统将连续运行程序,直至将STOP拨至“STOP”状态。
4当运行结束后,可检查存数单元(0BH)中的结果是否和理论计算结果一致。
2)联机运行
联机运行程序时,进入软件界面,装载机器指令及微指令后,运行即
图3:
实验连接图
六、实验总结:
这次课程设计中,基于前几次实验中,对计算机的大致组成以及运行原理有了初步的了解,并且对实验板也比较熟悉了,所以按照实验连接图连线也比较上手了,经过那么多次实验,觉得连线最重要的就是认真,如果一开小差就会出错,每连完一条线之后,都要检查一遍,看是否连错,这告诉我们,做每一件事都要认认真真的完成,容不得一丝马虎,否则只会落得个事倍功半的效果。
这次课程设计最重要的就是编写程序了,要想编写程序首次要对程序了解,知道每个助记符对应的机器码是什么意思,对应的二进制的每四位代表什么。
在对程序理解的过程中,刚开始不知道程序的十六进制是如何通过助记符转换过来的,经过对指令格式的剖析才知道没个助记符对应的二进制,然后对刚编好的程序进行运行,通过观察CPU一般都是先取机器指令,然后编译,送往寄存器,然后再去指令,再编译,一直这样下去,直到停止为止,此次课程设计最大的收获就是,通过观察大致了解了CPU的运行方式,并且都指令也有了较大的了解,还懂得了合作和请教才是完成任务的最佳方法。