📜  8085中的子例程

📅  最后修改于: 2021-06-28 19:06:59             🧑  作者: Mango

在计算机中,子例程是一系列执行特定任务的程序指令,打包为一个单元。然后,可以在需要执行特定任务的程序中使用该单元。通常对子例程进行编码,以便可以在一个程序执行期间从多个位置(包括其他子例程)多次启动(调用)该子例程,然后一旦该子例程被调用,就可以分支(返回)至调用后的下一条指令。任务完成。它是通过使用“呼叫和返回”指令来实现的。子例程指令的不同类型是

无条件呼叫指令–
CALL地址是无条件调用指令的格式。执行该指令后,程序控制权转移到子例程,该子例程的起始地址在指令中指定。 PC(程序计数器)的值传输到存储器堆栈,SP(堆栈指针)的值递减2。

条件呼叫指令–
在这些指令中,只有在满足条件的情况下,程序控制权才会转移到子程序中,并且PC的值会被压入堆栈。

INSTRUCTION PARAMETER COMMENT
CC 16-bit address Call at address if cy (carry flag) = 1
CNC 16-bit address Call at address if cy (carry flag) = 0
CZ 16-bit address Call at address if ZF (zero flag) = 1
CNZ 16-bit address Call at address if ZF (zero flag) = 0
CPE 16-bit address Call at address if PF (parity flag) = 1
CPO 16-bit address Call at address if PF (parity flag) = 0
CN 16-bit address Call at address if SF (signed flag) = 1
CP 16-bit address Call at address if SF (signed flag) = 0

无条件退货说明–
RET是用于标记子例程结束的指令。它没有参数。执行该指令后,程序控制权从停止的地方转移回主程序。从存储器堆栈中检索PC(程序计数器)的值,而SP(堆栈指针)的值增加2。

有条件退货说明–
通过这些指令,程序控制权被转移回主程序,并且只有在满足条件的情况下,PC的值才会从堆栈中弹出。没有用于返回指令的参数。

INSTRUCTION COMMENT
RC Return from subroutine if cy (carry flag) = 1
RNC Return from subroutine if cy (carry flag) = 0
RZ Return from subroutine if ZF (zero flag) = 1
RNZ Return from subroutine if ZF (zero flag) = 0
RPE Return from subroutine if PF (parity flag) = 1
RPO Return from subroutine if PF (parity flag) = 0
RN Return from subroutine if SF (signed flag) = 1
RP Return from subroutine if SF (signed flag) = 0

子程序的优点–

  1. 将复杂的编程任务分解为更简单的步骤。
  2. 减少程序中的重复代码。
  3. 启用跨多个程序的代码重用。
  4. 提高易处理性或简化程序调试。