8085 微处理器中的复位指令 (RSTn)


在 8085 指令集中,RSTn 实际上代表“Restart n”。在这种情况下,n 的值只能从 0 到 7。因此,存在八种可能的 RST 指令,例如 RST 0、RST 1、…、RST 7。它们是 1 字节的调用指令。在功能上,RST n 指令类似于

RST n = CALL n*8

例如,让我们考虑 RST 4 在功能上等效于 CALL 4*8,即 CALL 32 = CALL 0020H。RST 2 的优点在于它只有 1 字节长,而 CALL 0010H 则有 3 字节长。因此,RST 指令对于分支到常用子程序很有用。

助记符,操作数
操作码(十六进制)
二进制
字节
目标地址 (n*8)
RST 0
C7
1100 0111
1
0000H
RST 1
CF
1100 1111
1
0008H
RST 2
D7
1101 0111
1
0010H
RST 3
DF
1101 1111
1
0018H
RST 4
E7
1110 0111
1
0020H
RST 5
EF
1110 1111
1
0028H
RST 6
F7
1111 0111
1
0030H
RST 7
FF
1111 1111
1
0038H


在上表中,已经表明,如果我们分析 RSTn 的十六进制代码,我们会发现中间的 3 位表示 n 的值(如表中突出显示的那样)。字节中的其他 5 位提供 RST 的代码。

让我们考虑 RST 4 作为此类指令的一个示例。它是一个 1 字节指令。它在功能上与 CALL 0020H = PUSH PC + JMP 0010H 相同。它导致分支到从内存地址 0020H 开始的子程序。类似地,RST 5 导致分支到 5*8 = 0028H 处的子程序。因此,从位置 0020H 开始的子程序不应超过内存位置 0027H。因此,最多只有 8 个位置可用于子程序,这通常太小,无法容纳子程序主体。此限制可以通过分支到其他内存位置(例如 4050H)处的子程序来克服。这是通过 RST 4 指令和内存位置 0020H 处的 JMP 4050H 指令的组合来实现的,如下面的图所示。

由于执行 RST 4 而导致堆栈内容受到影响的方式如下所示。

由于执行 RST 4 而导致堆栈内容受到影响的方式如下所示。


之前
之后
(PC)
2021H
0020H
(SP)
5000H
4FFEH
(4FFFH)
任何值
20H
(4FFEH)
任何值
21H


在图中,主程序从地址 2000H 开始,指令 LXI SP, 5000H 用于将 SP 初始化为该内存地址。主程序在地址 2050H 处具有终止指令 HLT。在主程序的地址 2020H 处,指令为 RST 4。因此,计算出的目标地址将为 4*8 = 32 = 0020H。因此,返回地址 2021H 将被推送到堆栈顶部。因此,20H 将被推送到堆栈位置 4FFFH,而 21H 将被推送到地址 4FFEH。因此,更新后的 SP 地址将为 4FFEH。并且控制将转移到地址 0020H。在该地址,我们有指令 JMP 4050H。因此,程序控制将分支到该地址 4050H。此子程序在地址 4080H 处具有最后一个指令,指令为 RET。因此,返回的 2 字节地址将从堆栈顶部弹出。因此,16 位返回地址将为 2021H,并且 SP 将再次初始化为 5000H。因此,主程序将恢复执行,并在地址 4080H 处使用指令 HLT 正常终止。

针对此指令 **RST 4** 执行的时间图如下所示:


**总结** - 因此,此指令 **RST 4** 需要 1 字节、3 个机器周期(操作码获取、内存写入、内存写入)和 12 个 T 状态才能执行,如时间图所示。

更新于:2020 年 6 月 27 日

10K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告