tec2000 16位机微程序控制器指令系统的设计与实现
发布时间:2011-03-12 16:49:52
发布时间:2011-03-12 16:49:52
一、设计题目
16位机微程序控制器指令系统的设计与实现
二、设计目的
通过看懂教学计算机组合逻辑控制器中已经设计好并正常运行的几条基本指令(例如ADD、MVRR、OUT、MVRD、JR、RET等指令)的功能、格式和执行流程,然后自己设计微程序控制器中的29条基本指令和19条扩展指令的功能、格式和执行流程,并在教学计算机上实现、调试正确,达到以下目的:
1、深入理解计算机控制器的功能、组成知识和各类典型指令的执行过程;
2、对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念;
3、学习微程序控制器的设计过程和相关技术。
三、设计说明
控制器设计是学习计算机总体组成和设计的重要的部分。要在TEC—2000教学计算机上完成这项设计,必须清楚懂得:
1、TEC—2000教学机的微程序控制器主要由作为选件的微程序控制器小板和教学机大板上的7片GAL20V8组成。
2、TEC—2000教学机微程序控制器上要实现的全部基本指令和扩展指令的控制信号都是由微程序小板上的7片控制存储器给出的。
3、应了解监控程序的A命令只支持基本指令,扩展指令应用E命令将指令代码写入到相应的存储单元中;不能用T、P命令单步调试扩展指令,只能用G命令执行扩展指令。
4、要明白TEC—2000教学机支持的指令格式及指令执行流程分组情况;理解TEC—2000教学机中已经设计好并正常运行的各类指令的功能、格式、执行流程和控制信号的组成。
5、明确自己要实现的指令格式、功能、执行流程设计中必须遵从的约束条件。
6、为了完成扩展指令的功能、格式和执行流程,并在教学计算机上实现、调试正确的实验内容,具体过程包括:
1)确定指令格式和功能,要受教学机已有硬件的约束,应尽量与已实现指令的格式和分类办法保持一致;
2)划分指令执行步骤并设计每一步的执行功能,设计节拍状态的取值,应参照已实现指令的处理办法来完成,特别要注意的是,读取指令的节拍只能用原来已实现的,其他节拍的节拍状态也应尽可能的与原用节拍的状态保持一致和相近;
3)在指令微程序表中填写每一个控制信号的状态值,注意要特别仔细,并有意识地体会这些信号的控制作用;
4)将设计好的微码,装入控制存储器的相应单元;
5)写一个包含你设计的指令的程序,通过运行该程序检查执行结果的正确性,来初步判断你的设计是否正确;如果有问题,通过几种办法查出错误并改正,继续调试,直到完全正确。
四、设计内容
1、完成微程序控制器指令系统设计,主要内容是由学生自己设计29条基本指令和19条扩展指令的功能、格式和执行流程,并在教学计算机上实现、运行、调试正确。
2、首先看懂TEC—2000教学计算机的功能部件组成和线路逻辑关系,然后分析教学计算机组合逻辑控制器中已经设计好并正常运行的几条典型指令(例如ADD、MVRR、OUT、MVRD、JRC、RET等指令)的功能、格式和执行流程。
3、设计微程序控制器指令系统中各条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确,例如ADC、STC、JRS、JRNS、LDRX、STRX、JMPR、CALR、LDRA等19条扩展指令。
4、单条运行指令,查看指令的功能、格式和执行流程。
5、用监控程序的A、E(扩展指令必须用E命令置入)命令编写一段小程序,观察运行结果。
五、设计要求
(一)分组及任务分配
每组四名同学,任务分配或分工为:
1、仿照教学计算机组合逻辑控制器,设计微程序控制器中基本指令的功能、格式和执行流程,画出29条基本指令的执行流程框图和微程序编码表。(杨赛男同学负责)
2、设计19条扩展指令的功能、格式和执行流程,设计每条微指令各字段的具体编码值,包括控制码的各字段、下址字段、形成下址用到的条件码,画出19条扩展指令的执行流程框图和微程序编码表。(李春萌同学负责)
3、确定微码各字段与控制存储器各个芯片之间的关系,列表写出各控制存储器芯片中存储单元的内容,将设计好的微码装入控制存储器。(覃筱媛同学负责)
4、编写若干个测试程序,包含所有的基本指令和扩展指令,通过运行这些程序可以检查所有指令设计是否正确。(车平同学负责)
最后,所有同学共同参与测试,通过运行测试程序,判断指令设计是否正确。如果有问题,查出错误并改正,继续调试,直到完全正确。
(二)学生应交材料
1、课程设计报告,每组交一份。
2、一块自定义指令系统的微程序控制器板。
3、课程设计日记,每人交一份。
(三)课程设计报告内容
1、题目名称;
2、题目内容;
3、基本指令和扩展指令的执行流程框图;
4、基本指令和扩展指令的微程序编码表;
5、八个控制存储器芯片中各存储单元的内容列表;
6、测试程序;
7、自评(从实现的功能上评价);
8、遇到的问题及解决方案;
9、总结(主要从综合应用知识、分析问题、解决问题方面总结)。
六、进度安排
第1周 周一 上午 课程设计动员
周二 ~ 周五 (1)熟悉汇编、TEC—2000机开发环境
(2)基本指令设计
(3)扩展指令设计
(4)编写调试程序。
第2周 周一 ~ 周五 微指令写入芯片,运行测试程序,调试指令。
第3周 周一 ~ 周三 编写课程设计报告。
周四、周五 验收和答辩总结。
七、课程设计环境
1、硬件环境: PC机一台、TEC—2000实验机一台、微程序控制器实验板一块。
2、软件环境: (1)Win2000、DOS
(2)TEC—2000仿真终端程序PCEC
(3)TEC—2000监控程序。
八、软件设计方案
1.将设计好的微码写入控制存储器。(包括29条基本命令和我组分配到的CLC扩展指令的微码)
一次只对一片28C64控制存储器芯片进行读写,该芯片可插在扩展芯片的高位或低位,若插在高位,输入时信号编码为高八位,低八位补零;若插在低位,输入时信号编码为低八位,高位补零。若一次扩展两片28C64控制器芯片,要注意信号要与产生该信号的芯片相对。
(1) 将扩展新片的内存单元地址置为4000~5FFF,将MAPROM插入扩展芯片的位置,微程序入口地址对应的内存单元的地址为芯片的起始地址和该指令的编码值之和。具体操作如下:
E 4000
4000 00FF:04 00FF:05 00FF:06 00FF:09 00FF:08
00FF:0A 00FF:07 00FF:0B 00FF:0D 00FF:0C
00FF:0E 00FF:0F
E 4041
4041 00FF:11
E 4044
4044 00FF:10 00FF:10 00FF:10 00FF:10
E 406C
406C 00FF:56
4080 00FF:1E 00FF:1B 00FF:12 00FF:19
00FF:15 00FF:15 00FF:12 00FF:17
00FF:1D
E 408C
408C 00FF:17 00FF: 00FF: 00FF: 23
E 40CE
40CE 00FF:1F
(2) 将MPROM1~MPROM7依次插入扩展芯片的位置对其编程,内存单元的地址为芯片的起始地址和该指令操作功能所对应的微址之和,操作如下:
MPROM1产生下址信号,MPROM2产生CI3~0、SCC3~0信号
对MPROM1-2的操作为:MPROM1 在高位 MPROM2 在低位
E 4000
4000 00FF:00E0 00FF:00E0 00FF:00E0 00FF:0020
00FF:3030 00FF:3030 00FF:3030 00FF:3030
00FF:3030 00FF:3030 00FF:3030 00FF:3030
00FF:3030 00FF:3030 00FF:3030 00FF:3030
4010 00FF:3034 00FF:3030 00FF:1436 00FF:3030
00FF:3030 00FF:1A37 00FF:3030 00FF:1C37
00FF:3030 00FF:00E0 00FF:3030 00FF:00E0
00FF:3030 00FF:1C30 00FF:2430 00FF:00E0
4020 00FF:00E0 00FF:00E0 00FF:3030 00FF:00E0
00FF:3030
E 4030
4030 00FF:3A32 00FF:0230
E 4056 00FF:3030
(3) MPROM3产生0MRW、0I2~0信号,MPROM4产生SAI8~I6、SBI5~I3信号,对MPROM3-4的操作为:MPROM3 在高位 MPROM4 在低位
E 4000
4000 00FF:4131 00FF:4320 00FF:1010 00FF:4010
00FF:41B8 00FF:41B9 00FF:41BC 00FF:41BB
00FF:41BE 00FF:4199 00FF:419C 00FF:44B8
00FF:4338 00FF:4339 00FF:4378 00FF:4358
4010 00FF:4010 00FF:4530 00FF:4710 00FF:2310
00FF:3730 00FF:4331 00FF:0010 00FF:4320
00FF:1010 00FF:4318 00FF:0490 00FF:4490
00FF:1738 00FF:4320 00FF:4320 00FF:4320
4020 00FF:1700 00FF:4331 00FF:0220 00FF:4320
00FF:1730
E 4030
4030 00FF:4700 00FF:4320
E 4056 00FF:4010
(4) MPROM5产生B口、A口信号,MPROM6产生0SST、SSHSCI信号,
对MPROM5-6的操作为:MPROM5 在高位 MPROM6 在低位
E 4000
4000 00FF:5501 00FF:5501 00FF:0000 00FF:0000
00FF:0010 00FF:0011 00FF:0010 00FF:0010
00FF:0010 00FF:0011 00FF:0010 00FF:0010
00FF:0011 00FF:0010 00FF:0060 00FF:0050
4010 00FF:0000 00FF:5500 00FF:0000 00FF:0000
00FF:0000 00FF:4000 00FF:0000 00FF:4401
00FF:0020 00FF:0000 00FF:0000 00FF:0000
00FF:0000 00FF:5501 00FF:5501 00FF:5501
4020 00FF:0000 00FF:4000 00FF:5500 00FF:4401
00FF:5000
E 4030
4030 00FF:0000 00FF:5501
E 4056 00FF:0030
(5) MPROM7产生DC2、DC1信号,对MPROM7的操作为:
E 4000
4000 00FF:70 00FF:B0 00FF:10 00FF:00
00FF:00 00FF:00 00FF:00 00FF:00
00FF:00 00FF:00 00FF:00 00FF:00
00FF:00 00FF:00 00FF:00 00FF:00
4010 00FF:00 00FF:02 00FF:32 00FF:01
00FF:00 00FF:30 00FF:03 00FF:30
00FF:00 00FF:30 00FF:01 00FF:30
00FF:00 00FF:30 00FF:30 00FF:30
4020 00FF:00 00FF:30 00FF:01 00FF:30
00FF:00
E 4030
4030 00FF:03 00FF: B0
E 4056 00FF:00
芯片的截图如下
1)写入基本指令之后的芯片存储状态:
MAPROM
MPROM1,2 (MPROM 1在高位 MPROM2在低位)
MPROM3,4 (MPROM 3在高位 MPROM 4在低位)
MPROM5,6(MPROM5在高位,MPROM6在低位)
MPROM7
2)写入扩展命令后的截图
MAPROM MPROM1
MPROM2 MPROM3
MPROM4 MPROM5
MPROM6 MPROM7
九.测试程序
1.在单步方式下,通过指示灯观察各类扩展指令的微码。(在此,仅在A组、C组中各列举一条指令为例。)通过验证可知各指令的微码无误。
<1>选择基本指令的A组指令中的ADD指令,观察其节拍流程
(1)置拨动开关SW=00000000 00000001;(表示指令ADD R0,R1)
(2)按RESET按键;小板指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),其它灯全灭; ‘
(3)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0000 ;下址的指示灯显示 0000 0000 ;(本拍完成公共操作0→PC、DI#=0)
(4)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0001 ,下址的指示灯显示 1110 0000 ;(本拍完成公共操作PC→AR、PC+1→PC)
(5)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0010 ,下址的指示灯显示 1110 0000 ;(本拍完成公共操作MEM→IR)
(6)以上三步为公共操作,其它指令同;
(7)按START按键;小板指示灯CI3~0、SCC3~0显示 0010 0000 ,微址指示灯显示 0000 0011 ,下址的指示灯显示 0000 0100 ;(本拍完成/MAP操作功能)
(8)按START按键;小板指示灯CI3~0、SCC3~0显示 0011 0000 ,微址指示灯显示 0000 0100 ,下址的指示灯显示 0011 0000 ;(本拍执行ADD指令,DR←DR+SR操作)
(9)按START按键;小板指示灯CI3~0、SCC3~0显示 0011 0010 ,微址指示灯显示 0011 0000 ,下址的指示灯显示 0011 0000 ;(本拍完成STR→Q、CC#=INT#公共操作功能)
(10)按START按键;小板指示灯CI3~0、SCC3~0显示 0011 0000 ,微址指示灯显示 0011 0001 ,下址的指示灯显示 0000 0010 ;(本拍完成PC→AR、PC+1→PC、CC#=0的公共操作功能)
<2>选择基本指令的D组指令中的CALA指令,观察其节拍流程
(1)置拨动开关SW= 1100 1110 0000 0000 ;(表示指令CALA)
(2)按RESET按键;小板指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),其它灯全灭;
(3)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0000 ,下址的指示灯显示 0000 0000 ;
(4)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0001 ,下址的指示灯显示 0000 0000 ;
(5)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0010 ,下址的指示灯显示 0000 0000 ;
(6)以上三步为公共操作,其它指令同。
(7)按START按键;小板指示灯CI3~0、SCC3~0显示 0010 0000 ,微址指示灯显示 0000 0011 ,下址的指示灯显示 0001 1111 ;
(8)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0001 1111 ,下址的指示灯显示 0000 0000 ;(本拍完成PC→AR、PC+l→PC操作)
(9)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0010 0000 ,下址的指示灯显示 0000 0000 ;(本拍完成MEM→Q操作)
(10)按START按键;小板指示灯CI3~0、SCC3~0显示 1110 0000 ,微址指示灯显示 0010 0001 ,下址的指示灯显示 0000 0000 ;(本拍完成SP-1→SP、PC→AR操作)
(11)按START按键;小板指示灯CI3~0、SCC3~0显示 0011 0000 ,微址指示灯显示 0010 0010 ,下址的指示灯显示 0011 0000 ;(本拍完成PC→MEM、Q→PC、CC#=O操作)
(12)按START按键;小板指示灯CI3~0、SCC3~0显示 0011 0010 ,微址指示灯显示 0011 0000 ,下址的指示灯显示 0011 0000 ;(本拍完成STR→Q、CC#=INT#操作)
(13)按START按键;小板指示灯CI3~0、SCC3~0显示 0011 0000 ,微址指示灯显示 0011 0001 ,下址的指示灯显示 0000 0010 ;(本拍完成PC→AR、PC+l→PC、CC#=0操作)。
2.测试基本指令的程序:
(1)验证指令MVRD,MVRR,ADD,SUB,XOR,OR,RET.
运行结果:R0=0064(R1+R0——〉R0);R1=0023;R3=FFF7(R3-R2——〉R3);R6=0070(R6与R7相异或);R7=FFF7(R7与R3相异或)
(2)验证指令IN,OUT,SHR, AND,CMP,JRC, JRNC,JMPA
功能:从键盘输入0~9个数字,遇到0~9个字符外后跳出程序。
(3)测试INC,JRNZ的程序
功能:计算1到10的累加和。
(4)测试DEC,JRZ,PUSH,POP,JR
功能:用次数控制在终端屏幕上输出‘0’到‘9’是个数字符
(5)测试STRR,LDRR,CALA
功能:读出内存中的字符,将其显示到显示器的屏幕上,转换为小写字母后再写回存储器原存储区域。
3、测试扩展指令CLC
1)验证EI、DI和IRET指令的程序
A 2104
2104:JR 2120
2105:RET ;跳转到中断服务程序
A 2108
2108:JR 2130
2109:RET ;跳转到中断服务程序
A 210C
210C:JR 2140
210D:RET ;跳转到中断服务程序
A 2120
2120:PUSH R0 ;R0进栈
2121:PUSH R3 ;R3进栈
2122:MVRD R3,31 ;将字符‘1’的ASCII码送寄存器R3
2124:JR 2150
2125:RET
A 2130
2130:PUSH R0
2131:PUSH R3
2132:MVRD R3,32 ;将字符‘2’的ASCII码送寄存器R3
2134:JR 2150
2135:RET
A 4140
2140:PUSH R0
2141:PUSH R3
2142:MVRD R3,33 ;将字符‘3’的ASCII码送寄存器R3
2144:JR 2150;
2145:RET
2150:*DI ;关中断
A 2151
2151:MVRD R0,0042 ;将字符“B”赋值给R0,B即Begin的缩写。
2153:CALA 2200 ;调用子程序,完成显示
2155:MVRD R0,0049 ;将字符“I”赋值给R0,I即Interrupt的缩写。
2157:CALA 2200 ;调用子程序,完成显示
2159:MVRR R0,R3 ;将R3的内容送R0
215A:CALA 2200 ;调用子程序,完成显示
215C:IN 81 ;判键盘上是否按了一个键
215D:SHR R0 ;即串口是否有了输入字符
215E:SHR R0
215F:JRNC 215C ;若没有,等待
2160:IN 80 ;输入字符到R0
2161:MVRD R0,0045 ;将字符“E”赋值给R0,E即End
2163:CALA 2200 ;调用子程序,完成显示
2165:MVRD R0,0049 ;将字符“I”赋值给R0,I即Interrupt的缩写
2167:CALA 2200 ;调用子程序,完成显示
2169:MVRR R0,R3 ;将R3的内容送R1
216A:CALA 2200 ;调用子程序,完成显示
216C:POP R3 ;R3出栈
216D:POP R0 ;R0出栈
216E:*IRET ;中断返回
A 2200
2200:PUSH R0 ;R0进栈
2201:IN 81 ;查询接口状态,判字符输出完成否
2202:SHR R0
2203:JRNC 2201 ;未完,循环等待
2204:POP R0 ;R0出栈
2205:OUT 80 ;输出R0的值
2206:RET;
A 2000
2000:*EI ;开中断
A 2001
2001:MVRD R0,0036 ;将字符’6’的ASCII码送寄存器R0
2003:CALA 2200 ;输出该字符
2005:MVRD R0,4000 ;延时子程序
2007:DEC R0
2008:JRNC 2007
2009:JR 2001 ;跳到2001循环执行该程序
200A:RET
G 2000
注:本程序执行时只可执行一次中断,然后中断关闭;如果将2000的内存单元原值置为6F00,则从开始中断即为关闭;如果将2150和2000的内存单元原值都置为6E00,则中断一直都是开着的,可一直实现中断。(DI:6F00;EI:6E00;IRET:EF00)
2)验证指令ADC、SBB、RCL、RCR、ASR、NOT、CLC、STC、CALR、LDRA、STRA的程序。
(1)ADC 与CLC
A 2000
2000:MVRD R0,0100 ;给R0赋值0100
2002:MVRD R1,1001 ;给R1赋值1001
2004:
E 2004
2004:内存单元原值:6C00 ;进位C置为0
E 2005
2005:内存单元原值:2001 ;R0+R1+C—>R0
A 2006
2006:RET ;程序结束
2007:
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R0=1101 R1=1001
(说明:如果2004改为6D00,则进位C为1,R0为1102)
(2)SBB 与STC
A 2080
2080:MVRD R0,0011 ;给R0赋值0011
2082:MVRD R1,1011 ;给R1赋值1011
E 2084
2084:内存单元原值:2110 ;R1-R0-C—>R1 or R1-R0+/C—>R1
E 2085
2085:内存单元原值:6D00 ;进位C置为1
A 2086
2086:RET ;程序结束
2087:
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2080
运行结果为:R0=0011 R1=OFFF
(说明:如果2005改为6C00,则进位C为0,答案应为1000)
(3)RCL
A 2000
2000:MVRD R0,1111 ;给R0赋值1111
2002:
E 2002
2002:内存单元原值:6D00 ;进位C置为1
E 2003
2003:内存单元原值:2A00 ; R0 R0带进位C循环左移
A 2004
2004:RET ;程序结束
2005
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R0=2223
(说明:R0 本为0001000100010001,带进位C=1 左移后为 0010001000100011,即为 2223)
(4)RCR
A 2000
2000:MVRD R0,1111 ;给R0赋值1111
2002:
E 2002
2002: 内存单元原值:6D00 ;进位C置为1
E 2003
2003: 内存单元原值:2B00 ; R0 R0带进位C循环右移
A 2004
2004: RET ;程序结束
2005
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R0=8888
(说明:R0 本为0001000100010001,带进位C=1右移后为 1000100010001000,即为 8888)
(5) ASR
A 2030
2030:MVRD R0,1111 ;给R0赋值1111
2032:
E 2032
2032: 内存单元原值:2C00 ;R0 R0算术右移
A 2033
2033: RET ;程序结束
2034:
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2030
运行结果为:R0=0888
(说明:R0 本为0001000100010001,算术右移后为 0000100010001000,即为 0888)
(6)NOT
A 2040
2040:MVRD R0,1111 ;给R0赋值1111
2042:
E 2042
2042: 内存单元原值:2D00 ; R0 /R0
A 2043
2043: RET ;程序结束
2044:
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2040
运行结果为:R0=1111
(说明:R0 本为0001000100010001,取反后为1110111011101110,即为 EEEE)
(7)JMPR
A 2100
2100:MVRD R1,0011 ;给R1赋值0011
2102:MVRD R2,1100 ;给R2赋值1100
2104:ADD R1,R2 ;R1 R1+R2
2105:RET ;程序结束
2106:
A 2000
2000:MVRD R3,2100 ;转跳地址为2100
2002:
E 2002
2002:内存单元原值:6003 ;转跳到R3指明的地址
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R1=1111,R2=1100,R3=2100
(8)JRS与 JRNS
A 2000
2000:MVRD R0,0001 ;给R0赋值0001
2002:MVRD R1,1101 ;给R1赋值1101
2004:SUB R1,R0 ;R1 R1-R0
E 2005
2005: 内存单元原值:6403 ;S=1时跳转,PC PC+3
A 2006
2006: MVRD R2, EEEE ;给R2赋值EEEE
2008:RET
2009:MVRD R2,FFFF ;给R2赋值FFFF
200B:RET
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R0=0001,R1=1101,R2=EEEE
(说明:1如果2004为SUB R0,R1,则S=0,跳转到2009语句。结果为R0=DF00,R1=1101,R2=FFFF。2 如果2005语句为 6503,则结果恰好相反,够减跳转,答案为R0=DF00,R1=1101,R2=FFFF,不够减不跳转,结果为R0=0001,R1=1100,R2=EEEE)
(9) CALR
A 2000
2000:MVRD R0,0101 ;给R0赋值0101
2002:MVRD R1,1010 ;给R1赋值1010
2004:MVRD R2,2100 ;R2指明的子程序的地址为2100
2006:
E 2006
2006:内存单元原值:E002 ;调用R2指明的子程序
A 2007
2007:MVRD R6,1111 ;给R6赋值1111
2009:MVRD R7,2222 ;给R7赋值2222
200B:ADD R6,R7 ;R6 R6+R7
A 2100
2100:MVRD R0, 1111 ;给R0赋值1111
2102:MVRD R1, 1010 ;给R1赋值1010
2104 :RET
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R0=1111,R1=1010,R2=2100,R6=3333,R7=2222
(10) LDRA
E 2100 内存单元原值:0039 内存单元原值:0039
E 2000
2000 内存单元原值:E400 ;将内存单元2100的内容赋给寄存器R0
E 2001
2001 内存单元原值:2100 ;
A 2002
2002:OUT 80 ;输出R0的内容
2003:IN 81 ;判断是否输出完
2004:SHR R0
2005:JRNC 2003 ;未完,则循环测试
E 2006
2006 内存单元原值:E400 ;将内存单元2101的内容赋给寄存器R0
E 2007
2007 内存单元原值:2101
A 2008
2008:OUT 80
2009:RET
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:99
R3=2100
(11)LDRX
E 2062
2062 内存单元原值:5F00 ;把2062的内容变为5F00,用做检验
A 2000
2000:MVRD R1,AAAA ;给R1赋值AAAA
2002:MVRD R2,0000 ;给R2赋值0000
2004:
E 2004
2004 内存单元原值:E512 ;DR [DATA+SR],SR为R2,DR为R1
E 2005
2005 内存单元原值:2060 ;把DATA的值置为2060
A 2006
2006:RET
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R1=5F00 R2=0000
(12)STRX
A 2000
2000:MVRD R0,0111 ;给R0赋值0111
2002:MVRD R1,0001 ;给R1赋值0001
2004:
E 2004
2004 内存单元原值:E601 ;[DATA+SR] DR,SR为R1,DR为R0
E 2005
2005 内存单元原值:2060 ; DATA的值置为 2060
A 2006
2006:RET
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:
G 2000
运行结果为:R0=0111,R1=0001
(说明:用U命令查2061的内容,即U 2061,查得其内容为0111)
(13)STRA
A 2000
2000 :MVRD R0,1111 ;给R0赋值1111
2002 :
E 2002
2002 内存单元原值:E700 ;[ADR] SR,SR为R0
E 2003
2003 内存单元原值:2060 ;DATA的值置为 2060
A 2004
2004:RET
用G命令运行前面刚键入的源程序,在命令提示符状态下输入:G 2000
运行结果为:R0=1111
(说明:用U命令查2060的内容,即U 2060,查得其内容为1111)
十、自评
通过单步执行检测,证明了我们所写的29条基本指令及CLC 扩展指令是正确的。而测试程序的运行结果,也进一步证明所有指令准确无误。由此我们可以知道我们对16位机微程序控制器指令系统的设计是正确的,并且基本上达到了实验目的所要求的。鉴于设计过程中的表现,我们小组的每个成员都对自己进行了评价:
杨赛男:良 李春萌:良 覃筱媛:中 车平:良
十一、遇到的问题及解决方案
在单步方式下,通过指示灯观察各类扩展指令微码时,由于不是很仔细,使我们在观察指示灯时没有将一些不是很亮的灯读对,导致我们的结果与理论不符,后来我们就注意到这一细节并再犯这个错误。还有我们也曾经因为忘记改动拨动开关(单步、手动置指令、微程序、16位、联机),而导致返工,这不仅仅是马虎的问题,同时也是由于我们对这一部分知识的不熟稔所造成的,不过好在我们发现了这一错误并及时予以了纠正。
十二、总结和感想
通过三周的课程设计,实际的操作与知识理论的结合,使大家明显地对相关知识了解的更加透彻了,收获颇丰。在整个设计过程中,虽然小组四人各自分工明确,但是大家仍然不时交流彼此的经验,把自己的工作内容及学到的东西与同组人分享,使知识得以互补。此外,在每个人遇到困难时,我们也是互相讨论,共同解决问题的,这也使得我们的任务最终能够圆满完成。最后我们要说,我们每个组员都会铭记这次课设的经历,因为它让我们大家齐心协力,团结一致,并且最终收获了知识和珍贵的友谊。
附录一 基本指令流程框图
附录二 扩展指令流程框图
附录三 基本指令和扩展指令的微程序编码表(十六进制)
附录三 基本指令和扩展指令的微程序编码表(二进制)
附录四 八个控制存储器芯片中各存储单元的内容列表