计算机组成原理 微程序控制器实验文档格式.docx
《计算机组成原理 微程序控制器实验文档格式.docx》由会员分享,可在线阅读,更多相关《计算机组成原理 微程序控制器实验文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
大家应该认识到,遇到一些问题是好事情,通过分析与解决这些问题,才提高了自己的工作能力,学习到更多的知识。
还未理解清楚,但实验结果正确了就匆忙结束实验,并没有达到教学实验的目的。
实验报告中,还应写出自己的学习心得和切身体会,也可以对教学实验提出新的建议等。
实验报告要交给教师评阅并给出实验成绩。
三、实验步骤:
1.接通教学机电源;
2.将教学机左下方的6个拨动开关置为110100(单步、手动置指令、微程序、联机、16位、MACH);
3.按一下“RESET”按键;
4.通过16位的数据开关SWH、SWL置入指令操作码;
5.在单步方式下,通过指示灯观察各类基本指令的微码。
1〉选择基本指令的A组指令中的ADD指令,观察其节拍流程
〈1〉置拨动开关SW=0000000000000001;
(表示指令ADDR0,R1)
〈2〉按RESET按键;
指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),其它灯全灭;
〈3〉按START按键;
指示灯CI3~0、SCC3~0显示11100000,微址和下址的指示灯全灭;
(本拍完成公共操作0→PC、DI#=0)
〈4〉按START按键;
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显示00000001,下址的指示灯全灭;
(本拍完成公共操作PC→AR、PC+1→PC)
〈5〉按START按键;
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显示00000010,下址的指示灯全灭;
(本拍完成公共操作MEM→IR)
〈6〉以上三步为公共操作,其它指令同;
〈7〉按START按键;
指示灯CI3~0、SCC3~0显示00100000,微址指示灯显示00000011,下址的指示灯显示00000100;
(本拍完成/MAP操作功能)
〈8〉按START按键;
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示00000100,下址的指示灯显示00110000(本拍执行ADD指令,DR←DR+SR操作)。
〈9〉按START按键;
指示灯CI3~0、SCC3~0显示00110010,微址指示灯显示00110000,下址的指示灯显示00111010;
(本拍完成STR→Q、CC#=INT#公共操作功能)
〈10〉按START按键;
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示00110001,下址的指示灯显示00000010;
(本拍完成PC→AR、PC+1→PC、CC#=0的公共操作功能)
2〉选择基本指令的B组指令中的MVRD指令,观察其节拍流程
〈1〉置拨动开关SW=1000100000000000;
(表示指令MVRD)
〈6〉以上三步为公共操作,其它指令同。
指示灯CI3~0、SCC3~0显示00100000,微址指示灯显示00000011,下址的指示灯显示00011101;
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示00011101,下址的指示灯显示00011100;
(本拍完成PC→AR、PC+1→PC、CC#=0操作)
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示00011100,下址的指示灯显示00110000;
(本拍完成MEM→DR、CC#=0操作)
〈10〉按START按键;
(本拍完成STR→Q、CC#=INT#操作)
〈11〉按START按键;
3〉选择基本指令的D组指令中的CALA指令,观察其节拍流程
〈1〉置拨动开关SW=1100111000000000;
(表示指令CALA)
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显示0000
0001,下址的指示灯全灭;
0010,下址的指示灯全灭;
指示灯CI3~0、SCC3~0显示00100000,微址指示灯显示0000
0011,下址的指示灯显示00011111;
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显示0001
1111,下址的指示灯显示00000000;
(本拍完成PC→AR、PC+1→PC操作)
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显示0010
0000,下址的指示灯显示00000000;
(本拍完成MEM→Q操作)
0001,下址的指示灯显示00000000;
(本拍完成SP-1→SP、→AR操作)
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示0010
0010,下址的指示灯显示00110000;
(本拍完成PC→MEM、Q→PC、CC#=0操作)
〈12〉按START按键;
指示灯CI3~0、SCC3~0显示00110010,微址指示灯显示0011
0000,下址的指示灯显示00111010;
〈13〉按START按键;
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示0011
0001,下址的指示灯显示00000010;
6.在连续方式下,用A命令健入程序并运行(程序由基本指令组成,可直接用A命令键入)。
1〉举例编写汇编程序,用“A”命令输入,运行并观察结果
例子1:
设计一个小程序,在屏幕上输出显示字符‘6’。
<
1>
在命令行提示符状态下输入:
A2000↙;
屏幕将显示:
2000:
输入如下形式的程序:
2000:
MVRDR0,0036↙;
把字符‘6’的ASCII码送入R0的低位
2002:
OUT80↙;
在屏幕上输出显示字符‘6’
2003:
RET↙;
每个用户程序都必须用RET指令结束
2004:
↙;
(按回车键即结束输入过程)
2>
用“G”命令运行程序60
G2000↙
执行上面输入的程序
显示结果为:
6
该例建立了一个从主存2000H地址开始的小程序。
在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符H。
每个用户程序的最后一个语句一定为RET汇编语句。
因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。
例2:
设计一个小程序,用次数控制在终端屏幕上输出‘0'
到‘9'
十个数字符。
A2020↙
2020:
从地址2020H开始输入下列程序:
2020:
MVRDR2,00OA;
送入输出字符个数
2022:
MVRDR0,0030;
“0”字符的ASCII码送寄存器R0
2024:
OUT80;
输出保存在R0低位字节的字符
2025:
DECR2;
输出字符个数减1
2026:
JRZ202E;
判10个字符输出完否,已完,则转到程序结束处
2027:
PUSHR0;
未完,保存R0的值到堆栈中
2028:
IN81;
查询接口状态,判字符串行输出完成否,
2029:
SHRR0;
202A:
JRNC2028;
未完成,则循环等待
202B:
POPR0;
已完成,准备输出下一字符并从堆栈恢复R0的值
202C:
INCR0;
得到下一个要输出的字符
202D:
JR2024;
转去输出字符
202E:
RET
202F:
↙
该程序的执行码放在2020H起始的连续内存区中。
若送入源码的过程中有错,系统会进行提示,等待重新输入正确汇编语句。
在输入过程中,在应输入语句的位置直接打回车则结束输入过程。
用“G”命令运行程序
G2020↙
执行结果为:
0123456789
思考题:
当把IN01,SHRR0,JNC2029三个语句换成4个MOVR0,R0语句,该程序执行过程会出现什么现象?
试分析并实际执行一次。
提示:
该程序改变这三条语句后,若用T命令单条执行,会依次显示0~9十个数字。
若用G命令运行程序,程序执行速度快,端口输出速度慢,这样就会跳跃输出。
在命令行提示符状态下输G2020,屏幕显示09。
类似的,若要求在终端屏幕上输出‘A'
到‘Z'
共26个英文字母,应如何修改例1中给出的程序?
请验证之。
参考答案:
A2100↙
2100:
从地址2100H开始输入下列程序:
(2100)MVRDR2,001A;
循环次数为26
MVRDR0,0041;
字符“A”的值
(2104)OUT80;
JRZ210E;
判26个字符输出完否,已完,则转移到程序结束处
(2108)IN81;
查询接口状态,判字符串行输出完成否
SHRR0
JRNC2108;
已完成,准备输出下一字符,从堆栈恢复R0的值
JR2104;
(210E)RET
用G命令执行该程序,屏幕上显示“A”~“Z”26个英文字母.
例子3:
从键盘上连续打入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束输入过程。
在命令行提示符状态下输入:
A2040↙
2040:
从地址2040H开始输入下列程序:
(2040)MVRDR2,0030;
用于判数字符的下界值
MVRDR3,0039;
用于判数字符的上界值
(2044)IN81;
判键盘上是否按了一个键,
即串行口是否有了输入的字符
JRNC2044;
没有输入则循环测试
IN80;
输入字符到R0
MVRDR1,00FF
ANDR0,R1;
清零R0的高位字节内容62
CMPR0,R2;
判输入字符≥字符'
0'
否
JRNC2053;
为否,则转到程序结束处
CMPR3,R0;
判输入字符≤字符'
9'
输出刚输入的数字符
JMPA2044;
转去程序前边2044处等待输入下一个字符
(2053)RET
G2040↙
光标闪烁等待键盘输入,若输入0-9十个数字符,则在屏幕上回显;
若输入非数字符,则屏幕不再显示该字符,出现命令提示符,等待新命令。
思考题,本程序中为什么不必判别串行口输出完成否?
设计打入'
A'
~'
Z'
和'
的程
序,遇其它字符结束输入过程
因为每输入一个0—9的数字都会直接回显而不需要判断输出完成否。
MVRDR4,0030;
MVRDR5,0039;
(2048)IN81;
CMPR0,R4;
CMPR5,R0;
判输入字符≤字符0'
JRNC2059;
JMPA2048;
(2059)RET
光标闪烁等待键盘输入,若输入0A'
,则在屏幕上回显;
例子4:
计算1到10的累加和。
A2060↙
2060:
从地址2060H开始输入下列程序:
(2060)MVRDR1,0000;
置累加和的初值为0
MVRDR2,00OA;
最大的加数
MVRDR3,0000
(2066)INCR3;
得到下一个参加累加的数
ADDR1,R3;
累加计算
CMPR3,R2;
判是否累加完
JRNZ2066;
未完,开始下一轮累加
G2060↙
运行过后,可以用R命令观察累加器的内容。
R1的内容为累加和。
结果为:
R1=0037R2=00OAR3=00OA
7.设计几条指令的功能、格式和执行流程,设计每条微指令各字段的具体编码值,包括控制码的各字段、下地址字段、形成下址用到的条件码。
可以从给出的19条扩展指令中任意选择,例如ADC、STC、LDRA、、CALR等指令,当然也可以设计与实现其它的指令,包括原来已经实现的基本指令(要变换为另外一个指令操作码)或自己确定的指令。
1〉扩展几条指令,确定各步的控制信号。
注意:
在做扩展指令时,控制信号要由MACH产生,教师可以参照提供的微程序的全指令的MACH的程序。
将扩展好的控制信号添加到给出的MACH程序中,编译生成JED的熔丝图文件,写入MACH内的寄存器中。
教师可以参考提供的微程序全指令的程序,将提供的MACHM.JED下载到MACH芯片内。
(出厂时默认的程序就是微程序全指令的,所以这个步骤可以省略,直接进行下面的步骤)
8.在单步方式下,通过指示灯观察各类扩展指令的微码。
1〉选择扩展指令的A组指令中的ADC指令,观察其节拍流程
〈1〉置拨动开关SW=0010000000000000;
(表示指令ADC)
指示灯CI3~0、SCC3~0显示00100000,微址指示灯显示00000011,下址的指示灯显示01010000;
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示01010000,下址的指示灯显示00110000;
(本拍完成DR+SR+CF→DR操作)
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示0011
2〉选择扩展指令的C组指令中的LDRA指令,观察其节拍流程
〈1〉置拨动开关SW=1110010000000000;
(表示指令LDRA)64
指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),其它灯全灭;
指示灯CI3~0、SCC3~0显示11100000,微址和下址的指示灯全灭;
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显0000
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显示0000
0011,下址的指示灯显示01011011;
指示灯CI3~0、SCC3~0显示11100000,微址指示灯显示0101
1011,下址的指示灯显示00000000;
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示0101
1100,下址的指示灯显示00011100;
(本拍完成MEM→AR操作)
指示灯CI3~0、SCC3~0显示00110000,微址指示灯显示0001
1100,下址的指示灯显示00110000;
(本拍完成MEM→DR操作)
(本拍完成STR→Q操作)
下址的指示灯显示00000010;
3〉选择扩展指令的C组指令中的CALR指令,观察其节拍流程
〈1〉置拨动开关SW=1110000000000000;
(表示指令CALR)
指示灯CI3~0、SCC3~0显示11100000,微址和下址的指示灯全灭;
指示灯CI3~0、SCC3~0显示