汇编语言RET是返回到哪里?

汇编语言RET是返回到哪里?,第1张

改昌李RET指令子程序的最后一条指令,即恢复断点,返回主程序。 没有要求RET指令非要和迅余哪一条指令要配对使用。RET是子程序返回指令,放核迟在子程序的结尾,当子程序执行完后,靠该指令返回主程序。

MCS-51单片机汇编语言中,没有SP这条指令,只有针对SP *** 作的指令。51单片机中SP是堆燃神伍栈指针寄存器,存放着当前堆栈地址。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。除了初始化堆栈时直接给SP赋值,SP显式存在,其它的对SP有影响的指令,对SP的 *** 作都是隐式的,就是说SP并不出现在指令 *** 作数当中。例如:MOVSP,#80H初始堆栈指针,(SP)=80HLCALLXXXX调用XXXX处的子程序,下一条指令PC值压栈,(SP)=(SP)+2NOP子程序返回时,RET指令从堆栈中d出PC值,所以会返回到这里,(SP)=(SP)-2PUSHACC累加器A的内容压栈保存,(SP)=(SP)+1POPB堆栈内保存的累加器A的内容d出到B寄存器中,(瞎轿SP)=(SP)-1使用PUSH、POP指令使用堆栈,要注意进出栈的匹皮或配,否则将引起不可预期的后果。

子程序的末尾一定要有RETI指令,子程序的调用是LCALL和ACALL。

RETI是中断返回指令,这条指令的功能和RET指令相似,2条指令的不同之处是:本指令清除了中断响应时,被置1的MCS-51内部不可寻址的 “优先级生效”触发器清零。

执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。中断指令“RETI”作为中断跳出指令,除了将堆栈中保存着的地址取出,送回PC,使程序从主程序的中断处继续往下执行的作用外,还有将“优先级生效”触发器清零的功能。

扩展资料

单片机汇编指令中RETI和RET的区别

通常情况下,在普通的汇编子程序中用RET做返回,在中断服务子程序中用RETI起中断返回作用。两条指令都能从堆栈中d出断点地址并装入PC中,使CPU回到原来主程序的断点处继续运行。

然而,RET和RETI有橡搏本质的区别:当某一中断源响应后,单片机中的标志寄存器flag H和flag L其中的一个将会自动置位,用于阻止比它低级或同级的中断触发。RETI可以清除“优先级激活触发器”(即flag寄存器),以保证后续梁粗祥中断源的及时响应。

所以,当把RETI替换为RET后,该程序在第一次运行时可能不会出凳培错,但在第二次运行时就会出错了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12379759.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存