首页 理论教育子程序调用与返回指令的应用

子程序调用与返回指令的应用

【摘要】:子程序调用与返回指令共有4条。调用指令与无条件转移的区别在于,调用指令通过自动方式的堆栈操作对断点进行了保护,待子程序返回时可以调用子程序指令的下一条指令处。2.返回指令返回指令共有两条:子程序执行完后,程序应返回到原调用指令的下一指令处继续执行。返回指令有两条,即子程序返回指令RET和中断服务子程序返回指令RETI。

子程序调用与返回指令共有4条。

1.子程序调用指令

子程序调用指令共有两条:

ACALL指令是2字节指令,执行该指令时(PC)加2,获得下一条指令的地址,并把这16位地址压入堆栈,栈指针加2,然后把指令中地址addr11(即A10~A0)的值送入PC的低11位中,高5位不变,获得子程序的起始地址。ACALL指令执行时,被调用的子程序的首地址必须设在包含当前指令(即调用指令的下一条指令)的第1个字节在内的2KB范围内的ROM中,同AJMP一样,建议尽量不采用。

LCALL指令执行时,被调用的子程序的首地址可以设在64KB范围内的ROM空间的任何位置。

调用指令与无条件转移的区别在于,调用指令通过自动方式的堆栈操作对断点进行了保护,待子程序返回时可以调用子程序指令的下一条指令处。(www.chuimin.cn)

2.返回指令

返回指令共有两条:

子程序执行完后,程序应返回到原调用指令的下一指令处继续执行。因此,在子程序的结尾必须设置返回指令。返回指令有两条,即子程序返回指令RET和中断服务子程序返回指令RETI。

RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入程序计数器(PC),从而结束子程序的执行,程序返回到断点处继续执行。

RETI指令是专用于中断服务程序返回的指令,除正确返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。