实验目的:
通过看懂教学计算机中已经设计好并正常运行的数条基本指令(例如,ADD、MVRR、MVRD、JR等指令)的功能、格式和执行流程,然后自己设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。其最终要达到的目的是:
- 深入理解计算机微程序控制器的功能、组成知识;
- 深入地学习计算机各类典型指令的执行流程;
- 对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念;
- 学习微程序控制器的设计过程和相关技术。
实验内容:
设计几条指令的功能、格式和执行流程,设计每条微指令各字段的具体编码值,包括控制码的各字段、下地址字段、形成下地址用到的条件码,并在微程序控制模拟仿真软件上实现、调试正确。
一、思考题:
- 总结机器指令和微程序之间的关系。
(1)微程序控制器中,机器指令与微指令的关系是“每条机器指令由一段微指令编程的微程序来解释执行”,其中机器指令是提供给用户编程的最小单位,而微指令是一组有特定功能的微命令的集合,通常且二进制编码表示。
(2)一条机器指令所完成的操作划分成若干条微指令来完成,由微指令进行解释和执行。
- 总结指令的一般流程。
(1)取指令。程序开始执行之后,将指令的起始地址送入程序计数器PC中,将PC的值送入地址总线中,同时PC自动完成加一操作。从内存中取出指令并暂存在指令寄存器IR中,IR的操作码作为微程序控制器的输入来找到该指令对应的微控存的起始地址。
(2)对于需要间址的指令,将PC作为地址码得到间址地址,再将间址地址送入地址寄存器中,访问MEM取得数据,如果是多次间址,继续完成间址操作。
(3)执行指令。进入到本指令对应的微程序入口地址中(如果存在间址操作,其实本步骤已经在间址操作之前完成),根据CC和SCC的控制来完成指令微程序的执行顺序。
(4)在执行指令完成后,存在中断请求信号,则进入到中断服务程序中,如果没有,则取下一条指令继续完成操作。
二、设计型实验
1. 从给出的19条扩展指令中选择ADC、STC、LDRA指令,
写出指令格式、指令功能和执行流程及对应的微程序
扩展几条指令,确定各步的控制信号。
指令 | 操作功能 | 微址 | 下址 | CI3~0 | SCC3~0 | MRW | I2~0 | I8~6 | I5~3 | B口 | A口 | SST | SSHSci | DC2 | DC1 |
STC | C=1 | 57 | 30 | 0011 | 0000 | 100 | 000 | 001 | 000 | 0000 | 0000 | 100 | 000 | 000 | 000 |
ADC | DR+SR+CF→DR | 50 | 30 | 0011 | 0000 | 100 | 001 | 011 | 000 | 1000 | 1000 | 001 | 010 | 000 | 000 |
LDRA DR, [ADR] | PC→AR PC+1→PC | 5B | 5C | 1110 | 0000 | 100 | 011 | 010 | 000 | 0101 | 0101 | 000 | 001 | 011 | 000 |
MEM→AR | 5C | 5D | 1110 | 0000 | 001 | 000 | 001 | 000 | 0000 | 0000 | 000 | 000 | 011 | 000 | |
MEM→DR | 5D | 30 | 0011 | 0000 | 001 | 111 | 011 | 000 | 1000 | 0000 | 000 | 000 | 000 | 000 |
2、设计一条指令的功能、格式和执行流程,并在微程序控制器模拟软件上实现、调试正确。
要求设计的新指令是:
设计一条新的机器指令[DR]←SR,即将原来的基本指令的STRR变换为另外一个按照下面附表中要求使用的操作码和微程序首地址的新指令,并在微程序控制器模拟软件上实现、调试正确。
操作功能:[DR]←SR
写出你的学号;
学号:20231167
写出你的学号要求使用的操作码和微程序首地址;
操作码:97H,首地址:47H
写出新指令的指令格式;
字0:1001 0110 DR SR,该指令需要1字存储
划分新指令的执行步骤,并写出每一个执行步骤的说明;
- DR->AR,寄存器间接寻址,DR为程序需要访问的地址,先将DR的内容送入地址寄存器中
- SR->MEM,CC#=0,SR的数据送入对应的内存单元,然后跳转到中断服务程序的入口地址。
写出新指令完整的微程序,并对每一个子字段的编码取值进行说明;
指令 | 操作功能 | 微址 | 下址 | CI3~0 | SCC3~0 | MRW | I2~0 | I8~6 | I5~3 | B口 | A口 | SST | SSHSci | DC2 | DC1 |
[DR]<-SR | DR->AR | 47 | 00 | 1110 | 0000 | 100 | 011 | 001 | 000 | 1000 | 0000 | 000 | 000 | 011 | 000 |
SR->MEM,CC#=0 | 48 | 30 | 0011 | 0000 | 000 | 100 | 001 | 000 | 0000 | 1000 | 000 | 000 | 000 | 001 |
该指令需要两步操作,
(1)DR->AR:根据学号,微程序首地址为47H,顺序执行CI3~0为1110。对内存端口及IO端口没有操作,MRW为000。只需要将B端口作为输入,B口的数据作为输出,不影响原有寄存器的值,I8-I0为001000011。
加法操作,SSH,SCI都设置为000。需要对AR的高位进行操作,DC2为011。只需要用到地址总线,DC1选择0000,
(2)SR->MEM,CC#=0:第二步为指令操作的最后一条指令,CI3-0为0011,SCC3~0设置为0000来实现必转操作,跳转至中断判断入口30H处。对MEM进行写操作,MRW设置为000。SR设置为对应的A口输出,I8-I0设置为0010000100,SST,SSH设置为000。无特殊寄存器的操作,DC2=000,需要将输出结果送至内部总线,DC1为001.
(6)写出完整的调试程序,并说明每一条指令的功能
1.寄存器R0的值设置为2100H,R1设置为ABCDH
2 e2000写入指令9701,a2100在地址2100处结束
3. g2000执行指令
4. d2100查看各地址处的数据,如果2100处的数据为ABCD,指令正常运行。
(7)要在微程序控制器模拟仿真程序上实现和调试验证。给出进行新指令和验证调试过程的截图(微程序入口地址截图、微程序表截图、编写汇编调试验证的截图。截图要局部放大能看的清楚),结合调试截图,说明一下上述运行结果是如何验证了新指令的正确性的。(注意:学生学号不同,使用的操作码和微程序首地址也不同)。
微程序入口地址截图和微程序表截图:
编写汇编调试验证:
验证说明:
指令执行后将R1的内容送到R0的地址中,在调试验证中,2100处的地址数据修改为ABCDH,指令执行正确。
(8)实验体会及总结;
本次微程序控制器的实验不算复杂,通过查阅实验指导书,课后重新观看了课程回放,成功设置了指令,最终顺利的完成了此次实验。
在整个设计、编程、调试的过程中,我对于微程序控制器的理解更加深入,对它的整体架构、工作流程都有了新的认识。我相信,这对于理解计算机组成原理理论课,甚至今后的学习都会很有帮助,让我对学习充满信心。
附表:新指令的操作码、微程序首地址与学生本人对应的学号:
学号最后一位数 | 指定使用的操作码 | 指定微程序首地址 |
1 | 91(H) | 41(H) |
2 | 92(H) | 42(H) |
3 | 93(H) | 43(H) |
4 | 94(H) | 44(H) |
5 | 95(H) | 45(H) |
6 | 96(H) | 46(H) |
7 | 97(H) | 47(H) |
8 | 98(H) | 48(H) |
9 | 99(H) | 49(H) |
0 | 9A(H) | 4A(H) |
*选做题:
设计扩展指令 STRA [ADR] , SR
参照上面设计型实验2的(1)~(7)要求完成。
- 写出你的学号;
学号为:20231167
- 写出你的学号要求使用的操作码和微程序首地址;
操作码为97H ;微程序首地址为47H
- 写出新指令的指令格式;
字0:1001 0110 0(目的寄存器,此指令不用)SR (源寄存器)
字1:ADR
该指令需要2字来存储。
- 划分新指令的执行步骤,并写出每一个执行步骤的说明;
PC->AR,PC+1->PC
将PC码存入AR,接着PC再次加一,执行下一条指令。
MEM->AR
从PC位置取出的就是ADR数据,也就是SR要存放的地址,因此需要将ADR取出并存入AR中。
SR->MEM,CC#=0
将SR送入MEM相应位置,并且控制跳转到中断判断中即可。
- 写出新指令完整的微程序,并对每一个子字段的编码取值进行说明;
操作功能 | 微址 | 下址 | CI3~0 | SCC3~0 | MRW | I2~0 | I8~6 | I5~3 | B口 | A口 | SST | SSHSci | DC2 | DC1 | |
STRA [ADR],SR | PC->AR, PC+1->PC | 47 | 00 | 1110 | 0000 | 100 | 011 | 010 | 000 | 0101 | 0101 | 000 | 001 | 011 | 000 |
MEM>AR | 48 | 00 | 1110 | 0000 | 001 | 111 | 001 | 000 | 0000 | 0000 | 000 | 000 | 011 | 000 | |
SR->MEM | 49 | 30 | 0011 | 0000 | 000 | 100 | 001 | 000 | 0000 | 1000 | 000 | 000 | 000 | 001 |
PC->AR,PC+1->PC:
顺序执行,CI3-0、SCC为1110、0000,对内存和IO没有操作,MRW=100,PC使用的寄存器是R5,对应端口为0101。先将PC作为F输出,PC+1->PC,I8-0=010000011,只接受B口,对传入的B口进行加1操作,最后输出A口,将值送入B口 ,AB都为0101,SST=000,SCI=001,无内部总线,有特殊寄存器的使用,DC2=011,DC1=000
MEM->AR:
顺序执行,CI3-0、SCC为1110、0000,对内存写操作,MRW=001,对ALU无控制,I8-0=001000111,AB口设置为0000,SST、SCI=000,需要访问特殊寄存器,DC2=011,无对内部总线的使用,DC1=000
SR->MEM,CC#=0:
下地址为30,跳转到中断,对内存写操作,MRW=000,I8-0=001000100,A口设置1000,将SR对应的A口输出,SST、SCI==000,无特殊寄存器操作,DC2=000,ALU送入内部总线,DC1=001.
(6)写出完整的调试程序,并说明每一条指令的功能
1.R0的值设置为2100H,R1设置为ABCDH
2 e2000写入指令9701,a2100在地址2100处结束
3. g2000执行指令
4. d2100查看各地址处的数据,如果2100处的数据为ABCD,指令正常运行。
(7)要在微程序控制器模拟仿真程序上实现和调试验证。给出进行新指令和验证调试过程的截图(微程序入口地址截图、微程序表截图、编写汇编调试验证的截图。截图要局部放大能看的清楚),结合调试截图,说明一下上述运行结果是如何验证了新指令的正确性的。(注意:学生学号不同,使用的操作码和微程序首地址也不同)。
微程序入口地址截图和微程序表截图:
汇编验证截图:
验证说明:
指令执行后将R1的内容送到地址ADR中,在调试验证中,2100处的地址数据修改为ABCDH,指令执行正确。