一、实验目的
-
学习实现程序转移的硬件机制。
-
掌握堆栈寄存器的使用。
二、实验原理
-
根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当
LDPC
有效时,如果此时DUBS
上的值就是转移的目标地址,则此目标地址被打入PC
,从而实现程序的转移;若LDPC
为0
是附带条件的,就形成“条件转移”。实验箱依靠“PC打入电路”实现“有进位”时转移和“计算结果为0
”时转移,以及无条件转移。 -
为了实现返回时转移的目标一定是调用时转移的出发点,在调用转移时必须把出发地址保存起来,保存的位置应具备同时具备“不被一般用户所知或改变”以及“返回转移时能方便地找到它”的特点。
-
本实验箱所使用的子程序调用和返回的结构由
PC
电路和ST
组成。
三、实验内容
实验任务一:手动方式实现子程序调用转移过程
假设调用子程序指令的下一条指令存放在11H
单元,子程序的入口地址为22H
。
(1)实验步骤
-
注释仪器,打开电源,手不要远离电源开关,随时准备关闭电源,注意各数码管、发光管的稳定性,静待10秒,确信仪器稳定、无焦糊味。
-
按
Reset
键初始化系统,并设置实验箱进入手动模式。 -
按照下表对实验箱线路进行连接:
-
将
11H
存入PC
寄存器。用开关K23~K16
,设置数值为11H
,并按下表设置对应信号:
按下STEP
键,将数据送PC
。
-
将
PC
中的数据压入ST
寄存器中。按下表设置对应信号:
设置完毕后按下STEP
键,将数据压入ST
寄存器中。
-
将
22H
存入PC
寄存器。用开关K23~K16
,设置数值为22H
,并按下表设置对应信号:
按下STEP
键,将数据送PC
。
-
将
PC
加到25H
。按下表设置对应信号:
按STEP
键,观察PC
寄存器变化。
(2)实验现象
①将
PC(11H)
存入ST
( 栈寄存器 )显示ST:00
PC:11`
②将
PC
压入堆栈ST
中显示
ST:11
PC:11
③将
PC
改为22H
显示
ST:11
PC:22
④将
PC
加到25H
显示
ST:11
PC:25H
实验任务二:手动方式实现子程序返回转移过程
(1)实验步骤
- 保持实验任务一的接线,按下表设置对应信号:
按下STEP
,观察实验箱情况。
(2)实验现象
ST
显示:11
;PC
显示:11
实验任务三:编程实现OUT
寄存器交替显示11
和55
要求交替频率为可以清晰辨识,且不小于每秒一次。(实验箱的频率为114.8Hz)
(1)实验步骤
-
拔下实验箱上的接线,并将开关
K23-K16
全部置0
,开关K15~K0
全部置1
,按下Reset
键初始化系统。 -
打开电脑上的
CP226
软件,点击源程序编写如下代码: -
将文件保存为
.asm
文件,并进行编译和下载。 -
通过单微指令运行文件,观察运行情况并记录实验结果。
(2)实验现象
将程序编译和下载后,发现实验箱上的
OUT
寄存器能正常交替显示11
和55
。
(3)实验结论
-
通过手动方式实现子程序调用转移以及返回转移,验证了
PC
寄存器既可以通过打入初值功能实现程序转移,也可以通过自动加1
功能实现程序顺序执行。 -
通过一系列正确的设计,我们成功地通过
CP226
软件完成了“让OUT
寄存器交替显示11
和55
”的功能。
四、建议
-
在测试程序时,如果发现
OUT
寄存器交替显示的频率过快,应注意L1
循环的设计是否合理。 -
在编写汇编代码时,要注意大小写,当前串行口连接无效时,可切换其他串行口进行实验。
五、体会
通过此次实验,我对程序转移的硬件机制有了更深入的理解。在实验过程中,我最初设计的延时程序段无论怎么调整交替显示的频率还是很快,经仔细分析汇编代码才发现原来自己虽然写了循环递减,但实际上程序运行的时候只减了一次就跳出了循环,这提醒我在后续进行实验时要考虑地更加深入一些。
六、思考题
若要求11
和55
各显示50
次后停机,应该如何修改程序?
答:要实现该功能,应在一个寄存器X
中存入100
,每当11
和55
通过OUT
输出一次,就将X
减1
,当X
为0
时,即表示11
和55
已经各显示50
次,再进行停机操作。