计算机组成原理——课程设计

简介: 1. 把用绝对地址表示的内存单元ADDR2中的内容与内存单元ADDR1中的内容相减,结果存于内存单元ADDR1中。2.把用绝对地址表示的内存单元ADDR2中的内容传送至地址为ADDR1的内存单元中保存。3.转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定目的地址,否则顺序执行。指令格式:E5 DR SR,DISP 双字指令(控存入口140H, DISP为相对转移地址偏移量)...

 《计算机组成原理》

课程设计

一、目的和要求

深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。

二、实验环境

1.    TEC-2机一台

2.    电脑一台

3.    TEC-2模拟软件一套

三、具体内容

1.分析TEC-2机的功能部件组成,分析TEC-2机支持的指令格式等。

(一)AM2901芯片的内部结构和芯片的引脚信号

AM2901是位片结构,每片内仅有4位线路,内部组成包括:

1.4位的ALU,可以实现8种运算功能,每一位上的2个输入端数据分别用R和S表示,8种功能分别是R+S,S-R,R-S 3种算术运算,R∧S,R∨S,/R∧S,R⊕S,R⊙S 5种逻辑运算。这8种功能的选择控制,用外部送入的3位编码值I5~3实现的。ALU还有Cn+4、F、OVR、和F=0000 4位状态信息,并能接收最低位的一个进位输入信号Cn,ALU还给出了超前进位信号/G和/P。

2.16个4位的通用寄存器组,用R0-R15表示,和一个4位的Q寄存器。通用寄存器组为双端口读出和单端口控制写入的运行方式,而且运算后的结果经一个移位器实现写入。Q寄存器本身具有左、右移位功能且能接收ALU的运算结果。左右移位时,就有移出、移入信号RAM3、RAM0、Q3、Q0 4个信号。

3.该信片能接收外部送入的4位数据D3-0,并输出4位的数据Y3-0。Y3-0可以是通用寄存器A端口上的输出或ALU的运算结果F,并且输出允许控制信号/OE的控制,尽在/OE为低时,Y3-0才有输出。

4.ALU的两个输入端R和S分别可以接收D输入、A端口或逻辑0数据,和A端口、B端口、Q寄存器或逻辑0数据。AM2901器件选用了12种组合的8种,即A_Q,A_B,O_Q,0_B,0_A,D_A,D_Q和D_0 8种组合,并用外部送来的3位控制码I2-0选择。

5.AM2901采用另外3位外部送来的控制信号I8-6,一是选择向外部送出的数据的来源,二是选择内部的通用寄存器组和Q寄存器是否接收和如何接收数据写入。

6.在AM2901芯片内有16个通用寄存器R0-R15,R0-R3、R7-R15共13个寄存器作为通用寄存器供用户使用,R4-R63个寄存器分别作为SP、PC、IP。正常情况下,不能把这3个寄存器当作通用寄存器使用。

(二)AM2901芯片引脚信号

1.D3-D0:外部送给AM2901的数据信号

2.Y3-Y0:AM2901向外送出的数据信号

3.A、B地址:选择通用寄存器组种的源与目的寄存器,当A和B同值时,被选中的同一个寄存器中的内容将被同时送到A、B两个数据输出端口。

4.I8-I0:外部送来的3组3位控制信号,分别选择AM2901对数据结果的处理方案、ALU执行的运算功能、ALU接收的操作数来源。

(三)TEC-2机的控制器组成

指令寄存器IR:用于存放当前正在执行的指令内容。

程序计数器PC:PC是用运算器通用寄存器组中的寄存器R5实现的,程序计数器PC用于存放内存单元地址,

指令指针寄存器IP:IP是用运算器通用寄存器组中的寄存器R6实现的,IP用于存放当前正在执行的机器指令其指令代码所在的内存单元地址。

7片LS6116随机读写的存储器芯片组成的56位字长的微程序控制存储器,用于存放TEC-2机的微程序。其内容在刚加电时不定,加电后将首先从2片ROM中读出固化的、用于实现53条机器指令的微程序,稍加组织后写入这一控制存储器,这一过程称为装入微码。装入完成后,将从监控程序的零地址执行指令,完成TEC-2机的启动过程。之后,可以用LDMC指令向控制存储器写入新的微程序,实现新的机器指令。

