在计算机中,子例程是一系列执行特定任务的程序指令,打包为一个单元。然后,可以在需要执行特定任务的程序中使用该单元。通常对子例程进行编码,以便可以在一个程序执行期间从多个位置(包括其他子例程)多次启动(调用)该子例程,然后一旦该子例程被调用,就可以分支(返回)至调用后的下一条指令。任务完成。它是通过使用“呼叫和返回”指令来实现的。子例程指令的不同类型是
无条件呼叫指令–
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 |
子程序的优点–
- 将复杂的编程任务分解为更简单的步骤。
- 减少程序中的重复代码。
- 启用跨多个程序的代码重用。
- 提高易处理性或简化程序调试。