复杂模型机实验.docx
《复杂模型机实验.docx》由会员分享,可在线阅读,更多相关《复杂模型机实验.docx(21页珍藏版)》请在冰豆网上搜索。
复杂模型机实验
5.3复杂模型机设计实验
5.3.1实验目的
综合运用所学计算机组成原理知识,设计并实现较为完整的计算机。
5.3.2实验设备
PC机一台,TD-CMA实验系统一套。
5.3.3实验原理
下面讲述一下模型计算机的数据格式及指令系统。
1.数据格式
模型机规定采用定点补码表示法表示数据,字长为8位,8位全用来表示数据(最高位不表示符号),数值表示范围是:
0≤X≤28-1。
2.指令设计
模型机设计三大类指令共十五条,其中包括运算类指令、控制转移类指令,数据传送类指令。
运算类指令包含三种运算,算术运算、逻辑运算和移位运算,设计有6条运算类指令,分别为:
ADD、AND、INC、SUB、OR、RR,所有运算类指令都为单字节,寻址方式采用寄存器直接寻址。
控制转移类指令有三条HLT、JMP、BZC,用以控制程序的分支和转移,其中HLT为单字节指令,JMP和BZC为双字节指令。
数据传送类指令有IN、OUT、MOV、LDI、LAD、STA共6条,用以完成寄存器和寄存器、寄存器和I/O、寄存器和存储器之间的数据交换,除MOV指令为单字节指令外,其余均为双字节指令。
3.指令格式
所有单字节指令(ADD、AND、INC、SUB、OR、RR、HLT和MOV)格式如下:
7654
32
10
OP-CODE
RS
RD
其中,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,并规定:
RS或RD
选定的寄存器
00
01
10
11
R0
R1
R2
R3
IN和OUT的指令格式为:
7654
(1)
32
(1)
10
(1)
7—0
(2)
OP-CODE
RS
RD
P
其中括号中的1表示指令的第一字节,2表示指令的第二字节,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,P为I/O端口号,占用一个字节,系统的I/O地址译码原理见图5-3-1(在地址总线单元)。
图5-3-1I/O地址译码原理图
由于用的是地址总线的高两位进行译码,I/O地址空间被分为四个区,如表5-3-1所示:
表5-3-1I/O地址空间分配
A7A6
选定
地址空间
00
IOY0
00-3F
01
IOY1
40-7F
10
IOY2
80-BF
11
IOY3
C0-FF
系统设计五种数据寻址方式,即立即、直接、间接、变址和相对寻址,LDI指令为立即寻址,LAD、STA、JMP和BZC指令均具备直接、间接、变址和相对寻址能力。
LDI的指令格式如下,第一字节同前一样,第二字节为立即数。
7654
(1)
32
(1)
10
(1)
7—0
(2)
OP-CODE
RS
RD
data
LAD、STA、JMP和BZC指令格式如下。
7654
(1)
32
(1)
10
(1)
7—0
(2)
OP-CODE
M
RD
D
其中M为寻址模式,具体见表5-3-2,以R2做为变址寄存器RI。
表5-3-2寻址方式
寻址模式M
有效地址E
说 明
00
01
10
11
E=D
E=(D)
E=(RI)+D
E=(PC)+D
直接寻址
间接寻址
RI变址寻址
相对寻址
4.指令系统
本模型机共有15条基本指令,表5-3-3列出了各条指令的格式、汇编符号、指令功能。
表5-3-3指令描述
5.3.4总体设计
本模型机的数据通路框图如图5-3-2所示。
图5-3-2数据通路框图
和前面的实验相比,复杂模型机实验指令多,寻址方式多,只用一种测试已不能满足设计要求,为此指令译码电路需要重新设计。
如图5-3-3所示在IR单元的INS_DEC中实现。
图5-3-3指令译码原理图
本实验中要用到四个通用寄存器R3…R0,而对寄存器的选择是通过指令的低四位,为此还得设计一个寄存器译码电路,在IR单元的REG_DEC(GAL16V8)中实现,如图5-3-4所示。
图5-3-4寄存器译码原理图
根据机器指令系统要求,设计微程序流程图及确定微地址,如图5-3-5所示。
按照系统建议的微指令格式,见表5-3-4,参照微指令流程图,将每条微指令代码化,译成二进制代码表,见表5-3-5,并将二进制代码表转换为联机操作时的十六进制格式文件。
表5-3-4微指令格式
图5-3-5微程序流程图
表5-3-5二进制代码表
地址
十六进制表示
高五位
S3-S0
A字段
B字段
C字段
UA5-UA0
00
000001
00000
0000
000
000
000
000001
01
006D43
00000
0000
110
110
101
000011
03
107070
00010
0000
111
000
001
110000
04
002405
00000
0000
010
011
000
000101
05
04B201
00000
1001
011
001
000
000001
06
002407
00000
0000
010
011
000
000111
07
013201
00000
0010
011
001
000
000001
08
106009
00010
0000
110
000
000
001001
09
183001
00011
0000
011
000
000
000001
0A
106010
00010
0000
110
000
000
010000
0B
000001
00000
0000
000
000
000
000001
0C
103001
00010
0000
011
000
000
000001
0D
200601
00100
0000
000
001
100
000001
0E
005341
00000
0000
101
001
101
000001
0F
0000CB
00000
0000
000
000
011
001011
10
280401
00101
0000
000
010
000
000001
11
103001
00010
0000
011
000
000
000001
12
06B201
00000
1101
011
001
000
000001
13
002414
00000
0000
010
011
000
010100
14
05B201
00000
1011
011
001
000
000001
15
002416
00000
0000
010
011
000
010110
16
01B201
00000
0011
011
001
000
000001
17
002418
00000
0000
010
011
000
011000
18
02B201
00000
0101
011
001
000
000001
1B
005341
00000
0000
101
001
101
000001
1C
10101D
00010
0000
001
000
000
011101
1D
10608C
00010
0000
110
000
010
001100
1E
10601F
00010
0000
110
000
000
011111
1F
101020
00010
0000
001
000
000
100000
20
10608C
00010
0000
110
000
010
001100
28
101029
00010
0000
001
000
000
101001
29
00282A
00000
0000
010
100
000
101010
2A
04E22B
00000
1001
110
001
000
101011
2B
04928C
00000
1001
001
001
010
001100
2C
10102D
00010
0000
001
000
000
101101
2D
002C2E
00000
0000
010
110
000
101110
2E
04E22F
00000
1001
110
001
000
101111
2F
04928C
00000
1001
001
001
010
001100
30
001604
00000
0000
001
011
000
000100
31
001606
00000
0000
001
011
000
000110
32
006D48
00000
0000
110
110
101
001000
33
006D4A
00000
0000
110
110
101
001010
34
003401
00000
0000
011
010
000
000001
35
000035
00000
0000
000
000
000
110101
36
006D51
00000
0000
110
110
101
010001
37
001612
00000
0000
001
011
000
010010
38
001613
00000
0000
001
011
000
010011
39
001615
00000
0000
001
011
000
010101
3A
001617
00000
0000
001
011
000
010111
3B
000001
00000
0000
000
000
000
000001
3C
006D5C
00000
0000
110
110
101
011100
3D
006D5E
00000
0000
110
110
101
011110
3E
006D68
00000
0000
110
110
101
101000
3F
006D6C
00000
0000
110
110
101
101100
根据现有指令,在模型机上实现以下运算:
从IN单元读入一个数据,根据读入数据的低4位值X,求1+2+…+X的累加和,01H到0FH共15个数据存于60H到6EH单元。
根据要求可以得到如下程序,地址和内容均为二进制数。
地址内容助记符说明
0000000000100000;START:
INR0,00H从IN单元读入计数初值
0000000100000000
0000001001100001;LDIR1,0FH立即数0FH送R1
0000001100001111
0000010000010100;ANDR0,R1得到R0低四位
0000010101100001;LDIR1,00H装入和初值00H
0000011000000000
0000011111110000;BZCRESULT计数值为0则跳转
0000100000010110
0000100101100010;LDIR2,60H读入数据始地址
0000101001100000
0000101111001011;LOOP:
LADR3,[RI],00H从MEM读入数据送R3,
变址寻址,偏移量为00H
0000110000000000
0000110100001101;ADDR1,R3累加求和
0000111001110010;INCRI变址寄存加1,指向下一数据
0000111101100011;LDIR3,01H装入比较值
0001000000000001
0001000110001100;SUBR0,R3
0001001011110000;BZCRESULT相减为0,表示求和完毕
0001001100010110
0001010011100000;JMPLOOP未完则继续
0001010100001011
0001011011010001;RESULT:
STA70H,R1和存于MEM的70H单元
0001011101110000
0001100000110100;OUT40H,R1和在OUT单元显示
0001100101000000
0001101011100000;JMPSTART跳转至START
0001101100000000
0001110001010000;HLT停机
0110000000000001;数据
0110000100000010
0110001000000011
0110001100000100
0110010000000101
0110010100000110
0110011000000111
0110011100001000
0110100000001001
0110100100001010
0110101000001011
0110101100001100
0110110000001101
0110110100001110
0110111000001111
5.3.5实验步骤
1.按图5-3-6连接实验线路,仔细检查接线后打开实验箱电源。
2.写入实验程序,并进行校验,分两种方式,手动写入和联机写入。
1)手动写入和校验
(1)手动写入微程序
将时序与操作台单元的开关KK1置为‘停止’档,KK3置为‘编程’档,KK4置为‘控存’档,KK5置为‘置数’档。
使用CON单元的SD05——SD00给出微地址,IN单元给出低8位应写入的数据,连续两次按动时序与操作台的开关ST,将IN单元的数据写到该单元的低8位。
将时序与操作台单元的开关KK5置为‘加1’档。
IN单元给出中8位应写入的数据,连续两次按动时序与操作台的开关ST,将IN单元的数据写到该单元的中8位。
IN单元给出高8位应写入的数据,连续两次按动时序与操作台的开关ST,将IN单元的数据写到该单元的高8位。
重复
、
、
、
四步,将表5-3-5的微代码写入2816芯片中。
(2)手动校验微程序
将时序与操作台单元的开关KK1置为‘停止’档,KK3置为‘校验’档,KK4置为‘控存’档,KK5置为‘置数’档。
使用CON单元的SD05——SD00给出微地址,连续两次按动时序与操作台的开关ST,MC单元的指数据指示灯M7——M0显示该单元的低8位。
将时序与操作台单元的开关KK5置为‘加1’档。
连续两次按动时序与操作台的开关ST,MC单元的指数据指示灯M15——M8显示该单元的中8位,MC单元的指数据指示灯M23——M16显示该单元的高8位。
重复
、
、
、
四步,完成对微代码的校验。
如果校验出微代码写入错误,重新写入、校验,直至确认微指令的输入无误为止。
(1)手动写入机器程序
将时序与操作台单元的开关KK1置为‘停止’档,KK3置为‘编程’档,KK4置为‘主存’档,KK5置为‘置数’档。
使用CON单元的SD7——SD0给出地址,IN单元给出该单元应写入的数据,连续两次按动时序与操作台的开关ST,将IN单元的数据写到该存储器单元。
将时序与操作台单元的开关KK5置为‘加1’档。
IN单元给出下一地址(地址自动加1)应写入的数据,连续两次按动时序与操作台的开关ST,将IN单元的数据写到该单元中。
然后地址会又自加1,只需在IN单元输入后续地址的数据,连续两次按动时序与操作台的开关ST,即可完成对该单元的写入。
亦可重复
、
两步,将所有机器指令写入主存芯片中。
(2)手动校验机器程序
将时序与操作台单元的开关KK1置为‘停止’档,KK3置为‘校验’档,KK4置为‘主存’档,KK5置为‘置数’档。
使用CON单元的SD7——SD0给出地址,连续两次按动时序与操作台的开关ST,CPU内总线的指数据指示灯D7——D0显示该单元的数据。
将时序与操作台单元的开关KK5置为‘加1’档。
连续两次按动时序与操作台的开关ST,地址自动加1,CPU内总线的指数据指示灯D7——D0显示该单元的数据。
此后每两次按动时序与操作台的开关ST,地址自动加1,CPU内总线的指数据指示灯D7——D0显示该单元的数据,继续进行该操作,直至完成校验,如发现错误,则返回写入,然后校验,直至确认输入的所有指令准确无误。
亦可重复
、
两步,完成对指令码的校验。
如果校验出指令码写入错误,重新写入、校验,直至确认指令的输入无误为止。
2)联机写入和校验
联机软件提供了微程序和机器程序下载功能,以代替手动读写微程序和机器程序,但是微程序和机器程序得以指定的格式写入到以TXT为后缀的文件中,本次实验程序如下,程序中分号‘;’为注释符,分号后面的内容在下载时将被忽略掉。
图5-3-6实验接线图
;//***************************************//
;////
;//复杂模型机实验指令文件//
;////
;//ByTangDuCO.,LTD//
;////
;//***************************************//
;//******StartOfMainMemoryData******//
$P0020;START:
INR0,00H从IN单元读入计数初值
$P0100
$P0261;LDIR1,0FH立即数0FH送R1
$P030F
$P0414;ANDR0,R1得到R0低四位
$P0561;LDIR1,00H装入和初值00H
$P0600
$P07F0;BZCRESULT计数值为0则跳转
$P0816
$P0962;LDIR2,60H读入数据始地址
$P0A60
$P0BCB;LOOP:
LADR3,[RI],00H从MEM读入数据送R3,
变址寻址,偏移量为00H
$P0C00
$P0D0D;ADDR1,R3累加求和
$P0E72;INCRI变址寄存加1,指向下一数据
$P0F63;LDIR3,01H装入比较值
$P1001
$P118C;SUBR0,R3
$P12F0;BZCRESULT相减为0,表示求和完毕
$P1316
$P14E0;JMPLOOP未完则继续
$P150B
$P16D1;RESULT:
STA70H,R1和存于MEM的70H单元
$P1770
$P1834;OUT40H,R1和在OUT单元显示
$P1940
$P1AE0;JMPSTART跳转至START
$P1B00
$P1C50;HLT停机
$P6001;数据
$P6102
$P6203
$P6304
$P6405
$P6506
$P6607
$P6708
$P6809
$P690A
$P6A0B
$P6B0C
$P6C0D
$P6D0E
$P6E0F
;//*****EndOfMainMemoryData*****//
;//**StartOfMicroControllerData**//
$M00000001;NOP
$M01006D43;PC->AR,PC加1
$M03107070;MEM->IR,P<1>
$M04002405;RS->B
$M0504B201;A加B->RD
$M06002407;RS->B
$M07013201;A与B->RD
$M08106009;MEM->AR
$M09183001;IO->RD
$M0A106010;MEM->AR
$M0B000001;NOP
$M0C103001;MEM->RD
$M0D200601;RD->MEM
$M0E005341;A->PC
$M0F0000CB;NOP,P<3>
$M10280401;RS->IO
$M11103001;MEM->RD
$M1206B201;A加1->RD
$M13002414;RS->B
$M1405B201;A减B->RD
$M15002416;RS->B
$M1601B201;A或B->RD
$M17002418;RS->B
$M1802B201;A右环移->RD
$M1B005341;A->PC
$M1C10101D;MEM->A
$M1D10608C;MEM->AR,P<2>
$M1E10601F;MEM->AR
$M1F101020;MEM->A
$M2010608C;MEM->AR,P<2>
$M28101029;MEM->A
$M2900282A;RI->B
$M2A04E22B;A加B->AR
$M2B04928C;A加B->A,P<2>
$M2C10102D;MEM->A
$M2D002C2E;PC->B
$M2E04E22F;A加B->AR
$M2F04928C;A加B->A,P<2>
$M30001604;RD->A
$M31001606;RD->A
$M32006D48;PC->AR,PC加1
$M33006D4A;PC->AR,PC加1
$M34003401;RS->RD