子程序调用指令 CALL(Sub Routine Call)的功能指令编号为 FNC01,操作数为 P0~P127(不包括 P63),占用 3 个程序步,允许用变址寄存器修改。子程序可嵌套调用,最多嵌套 5 级。子程序返回指令 SRET(Sub Routine Return)功能指令编号为 FNC02,无操作数。
当图 4-7 中 X10 为 ON 时,CALL 指令使程序跳到标号 P8 处、子程序被执行,执行完 SRET 指令后返回到主程序中 CALL 指令的下一条指令。标号应写在 FEND(主程序结束)指令之后,同一标号只能出现一次;CJ 指令中用过的标号不能再用,但不同位置的 CALL 指令可调用同一标号的子程序。
如图 4-8 所示,CALL(P) P11 指令仅在 X0 由 OFF 变为 ON 时执行一次。在执行子程序 1 时,若 X1 为 ON,则 CALL P12 被执行、程序跳到 P12 处嵌套执行子程序 2;执行完第二条 SRET 指令后返回子程序 1 中 CALL P12 的下一条指令,执行完第一条 SRET 指令后返回主程序中 CALL P11 的下一条指令。
图 4-7 子程序调用

图 4-8 子程序的嵌套调用
