TEC-2 机 微程序设计

刚做完这次计组实验,花了我不少时间(QAQ奇怪我竟然认真做了)

实验工具:电脑一台,微指令分析器,TEC-2模拟程序

首先先膜拜下秋怡大神,看完她的这篇博客:http://www.cnblogs.com/joyeecheung/p/3687773.html

你大概会懂哪些指令是干嘛用的(什么都不会的一定要看下)


 

然后我废话一下(其实就是我的实验心得,不一定对,请留言指证)

  这次作业做的超级久...但是最后真的越做越开心,喜欢debug的感觉!(然后就想写写blog什么让大家少走弯路...至少我走了很多弯路)。

因为,有微指令分析器的帮助,其实设计微程序的主要难点就是要了解各种寄存器和控制信号,了解他们的用法;而了解在监控程序中的指令用法,对debug分析问题非常有帮助!!

  这里我强调实验的一点点背景知识:

  1. 指令寄存器IR:指令寄存器IR,用于存放当前正在执行的机器指令的指令代码(该部分包含操作码)。指令的执行就从这里开始。(了解了解,其实没怎么用到,像一些基本常识,微程序是微指令的集合,而一条微指令又是多条微命令组成...都要知道)。

  2. PC(R50101)IP(R60110)PCIP位于运算器的通用寄存器中,在微指令中要用到这两个寄存器。程序计数器PC用于存放内存单元地址,IP用于存放当前正在执行的机器指令其指令代码所在的内存单元地址。操作码唯一标识 机器指令,每条机器指令,都由 若干条微指令来 实现该指令功能。这些微指令都必 须保存在控存中,它的微程序入口地址问题,系统是有规定的。如操作码D4,其入口地址100H; 操作码D8就是110H...

  3.3位的SCC和一位的SC,给出 AM2910芯片的条件判断信号/CC的选择码,用于保证微指令的条件转移等...

  接下来就是实验中的重点知识(你肯定要知道才做的下去):

  1. MEM的内容应该是当前AR(地址寄存器)中存放的地址单元的内容,Y输出的结果会送到IB(内部数据总线)上。寄存器Q里的内容即可是地址,可以是立即数。(我在试验中用到R0来存储PCQ来存储立即数)。

  2. 要想使用指令中操作码部分的数据的话,DR(8位,用SB=1来控制)SR(高8位,用SA=1来控制),此时数据输入端的A,B口未用。

  然后就是我遇到的坑:

  1.第一题中,PC+1之后如何再读取到之前的那条指令的地址呢,对于PC-1我更倾向于用R0把这条PC存储起来。而后来输入微程序的时候,因为直接在监控程序的终端输入很容易出错,我就先把微程序的指令写到记事本中(我也建议你这么做),再复制过去...结果!!!因为其中不小心多了空格还是tab键之类的,就导致有些指令被忽略了...这个会报错,很容易发现。

  2.第二题中,微程序设计的时候,R7放的应该是地址,结果写测试程序的时候放了立即数......Orz查了好久的bug....真的要很清楚你的寄存器中放的到底是地址还是立即数,否则就会出现意想不到的错误!!!

 

 

重点来了:其实微程序设计的方法真的很多,想怎么设计就怎么设计,这里我将提供我第一题的设计方案(摘自我的实验报告):

第一题:

  1. 指令格式

指令格式:

D4

X

X

 

ADDR1

 

ADDR2

 

  2.指令功能

                 [ADDR1] + [ADDR2] → [AADR1]

 

  3.设计分析

    根据指令的功能和指令格式,先将地址单元AADR1保存到R0中,然后读取地址ADDR1单元内容暂时放置于Q寄存器中,然后再读取地址ADDR2单元内容,同时与Q寄存器内容相加,结果也暂存放在Q寄存器中,此时再将IP写入AR中,然后把Q的结果写入到存储器中,即为写到AADR1。此外,微程序中必须实现两次PC+1→PC操作,才能确保PC的正确走向。

  

   4.微程序  

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

      101:MEM→R0: 0000 0E00 30F0 0000

      102:MEM→AR: 0000 0E00 10F0 0002

      103:MEM→Q: 0000 0E00 00F0 0000

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

      105:MEM→AR: 0000 0E00 10F0 0002

      106:MEM+Q→Q: 0000 0E01 00E0 0000

      107:R0→AR: 0000 0E00 90B0 0002

      108:Q→MEM,CC#=0: 0029 0300 1020 0010

 

  5.加载到微控存程序段

    说明:微码存放在900H(或某内存单元)开始的内存单元中(E900)

      >A0800↙

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

0802:MOV R2,9     ;微指令条数

0804:MOV R3,100 ;微码在微控制存储器中的首地址

0806:LDMC     ;加载微码指令,将微码指令加载到微控制存储器中

0807:RET

0808:

     >A0800↙

    并运行加载微码的这段程序:

   >G0800↙

 

   6.运行程序段

  >A0820↙

0820:MOV R0,0011

0822:MOV [0890],R0

0824:MOV [0891],R0

0826:NOP 

0827:NOP

0828:NOP

0829:RET

       >E0826↙

       然后输入以下内容:

   D400 0890 0891

 

  7.运行结果

  >G0820↙

  此时结果是放在内存单元中,此处为ADDR1(0890)中,则应写为:

  >D0891↙

  0890:0022

 

 

第二题:

  1. 指令格式

指令格式:

D4

DR

X

 

ADDR

  2.指令功能

    功能: ([ADDR] + DR)/2 → DR

  3.设计分析

    根据指令的功能和指令格式,先读取DR内容存放在Q寄存器中。然后获取ADDR地址,放到AR中,接下来获取ADDR内容,并和Q寄存器做加法,运算结果左移(/2)并赋给DR

  4.微程序

100: DR + 0→Q: 0000 0E00 80B0 0008

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

102: MEM→AR: 0000 0E00 10F0 0002

103: (MEM + Q) / 2→DR: 0029 0301 50E0 0008

  5.加载到微控存程序段

说明:微码存放在900H(或某内存单元)开始的内存单元中(E900)

   >A0800↙

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

0802:MOV R2,4     ;微指令条数

0804:MOV R3,100 ;微码在微控制存储器中的首地址

0806:LDMC     ;加载微码指令,将微码指令加载到微控制存储器中

0807:RET

0808:

   >A0800↙

并运行加载微码的这段程序:

>G0800↙

  6.运行程序段

>A0820↙

0820:MOV R0,0011

0822:MOV [0890],R0

0824:MOV R7,0011

0826:NOP 

0827:NOP

0828:RET

       >E0826↙

       然后输入以下内容:

D470 0890 

  7.运行结果

>G0820↙

此时结果是放在寄存器中,此处为DR(A=R7)中,则应写为:

>RR7↙

0011:-

 

                  

 

原文地址:https://www.cnblogs.com/zengyh-1900/p/4459904.html