无条件跳转:AJMP LJMP SJMP
调用子程序:ACALL LCALL SCALL
acall是调用指令,在调用子程序前,单片机会自动将PC当前地址压入堆栈,当在子程序中执行RET指令后,单片机会自动将堆栈中的数据返回到PC,这就实现了调用后还能返回原处的功能。
AJMP是无条件转移,转移时只是简单的将 AJMP 后给顶的地址覆盖PC完事,就是遇到RET也不会返回到原处!
RET指令后就是将堆栈中的数据返回到PC计数器。所以如果堆栈没压入地址,随便执行RET会使程序混乱的。
一个是跳转,一个是调用,跳转是没RET可言的,不会将当前PC值PUSH进栈里,
而这里DELAY的RET 会返回AJMP 是因为当中断产生时PUSH进栈里的PC值?
调用子程序要用CALL,不能用跳转,两个不一样,CALL是要保护现场的,跳转没有