义隆单片机CALL 与JMP的区别

本文详细解释了CALL子程序调用与JMP无条件跳转指令的区别,CALL指令会将返回地址压栈以备调用结束后返回,而JMP不压栈。此外还介绍了在不同情况下的跳转方式及堆栈的使用原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CALL 子程序调用指令:

      CALL 是调用,调用的程序跑完了,通过RET返回调用的后一句,是要压栈的。


JMP  是无条件跳转,不会压栈。



在使用JMP 或者 CALL进行程序跳转时

如果是仅仅局限在当前页的范围内,则不用修改(A11、A10),直接将目标地址赋值给A9~A0,【对于JMP指令,这样就行了;对于CALL指令还要将要执行的下一条指令PC+1入栈,以便CALL执行完毕之后,程序正确返回】如果需要跳转到别的页中,则需要首先通过设置R3的PS0、PS1进而载入到PC的A11 A10
如果使用指令直接修改的PC(R2)的值,(如:MOV  R2 A 或者 ADD R2 A 或者 BC R2,0)则PC低8位以上的位会被清零,所以之后产生的 跳转会被限制在也页面的256地址。


堆栈
EM78X有五级堆栈,遵循后入先出的原则实现程序多至五级嵌套调用.通常堆栈使用如下: 
当CALL和中断响应时PC+1压栈; 
当子程序或中断返回,执行RET、RETL(带参数返回)、RETI(中断返回),将栈顶值(栈1)弹回程序计数器PC、同时将堆栈2的值拷
贝到堆栈1,堆栈3的值拷贝到堆栈2,以此类推。
要注意的是RET、RETL、RETI指令并没有改变R3中的PS0~PS1位便返回到原来调用程序的页面,所以当从一次跨页的子程序
调用返回时,一定要用指令恢复R3中原先的PS0、PS1值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值