微指令寄存器PLR由7片8位的寄存器芯片(6片LS374和1片LS273)组成,用于存放当前微指令的内容。

(四)为AM2910提供输入地址信号的配套线路

由两片LS2716ROM芯片组成的MAPROM,它可以将指令寄存器中的操作码变为一段微程序的入口地址。

由1片LS125和LS244组成的接受内部总线的IB9-0信号的选择门电路,把由水平板上的开关提供的微指令地址送入AM2910的地址输入端。

由1片LS125和微指令寄存器的PLR55-48组成的一组地址输入,把当前微指令中的后续地址B55-46送入AM2910的地址输入端。

这三组信号均为10位宽,且为互斥关系,分别由/MAP、/VECT和/PL加以选通。

(五)AM2910芯片

1.功能:正确形成下一条微指令的地址,以保证微程序正确、高效地执行。

2.组成:AM291包括一个四输入的多路地址选择器,用来选择寄存器/计数器(R),直接输入(D),微程序计数器(μPC)或微堆栈(F)中的一个作为下一条微指令的地址。

3.寄存器/计数器由12个D型触发器组成。当它用作寄存器时,主要用于保存一个微地址,用以实现微程序分支;当它用作计数器时,具有减一功能,主要用于控制微程序的循环次数,若装入的初值为N,则可执行N+1次。

4.微程序计数器由12位增量器和12位寄存器组成。 当增量器的进位输入C1为高电平时,多路器的输出Y加1后装入μPC,用于实现微程序的顺序执行;当C1为低电平时,多路器的输出Y直接装入μPC,用于实现同一条微指令的多次执行。

5.微堆栈是由5字×12位的寄存器堆和微堆栈指针μSP组成,主要用于保存微子程序调用的返回地址和微程序循环的首地址。微堆栈指针μSP总是指向最后一次压入的数据。因此,执行微程序循环时,允许不执行弹出操作而直接访问微堆栈的栈顶。当堆栈中的数据达到5个时,发出堆栈已满信号(/FULL=0)。这时,任何压入操作都将覆盖掉栈顶的数据。

(六)微指令格式

每条微指令由56位组成,从高到低各位标记为B55-B0,分为13个字段。

B55-B46的10位微码是下地址字段;

B55,B44备用;

B43-B40位CI3-1,用于给出AM2910芯片的16中命令码的编号;

B39-37、36分别为3位的SCC和1位的SC,给出AM2910芯片的条件判断信号/CC的选择码,用于保证微指令的条件转移等;

B35位备用;

B34-32位SST,控制标志寄存器的写入;

B31、B27、B23位为/MI0,REQ和/WE,用于控制内存的读写、外设接口的读写,以及微码的装入。

B30-B28位为MI8-6,用于选择运算结果存入的寄存器,以及Y输出的选择;

B26-B24位为MI5-3,用于选择进行何种算术或逻辑运算;

B22-B20位为MI2-0,用于选择R和S端的数据输入;

B19-B16位为A口地址;

B15-B12位为B口地址;

B11-B10位为SCi,控制最低位进位;

B9-B8位为SSH,形成移位信号;

B7位为A口地址选通信号;

B6-B4位为DC1,控制向IB总线的发送内容;

B3位为B口选通地址;

B2-B0位为DC2,选择接收的寄存器。

(七)自行设计新指令的微程序段

MEM的内容是当前地址寄存器AR所存的地址单元的内容。

寄存器Q的内容可以是立即数,也可以是地址。

11条未定义的机器指令的6位操作码已定,最低两位可用于选择C、Z、V、S四个标志位作为判别条件。

11条未定义的机器指令具有对应的微程序段的入口地址,如D4对应的是100H,D8对应的是110H。

装入新指令的微码有两种方法,一是通过水平板上的开关与按键直接拨入,二是在程序中用LDMC指令实现自动装入。

新指令在每次TEC-2机重新加电后,至少得重新装入一次对应的微码;仅在装入相应微码后,新指令才能执行。

2.使用TEC-2仿真软件进行微指令级的设计和调试,完成微程序控制的特定功能计算机的指令设计。

选定指令格式、操作码,设计如下指令:

image.gif编辑

基于上图进行下列指令说明:

