组成原理实验九 程序转移机制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DBUS0~7
P0 P7
Y
CK
~ ~
Q0 Q7
A0
Y
LDPC RST
151
PCOE
CLK PE 161 MR CEP CET
PCOE-D
A7 B7 E 245 DIR A0 B0
~
B0
~
A0~A7
程序存 储器
6116
A7 B7 E 245 DIR
~
~
DBUS0~7
E
Vcc
PC电路
PC打入电路
一.背景知识(3)
一.背景知识(4)
4. ST寄存器结构和子程序调用与返回控制信号:实验箱子程序调用和 返回的结构由PC电路和ST电路组成。调用转移时,PC的当前值(断点) 经下面的245送上DBUS,进入ST保存;然后给PC打入子程序入口地址 (调用指令携带的目标地址)完成转子程序。返回转移时,返回指令开 启ST的输出,并给出PC打入信号(无条件转移),于是ST保存的断点经 由DBUS打入PC,实现子程序返回。请同学独立分析下图各信号的时序。
四. 参考资料 实验指导书 P37、38、74-79 五. 思考题 若要求11和55各显示50次后停机,应该 如何修改程序?
下次实验预习 实验指导书P37-38,P64-66,p102,P108
6116
A7 B7 E 245 DIR
~
~
PC电路
Vcc
二. 实验任务
1.用手动方式实现子程序调用转移过程。 2. 用手动方式实现子程序返回转移过程。 (假设PC顺序执行至11H时转子,子程序的入 口地址为50H,子程序顺序执行至55H时返回)
3. 编程实现OUT寄存器交替显示11和55,交替 频率为可以清晰辨识,且不小于每秒一次。 (实验箱的工作频率为:114.8Hz。)
计算机组成原理实验课程
实验九
实验目的:
1. 学习实现程序转移的硬件机制。 2. 掌握堆栈寄存器的使用。
程序转移机制
教学目标
1. 深入理解PC寄存器自动加1和打入初值功能 对计算机程序的深远影响。
2.掌握代码的分段连续存放技术和实现。
一.背景知识(1)
1. 程序转移:在任何一个程序段的内部,执行流程有顺序、分支、循环 三种,而程序段之间又有相互调用(例如:调用子程序、中断服务、子 程序返回、进程调度、任务切换„„),看似很复杂,其实计算机硬件 用非常简单的技术解决了这些问题。
分支和循环总是可以相互替代,所以也常说程序段内的执行流程有 顺序和转移两种,而程序段之间的调用也只是把执行流程转移到了另外 一个程序段上。所以,任何复杂的程序流程,在硬件实现机制上只有两 种情况:顺序执行和转移。硬件实现这两种情况的技术很简单: PC寄存器的自动加1功能实现程序顺序执行。 PC寄存器的打入初值功能实现程序转移。
三. 实验过程提示(1)
任务1:由背景知识4,这个转移分两步: 1. 把当前PC值打入ST寄存器保存,使用STEN和PCOE_D(x2x1x0来选) 信号。
2. 目标地址打入PC,使用LDPC(ELP)信号,数值直接通过IN打入。
任务2: 由背景知识4,只要使ST的输出打入PC即可,用STOE(x2x1x0来选) 和LDPC信号。 任务3: 1.编一个程序段,分别实现在OUT中显示11和55。 2. 编一个延时程序段(子程序)来延时。用循环指令,退出条件A=0, 循环变量 A=A-1。或类似方法。
DBUS 0~7
CK LDPC RST
1D 1Q 8D
X2-0 STOE
P0
~
8Q
~
P7
~ ~
Q0
A0
Q7
OC 574
CLK
ST电路
12 STEN X2-0 PCOE-D
OR PCOE
CLK PE 161 MR CEP CET
A7 B7 E 245 DIR A0 B0
~பைடு நூலகம்
B0
~
A0~A7 程序存 储器
3. 子程序调用和保护断点:子程序的调用和返回是两次转移,特殊点 在于:返回时转移的目标一定是调用时转移的出发点。为实现这个特点, 在调用转移时必须把出发地址(断点)保存起来。这个“保存”还必须 有两个要求:1.不被一般用户所知或改变。2.返回转移时能方便地找到 它。第一个要求决定了它不能被保存在数据存储区或程序存储区,第二 个要求决定了返回指令的目标地址获得方法与其它转移指令完全不同, 返回指令的目标地址一定从这个特殊的“保存区”得到,指令本身不需 要再带目标地址,而其他转移指令必须自带目标地址。再考虑到子程序 调用的“可嵌套性”,这个“保护区”里的数据应该有“先入后出”特 点,这与“货栈”中堆放的货物相似,故称其为“堆栈”。堆栈的容量 决定了子程序的嵌套深度。(高级语言程序也建立“堆栈”,但是用变 量或数组变量在数据存储区开辟的一个堆栈功能子区,与这里的堆栈不 同。) 各系统实现堆栈的技术各不相同。实验箱系统用一个锁存器(574) 构成堆栈寄存器(ST)由于574只能存一个字节,所以本系统的子程序 调用深度只有1级,不能形成子程序嵌套。
若LDCP为0是附带条件的,就形成“条件转移”。实验箱依靠“PC 打入电路”实现“有进位”时转移和“计算结果为零”时转移,以及无条 件转移。
Cy_IN Z
151选择表
C 0 0 0 0 1 B A 0 0 0 1 1 0 1 1 XX Y Cy Z 1 1 0
Vcc
JIR2 JIR3 16 ELP
I0 I1 I2 I3 I4 ~ I7 A B C
当转移目标为本段内未执行过的指令时就形成分支,当转移目标是 本段内执行过的指令时就形成循环,当转移目标为其他段的指令时就形 成段间调用。可见:转移操作决定于“给PC赋值”,而转移类型决定于 “所赋的值同当前指令的关系”。
一.背景知识(2)
2. 实验箱系统的程序转移硬件机制:当LDCP有效(0)时,PC被打入新值 (赋初值),实现程序的转移。这一刻DBUS上的值就是转移的目标地址 (被打入PC),这个地址同转移指令所在地址的关系决定了转移类型。