8085微处理器中的无条件调用和返回指令


有时在8085汇编语言编码中,我们需要多次重复某个程序段。在这种情况下,我们可以定义子程序。在这些子程序中,我们可以包含我们可重复使用的指令集或代码。然后,根据需要,我们将相应地调用这些子程序。子程序也可以称为过程。

每当需要执行子程序中的指令时,我们使用**CALL**指令将程序控制分支到子程序。**CALL**是3字节指令,其中1字节用于操作码,2字节用于子程序的地址。**CALL**助记符代表“调用子程序”。执行子程序中编写的指令后,我们将希望将控制返回到**CALL**指令之后编写的下一条指令,然后我们将使用助记符**RET**。这里**RET**代表从子程序返回。RET是1字节指令。在下表中,我们提到了**CALL**和**RET**指令的代码和字节数:



助记符,操作数
操作码(十六进制)
字节数
CALL 标签
CD
3
RET
C9
1


让我们考虑以下示例代码以更好地解释:

地址
十六进制代码
助记符
注释
2000
31
LXI SP, 5000H
SP ← 5000H. 初始化SP
2001
00


地址的低位字节
2002
50


地址的高位字节
2003
3E
MVI A, 00H
A ← 00H,初始化累加器
2004
00


操作数为00H
2005
06
MVI B, 01H
B ← 01H
2006
01


操作数为01H
2007
0E
MVI C, 02H
C ← 02H
2008
02


操作数为02H
2009
16
MVI D, 03H
D ← 03H
200A
03


操作数为03H
200B
CD
CALL 2013H
调用地址为2013H的子程序。因此,程序的控制将转移到2013H位置。下一个指令的返回地址200EH(即下一条指令的地址)将被压入堆栈顶部。结果,4FFFH(SP – 1)将包含20H,而4FFEH(SP – 2)将分别包含0EH。
200C
13


地址的低位字节
200D
20


地址的高位字节
200E
21
LXI H, 4050H
HL ← 4050H,初始化HL寄存器对。执行RET指令后,控制将返回到此指令。4050H将具有值06H,即01H + 02H + 03H = 06H的最终和
200F
50


地址的低位字节
2010
40


地址的高位字节
2011
77
MOV M, A
M ← A,累加器的内容将被传输到HL寄存器对指向的内存位置4050H
2012
76
HLT
程序结束。
2013
80
ADD B
A ← A + B
2014
81
ADD C
A ← A + C
2015
82
ADD D
A ← A + D
2016
C9
RET
将控制返回到地址200EH。返回地址200EH将从堆栈顶部弹出。因此,从地址4FFEH弹出0EH,从地址4FFFH弹出20H,SP将相应地将其内容恢复为初始地址5000H。


针对此指令**CALL 2013H**执行的时序图如下:


**总结** − 因此,此指令**CALL**需要3个字节、5个机器周期(操作码提取、内存读取、内存读取、内存写入、内存写入)和18个T状态才能执行,如时序图所示。

针对此指令**RET**执行的时序图如下:

**总结** − 因此,此指令**RET**需要1个字节、3个机器周期(操作码提取、内存读取、内存读取)和10个T状态才能执行,如时序图所示。

更新于:2020年6月27日

13K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告