例:

image.gif编辑

2.1

    1. 把用绝对地址表示的内存单元ADDR2中的内容与内存单元ADDR1中的内容相减,结果存于内存单元ADDR1中。

    指令格式:D8××,ADDR1,ADDR2,   三字指令(控存入口110H)

    功能:    [ADDR1]=[ADDR2] -[ADDR1]

    画出微指令流程图

    image.gif编辑

    微指令详细设计:

    PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第1个操作数的地址做准备

    MEM -> AR, MEM->R7:  0000 0E00 30F0 7002   将指令地址送AR(ADDR1),R7寄存器

    MEM->Q:              0000 0E00 00F0 0000   将内存单元中的数据送入Q寄存器

    PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第2个操作数的地址做准备

    MEM->AR:             0000 0E00 10F0 0002   将指令地址送AR(ADDR2)

    MEM-Q->Q:             0000 0E01 02E0 0000   ADDR2-ADDR1=ADDDR1

    R7->AR:              0000 0E00 9047 0002   把ADDR1的地址R7送入AR中

    Q→MEM,CC#=0,3#,A4H:  0029 0300 1020 0010   将结果送入ADDR1中

    pc指向addr2之后,如何把计算的结果值重新送回addr1。先把addr1的地址保存在R7寄存器中。要存入结果的时候,把R7中的内容送到AR中。

      1. PC→AR,PC+1→PC:0000  0E00  A0B5  5402

      0   0    0    E    0    0    A     0    B    5    5    4     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      1 010

      0 000

      1 011

      0101

      0101

      0100

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                          不操作

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R5 ,即程序计数器 PC

      A 口:使用了寄存器 R5 ,即程序计数器 PC

      MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 B

      MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

      BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 A

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC      未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (2)  MEM -> AR, MEM->R7:0000 0E00 30F0 7002

      0   0    0    E    0    0    3     0    F    0    7    0     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      0 011

      0 000

      1 111

      0000

      0111

      0000

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                          存储器读

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R7 ,即程序计数器 PC

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

      MI5-3 :运算功能选择为“ +S ”,即执行 D+0

      BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC      未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (3)  MEM→Q:0000 0E00 00F0 0000

      0   0    0    E    0    0    0     0    F    0    0    0     0    0

      0000

      0000

      0000

      1110

      000 0

      0 000

      0 000

      0 000

      1 111

      0000

      0000

      0000

      0 000

      0 000

      下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

      MI5-3 :运算功能选择为“ +S ”,即执行 D+0

      BI8-6 :有返回值 0 ,而 Y 的输出选择为 F   ,故此处为 000

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为读出内存单元内容,并将其送入 Q 寄存器,故取 001

      SST :未用状态,故为 000

      备用位为 0

      SC     未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (4)  PC→AR,PC+1→PC:0000 0E00 A0B5 5402

      与第一条指令相同

      (5)  MEM→AR:0000 0E00 10F0 0002

      0   0    0    E    0    0    1     0    F    0    0    0     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      0 001

      0 000

      1 111

      0000

      0000

      0000

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

      MI5-3 :运算功能选择为“ +S ”,即执行 D+0

      BI8-6 :没有返回值,  Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为存储器读,故取 001

      SST :未用状态,故为 000

      备用位为 0

      SC    未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (6)  MEM-Q->Q:   0000 0E01 02E0 0000

      0   0    0    E    0    1    0     2    E    0    0    0     0    0

      0000

      0000

      0000

      1110

      000 0

      0 001

      0 000

      0 010

      1 111

      0000

      0000

      0000

      0 000

      0 000

      下地址         顺序执行 SCC SC  备用SST  F->B    S-R     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 Q

      MI5-3 :运算功能选择为“ S-R ”,即执行 Q-D

      BI8-6 :有返回值 0 ,而 Y 的输出选择为 F   ,故此处为 000

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为读出内存单元内容,将其与 Q 寄存器中内容相加,故取 001

      SST :状态保存,故为 001

      备用位为 0

      SC      未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (7)   R7->AR: 0000 0E00 9047 0002

      0   0    0    E    0    0    9     0    4    7    0    0     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      1 001

      0 000

      0 100

      0111

      0000

      0000

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R7 ,即程序计数器 PC

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 A

      MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

      BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC      未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (8)  Q→MEM,CC#=0, 3#, A4H:0029 0300 1020 0010

      2   9    0    3    0    0    1     0    2    0    0    0     1    0

      0010

      1001

      0000

      0011

      000 0

      0 000

      0 001

      0 000

      0 010

      0000

      0000

      0000

      0 001

      0 000

      下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,,寄存器未接收,故 DC2 为 000

      DC1 :向 IB 总线发送运算器的指令,故 DC1 为 001

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 Q

      MI5-3 :运算功能选择为“ +S ”,即执行 0+Q

      BI8-6 :没有返回值, Y 的输出选择为 F

      MI0# , REQ , WE# :用于控制内外数据总线的读和写,此处为将 Q 寄存器中值写入内存单元,故取 000

      SST :未用状态,故为 000

      备用位为 0

      SC    此处低电平有效,故取 SCC 为 000 , SC 为 0

      SCC

      Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

      下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

      2.2

      (2)把用绝对地址表示的内存单元ADDR2中的内容传送至地址为ADDR1的内存单元中保存。

      指令格式:E0××,ADDR1,ADDR2,三字指令(控存入口130H)

      功能:    [ADDR1]←[ADDR2]

      画出微指令流程图

      image.gif编辑

      微指令详细设计:

      PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第1个操作数的地址做准备

      MEM -> AR, MEM->R7:  0000 0E00 30F0 7002   将指令地址送AR(ADDR1),R7寄存器

      PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第2个操作数的地址做准备

      MEM->AR:             0000 0E00 10F0 0002   将指令地址送AR(ADDR2)

      MEM->Q:               0000 0E00 00F0 0000   将内存单元中的数据送入Q寄存器

      R7->AR:              0000 0E00 9047 0002   把ADDR1的地址R7送入AR中

      Q→MEM,CC#=0,3#,A4H:  0029 0300 1020 0010   将结果送入ADDR1中

      (1)  PC→AR,PC+1→PC:0000  0E00  A0B5  5402

      0   0    0    E    0    0    A     0    B    5    5    4     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      1 010

      0 000

      1 011

      0101

      0101

      0100

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      不操作

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R5 ,即程序计数器 PC

      A 口:使用了寄存器 R5 ,即程序计数器 PC

      MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 B

      MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

      BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 A

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC      未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (2)  MEM -> AR, MEM->R7:0000 0E00 30F0 7002

      0   0    0    E    0    0    3     0    F    0    7    0     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      0 011

      0 000

      1 111

      0000

      0111

      0000

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                    存储器读

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R7 ,即程序计数器 PC

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

      MI5-3 :运算功能选择为“ +S ”,即执行 D+0

      BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC      未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (3)  PC→AR,PC+1→PC:0000 0E00 A0B5 5402

      与第一条指令相同

      (4)  MEM→AR:0000 0E00 10F0 0002

      0   0    0    E    0    0    1     0    F    0    0    0     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      0 001

      0 000

      1 111

      0000

      0000

      0000

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

      MI5-3 :运算功能选择为“ +S ”,即执行 D+0

      BI8-6 :没有返回值,  Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为存储器读,故取 001

      SST :未用状态,故为 000

      备用位为 0

      SC    未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (5)  MEM→Q:0000 0E00 00F0 0000

      0   0    0    E    0    0    0     0    F    0    0    0     0    0

      0000

      0000

      0000

      1110

      000 0

      0 000

      0 000

      0 000

      1 111

      0000

      0000

      0000

      0 000

      0 000

      下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

      MI5-3 :运算功能选择为“ +S ”,即执行 D+0

      BI8-6 :有返回值 0 ,而 Y 的输出选择为 F   ,故此处为 000

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为读出内存单元内容,并将其送入 Q 寄存器,故取 001

      SST :未用状态,故为 000

      备用位为 0

      SC     未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (6)   R7->AR: 0000 0E00 9047 0002

      0   0    0    E    0    0    9     0    4    7    0    0     0    2

      0000

      0000

      0000

      1110

      000 0

      0 000

      1 001

      0 000

      0 100

      0111

      0000

      0000

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R7 ,即程序计数器 PC

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 A

      MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

      BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC      未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (7)  Q→MEM,CC#=0, 3#, A4H:0029 0300 1020 0010

      2   9    0    3    0    0    1     0    2    0    0    0     1    0

      0010

      1001

      0000

      0011

      000 0

      0 000

      0 001

      0 000

      0 010

      0000

      0000

      0000

      0 001

      0 000

      下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,,寄存器未接收,故 DC2 为 000

      DC1 :向 IB 总线发送运算器的指令,故 DC1 为 001

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 Q

      MI5-3 :运算功能选择为“ +S ”,即执行 0+Q

      BI8-6 :没有返回值, Y 的输出选择为 F

      MI0# , REQ , WE# :用于控制内外数据总线的读和写,此处为将 Q 寄存器中值写入内存单元,故取 000

      SST :未用状态,故为 000

      备用位为 0

      SC    此处低电平有效,故取 SCC 为 000 , SC 为 0

      SCC

      Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

      下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

      2.3

      (3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定目的地址,否则顺序执行。

      指令格式:E5 DR SR,DISP 双字指令(控存入口140H,  DISP为相对转移地址偏移量)

      功能:    if  DR=SR goto  IP+DISP  else 顺序执行。

      画出微指令流程图

      image.gif编辑

      微指令详细设计:

      SR-DR:    0000 0E01 9190 0088   两者相减,若相等CC#=Z=1

      PC→AR,PC+1→PC,CC#=CND:     0029 03E0 A0B5 5402  判断相等,相等跳转IP+DISP,否则顺序执行。

      MEM+R6→PC:    0029 03E0 20D6 5000  :把一个内存赋值

      (1)  SR-DR:    0000 0E01 9190 0088

      0   0    0    E    0    1    9     1    9    0    0    0     8    8

      0000

      0000

      0000

      1110

      000 0

      0 001

      1 001

      0 001

      1 001

      0000

      0000

      0000

      1 000

      1 000

      下地址         顺序执行 SCC SC  备用SST  无       S-R    MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :用指令给 ALU 的 R 端赋值,故为 1

      SB :用指令给 ALU 的 S 端赋值,故为 1

      SSH :未移位

      SCI :未进位

      B 口:未使用寄存器,故为 0

      A 口:未使用寄存器,故为 0

      MI2-0 :此时 ALU 的 R 端输入为 A , S 端输入为 B

      MI5-3 :运算功能选择为“ S-R ”,即执行 SR-DR

      BI8-6 :没有返回值, Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不进行任何操作,故取 10X

      SST :状态保存,故为 001

      备用位为 0

      SC    未用条件码,故为 0

      SCC

      Am2901 命令: 14# 命令,即为顺序执行

      下地址:由于顺序执行,并未使用下地址,故下地址为 0

      (2)  PC→AR,PC+1→PC,CC#=CND:     0029 03E0 A0B5 5402

      2   9    0    3    E    0    A     0    B    5    5    4     0    2

      0010

      1001

      0000

      0011

      111 0

      0 000

      1 010

      0 000

      1 011

      0101

      0101

      0100

      0 000

      0 010

      下地址         顺序执行 SCC SC  备用SST  F->B     +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                      存储器读

      DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R5 ,即程序计数器 PC

      A 口:使用了寄存器 R5 ,即程序计数器 PC

      MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 B

      MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

      BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 A

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC    此处根据 SR-DR 数值是否为 0 判断 SR 与 DR 是否相等,条件是由指令给出的,所以这里 SCC

      SCC   为 111 ,而 CC 低电平有效,故 SC 为 0,

      Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

      下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

      (3)  MEM+R6→PC:    0029 03E0 20D6 5000

      2   9    0    3    E    0    2     0    D    6    5    0     0    0

      0010

      1001

      0000

      0011

      111 0

      0 000

      0 010

      0 000

      1 101

      0110

      0101

      0000

      0 000

      0 000

      下地址         顺序执行 SCC SC  备用SST  F->B     +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                    存储器读

      DC2 :在本条微码中,,寄存器未接收,故 DC2 为 000

      DC1 :未向 IB 总线发送控制,故 DC1 为 000

      SA :作 Am2901

      SB :作 Am2901

      SSH :未移位

      SCI :未进位

      B 口:使用了寄存器 R5 ,即程序计数器 PC ,故为 0101

      A 口:使用了寄存器 R6 ,即程序计数器 PC

      MI2-0 :此时 ALU 的 R 端输入为 D( 外部数据 ) , S 端输入为 Q

      MI5-3 :运算功能选择为“ +S ”,即执行 D+0

      BI8-6 :有返回值,且返回值返回至 Q ,而 Y 的输出选择为 F

      MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

      SST :未用状态,故为 000

      备用位为 0

      SC    此处根据 SR-DR 数值是否为 0 判断 SR 与 DR 是否相等,条件是由指令给出的,所以这里 SCC

      SCC   为 111 ,而 CC 低电平有效,故 SC 为 0,

      Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

      下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

      3.测试程序设计及调试。

      3.1

      选定指令操作码,指令格式,设计一条指令,其功能是把用绝对地址表示的内存单元B中的内容减去内存单元A中的内容相加,结果存放在A单元中。

      把用绝对地址表示的内存单元ADDR2中的内容与内存单元ADDR1中的内容相减,结果存于内存单元ADDR1中。

      指令格式:D8××,ADDR1,ADDR2,   三字指令(控存入口110H)

      功能:    [ADDR1]=[ADDR2] -[ADDR1]

      (1)用“E”命令输入微码

      在命令行提示符状态下输入:

      E900

      屏幕上将显示:

      0900:

      之后继续输入:

      0000 0E00 A0B5 5402

      0000 0E00 30F0 7002

      0000 0E00 00F0 0000

      0000 0E00 A0B5 5402

      0000 0E00 10F0 0002

      0000 0E01 02E0 0000

      0000 0E00 9047 0002

      0029 0300 1020 0010

      (2)用“A”命令输入加载微码的程序

      在命令行提示符状态下输入:

      A800

      屏幕将显示:

      0800:

      之后继续输入:

      MOV R1,900   ;微码在内存中的首地址

      MOV R2,8      ;共8条指令

      MOV R3,110   ;微码在微控存中的首地址

      LDMC         ;加载微码指令

      RET

      (3)用“G”命令运行加载微码的程序

      在命令行提示符状态下输入:

      G800

      (4)用“A”命令输入程序

      在命令行提示符状态下输入:

      A820

      屏幕将显示:

      0820

      之后继续输入:

      MOV R0,0015

      MOV [A00],R0

      MOV R0,0046

      MOV [A01],R0

      NOP

      NOP

      NOP

      RET

      (5)用“E”命令输入新指令

      在命令行提示符状态下输入:

      E828

      屏幕将显示:

      0828

      之后继续输入:

      D800 0A00 0A01

      (6)用“G”命令运行程序

      在命令行提示符状态下输入:

      G820

      (7)用“D”命令察看运行结果

      在命令行提示符状态下输入:

      DA00

      以下为检验过后的截图:

      image.gif编辑

      image.gif编辑

      分析:将立即数0015存入内存单元0A00(ADDR1),将立即数0046存入内存单元0A01(ADDR2);0046-0015=0031即(ADDR2-ADDR1),利用R7所存内存单元地址0A00,使结果存入了0A00,即(ADDR2-ADDR1=ADDR1)。验证所写微程序正确。

      3.2

      选定指令操作码,指令格式,设计一条指令,其功能是把用绝对地址表示的内存单元B中的内容存放在A单元中。

      把用绝对地址表示的内存单元ADDR2中的内容传送至地址为ADDR1的内存单元中保存。

      指令格式:E0××,ADDR1,ADDR2,三字指令(控存入口130H)

      功能:    [ADDR1]←[ADDR2]

      (1)用“E”命令输入微码

      在命令行提示符状态下输入:

      E900

      屏幕上将显示:

      0900:

      之后继续输入:

      0000 0E00 A0B5 5402

      0000 0E00 30F0 7002

      0000 0E00 A0B5 5402

      0000 0E00 10F0 0002

      0000 0E00 00F0 0000

      0000 0E00 9047 0002

      0029 0300 1020 0010

      (2)用“A”命令输入加载微码的程序

      在命令行提示符状态下输入:

      A800

      屏幕将显示:

      0800:

      之后继续输入:

      MOV R1,900   ;微码在内存中的首地址

      MOV R2,7      ;共7条指令

      MOV R3,130   ;微码在微控存中的首地址

      LDMC         ;加载微码指令

      RET

      (3)用“G”命令运行加载微码的程序

      在命令行提示符状态下输入:

      G800

      (4)用“A”命令输入程序

      在命令行提示符状态下输入:

      A820

      屏幕将显示:

      0820

      之后继续输入:

      MOV R0,0015

      MOV [A00],R0

      MOV R0,0046

      MOV [A01],R0

      NOP

      NOP

      NOP

      RET

      (5)用“E”命令输入新指令

      在命令行提示符状态下输入:

      E828

      屏幕将显示:

      0828

      之后继续输入:

      E010 0A00 0A01

      (6)用“G”命令运行程序

      在命令行提示符状态下输入:

      G820

      (7)用“D”命令察看运行结果

      在命令行提示符状态下输入:

      DA00

      image.gif编辑

      image.gif编辑

      image.gif编辑

      分析:与上题相似,将立即数0015存入内存单元0A00(ADDR1),将立即数0046存入内存单元0A01(ADDR2);利用R7所存内存单元地址0A00,将0A01的内容存入了0A00,即(ADDR2-)ADDR1)。验证所写微程序正确。

      3.3

      (3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定目的地址,否则顺序执行。

      指令格式:E5 DR SR,DISP 双字指令(控存入口140H,  DISP为相对转移地址偏移量)

      功能:    if  DR=SR goto  IP+DISP  else 顺序执行。

      DR!=SR不相等情况时:

      用“E”命令输入微码

      在命令行提示符状态下输入:

      E900

      屏幕上将显示:

      0900:

      之后继续输入:

      0000 0E01 9190 0088

      0029 03E0 A0B5 5402

      0029 03E0 20D6 5000

      在命令行提示符状态下输入:

      A800

      屏幕将显示:

      0800:

      之后继续输入:

      MOV R1,900   ;微码在内存中的首地址

      MOV R2,3      ;共7条指令

      MOV R3,140   ;微码在微控存中的首地址

      LDMC         ;加载微码指令

      RET

      (3)用“G”命令运行加载微码的程序

      在命令行提示符状态下输入:

      G800

      (4)用“A”命令输入程序

      在命令行提示符状态下输入:

      A820

      屏幕将显示:

      0820

      之后继续输入:

      MOV R1,0023

      MOV R2,0026

      NOP

      NOP

      MOV R1,0026

      RET

      (5)用“E”命令输入新指令

      在命令行提示符状态下输入:

      E824

      屏幕将显示:

      0824

      之后继续输入:

      E512  0828

      (6)用“G”命令运行程序

      在命令行提示符状态下输入:

      G820

      (7)用“R”命令察看运行结果

      在命令行提示符状态下输入:

      R

      image.gif编辑

      image.gif编辑

      image.gif编辑

      分析:DR=SR不相等时,顺序执行。立即数R1=0023与R2=0026不相等,则顺序执行R1=0026

      DR=SR相等情况时:

      用“E”命令输入微码

      在命令行提示符状态下输入:

      E900

      屏幕上将显示:

      0900:

      之后继续输入:

      0000 0E01 9190 0088

      0029 03E0 A0B5 5402

      0029 03E0 20D6 5000

      在命令行提示符状态下输入:

      A800

      屏幕将显示:

      0800:

      之后继续输入:

      MOV R1,900   ;微码在内存中的首地址

      MOV R2,3      ;共7条指令

      MOV R3,140   ;微码在微控存中的首地址

      LDMC         ;加载微码指令

      RET

      (3)用“G”命令运行加载微码的程序

      在命令行提示符状态下输入:

      G800

      (4)用“A”命令输入程序

      在命令行提示符状态下输入:

      A820

      屏幕将显示:

      0820

      之后继续输入:

      MOV R1,0023

      MOV R2,0023

      NOP

      NOP

      MOV R1,0026

      RET

      (5)用“E”命令输入新指令

      在命令行提示符状态下输入:

      E824

      屏幕将显示:

      0824

      之后继续输入:

      E512  0828

      (6)用“G”命令运行程序

      在命令行提示符状态下输入:

      G820

      (7)用“R”命令察看运行结果

      在命令行提示符状态下输入:

      R

      image.gif编辑

      image.gif编辑

      image.gif编辑

      分析:当R1(SR)存储0023H、R2(DR)存储0023H时,即DR=SR时,程序跳转至828H(ADDR),所以未运行MOV R1,0026,所以程序运行后R1仍为0023H。而PC=IP+DISP.

      4.写出自己在小组中承担的任务及发挥的作用。

      一人独立完成

      四.实验心得

         本次课程设计,前面虽然不清楚微程序编写,但是根据实验三微程序的加法以及网上资料和书中的知识,才了解怎样设计指令。

         此次课程设计,通过对TEC-2仿真模拟机进行测试,通过3个微指令编写,更加深入了解了各种指令的执行过程。同时在编写微指令时,也需要了解计算机的汇编语言,所以本次课设,与汇编语言和计算机组成原理相互联系,进而进行更深层次的学习。

         实验相对麻烦,在设计过程中,同学之间进行交流,遇到困难相互解决,有各自的想法。所以本次课设不仅巩固了微程序设计的方法与思想,同时也学习了同学之间的交流以及互相帮助。

      参考资料:

      百度文库-信息提示

      《计算机组成原理》课程设计---微程序设计_山海一念的博客-CSDN博客_计算机组成原理微程序设计

      《计算机组成原理》课程设计报告——TEC-2实验系统——微程序设计_无限迭代中......-CSDN博客

      臭咸鱼的缺氧瓶

      [计算机组成] TEC-2 课程设计 微码说明_ckxkexing的博客-CSDN博客


      相关文章
      |
      存储 固态存储 程序员
      考研计算机组成原理总结(5)
      考研计算机组成原理总结(5)
      693 0
      学习计算机组成原理------第三天
      这篇文章是关于学习计算机组成原理。
      学习计算机组成原理------第三天
      |
      5月前
      |
      存储 知识图谱
      【计算机组成原理】指令系统&考研真题详解之拓展操作码!
      也就是说 “其中三地址指令29”条这句话,完全可以翻译成“三地址这种类型的指令一共能有29种不同的可能性” 这样说就清晰多 因为这就意味着 我们需要用若干个字节 来表示这29种不同的可能性 然后又已知每一个字节位能表示的可能性是2种(0/1),那么我们想有多少个字节可以表示29种不同的可能呢?最少5种 (因为2的4次方=16<29),2^5=32>29,也就是说有32-29=3种可能性是不在三地址指令这种类型的指令集里面的,所以这3 种余出来的可能性要被利用 就在下一种 “二地址指令集”中利用到
      53 0
      |
      6月前
      |
      存储 测试技术
      山东大学计算机组成原理课设 实验四
      第四次实验:2022年4月19日星期四,第7周 第二次部件级实验,算分
      |
      存储 芯片 内存技术
      计算机组成原理常见面试题目总结,含答案
      计算机组成原理常见面试题目总结,含答案
      |
      11月前
      【408计算机组成原理】—计算机基础(一)
      【408计算机组成原理】—计算机基础(一)
      |
      存储 芯片 内存技术
      考研计算机组成原理总结(4)
      考研计算机组成原理总结(4)
      396 0
      考研计算机组成原理总结(4)
      学计算机需要培训班吗?我对计算机培训班的浅谈
      学计算机需要培训班吗?我对计算机培训班的浅谈
      |
      存储 数据处理 调度
      计算机组成原理(1)概论
      1.1.定义 计算机,一种可以存储程序,并且通过执行程序指令,可以自动、高速、精确地对数字信息进行各种复杂处理,然后输出运算结果的电子设备。1.2.发展史 1944年,“冯诺依曼”加入美国军方一个名叫“ENIAC”的计算机研制项目,1945年他提出了一个名叫“存储程序通用电子计算机”的方案——“EDVAC”。该方案中定义了计算机的工作方式以及几大组成部分,后来将该方案中提出的这一套对于计算机的整体架构称为——“冯诺依曼体系”。 1946年参照冯诺依曼体系,在宾夕法尼亚大学诞生了世界上第一台计算机。如今世界上的计算机都是参照冯诺依曼体系进行的实现。
      107 0
      |
      存储 编译器
      考研计算机组成原理总结(8)
      考研计算机组成原理总结(8)
      177 0