一、实验目的
-
学习实现程序转移的硬件机制。
-
掌握堆栈寄存器的使用。
二、实验原理
-
根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当
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:11PC:11③将
PC改为22H显示
ST:11PC:22④将
PC加到25H显示
ST:11PC: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次,再进行停机操作。