一. 实验目的
1. 进一步了解和掌握计算机各部分的组成及相互关系;
2. 了解微指令的执行过程,掌握微程序的设计方法;
3. 理解动态微程序设计的概念;
4. 进一步认识和掌握计算机各指令的执行过程,搞清楚计算机的运行原理。
二. 实验内容
设计一条指令,其功能是把一个通用寄存器中的内容进行半字交换,即将其高低位字节
的内容对换。
三. 实验器材
TEC-2 实验计算机、计算机各一台
四. 实验分析与设计
1. 指令格式
D4
DR
X
2. 指令功能
把存放在寄存器 DR 里面的双字节数据高低字节内容互换。
3. 设计分析
根据指令的功能和指令格式,设置循环计数器 R/C 的值以控制联合右移的循
环次数,同时将 DR 的值放置于 Q 寄存器中;然后将其进行循环左移操作,直到
循环计数器的值变为 0,并把右移结果放置于 Q 寄存器中。
4. 微程序
100:7→R/C,DR→Q: 0001
0000
101:左移 8 位:
102: CC=0:
0029
C400
0800
0300
80B0
E0B0
9030
0008
0208
0008
;条件转移,CC=0 则转移。
;并转向 A4H 地址执行后续处理程序。
5. 加载到微控存程序段
(1) 用 A 命令输入加载微码的程序,在命令行提示符状态下输入:
>A800↙
屏幕显示:
0800:
之后继续输入:
0800:MOV R1,900 ↙ ;微码在内存中的首地址
0802:MOV R2,3↙
;微指令条数
0804:MOV R3,100↙ ;微码在微控存中的首地址
0806:LDMC↙
0807:RET↙
0808: ↙
;加载微码指令,将微码指令加载到控存
;结束程序
(2)用 G 命令运行加载微码的程序,在命令行提示符状态下输入:
>G800↙
微码便装入起始地址为 100H 的微控存中。
6. 运行程序段
(1) 用 A 命令输入程序,在命令行提示符状态下输入:
>A820↙
屏幕显示:
0820:
之后继续输入:
0820:MOV R1,CDAB↙
0822:NOP↙
0823:RET↙
;寄存器 DR 的值
(2)用 E 命令输入新指令,在命令行提示符状态下输入:
>E822↙
屏幕显示:
0822:
之后继续输入:
D410
(3)用 U 命令观察输入程序,在命令行提示符状态下输入:
>U820
7.运行结果
用 G 命令运行程序,在命令行提示符状态下输入:
>G820
在命令行提示符状态下输入:
>R
得出结果 R1=ABCD,运行正确。
五. 实验心得
总体来说,在前一次微程序设计实验的基础上,由于也是微程序设计相关实验,
从上次实验已经初步理解和掌握了微程序设计的基本方及各种指令的执行过程,故
做起来相对顺手。
通过实验,我基本实现了本次实验的实验目的,在设计半字交换指令的过程中
更进一步地理解了微程序的设计方法,对于平时简单的操作在计算机内部具体是如
何执行和实现的也有了更深的了解。在实验过程中,经过与同学的讨论,以及自己
的思考,发现了到不少要注意的细节。
首先,交换指令操作的是双字节的数,而且概数存放在自己指定的通用寄存器
DR 中,半字交换即是把 DR 的值的低字节内容和高字节内容相互调换。其次,实
现高低字节内容交换的方法很多,其中就有通过左移和右移实现这两种方法,而经
过对比,左移比较容易实现,但非常需要注意的是左移的次数,即循环计数器的设
置要格外小心,因为要实现 8 次左移操作,表面上很容易误认为 R/C 的值为 8,不
过由于在循环计数器减一之前 DR 的值已经左移了一次,故 R/C 的值设为 7 即可。
另外,由于以为操作只是对一个数进行操作,故指令格式的设计为 D4 DR X 即可,
而不用第二个操作数。
以上这些在以后的实验中仍然需要格外注意。