1、跳出跳枝郑入成对出现,也就是说,从主程序用LJMP跳转到子程序,那么在子程序中的RET前升野,必须是用LJMP指令跳回。
2、不成对出现,但是如果子程序是LJMP跳转来的控制,那么在RET前,需要压入返回位置的地址。比如:
主程序:
.....
LJMPSUB01
........
CON:返回地址
......
SUB:子程序
....
SUB01:跳转到的地址
....
MOV DPTR,#CON返回前处理。
PUSH DPH
PUSH DPL
RET
C语言有一个叫做setjmp.h的标卖隐准库提供了两个函数,可以进行跨函数跳转,不过C51支持不支持就不清楚了。。。如果你想这么做,可以混用汇编,使中枝厅用JMP指令,不过不建议在子函数之间跳转,有可能会出错,JMP是没有现成保护的纯跳转,你应该注意你程序碰见搭闭ret指令返回时的位置。。。最简单的一个事就是比如函数1的返回值是个2字节的数,函数2的返回值是个4字节的数,当你从第一个子程序跳到第二个,其实主函数是没有调用函数2,当函数2返回时,他会认为函数返回值仍然是2字节,这个时候就出错了,不同的函数的参数表也是不同的,这也一样会导致程序出错。。。所以这种跳转只是蹩脚适合无参数无返回值的纯过程。。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)