中断服务程序执行完毕后返回原程序,恢复堆栈中保存的断点地址CS:IP,以及标志寄存器。
中断返回指令IRET实现从中断服务程序返回原程序,整个过程sp一共加6,其过程如下:
●pc出栈恢复:IP←SS:[SP],SP←SP+2;CS←SS:[SP],SP←SP+2
●标志寄存器出栈恢复:FLAGS←SS:[SP],SP←SP+2
相同点:都是从主函数转到子函数,子函数执行完后又返回主函数。
不同点:
一、执行方式不同
1、中断服务程序:中断函数是发生中断后,自动执行的,不需要主函数调用,是否执行,取决于相应的中断事件是否发生。
2、普通子程序:普通子函数要主函数调用才能执行。
二、使用情况不同
1、中断服务程序:中断函数在中断发生时,先进入中断入口地址,再通过中断入口地址处放置的一条无条件转移指令,使程序执行转向中断服务程序入口。
2、普通子程序:普通子函数调用时,直接进入函数入口地址。
三、定义方式不同
1、中断服务程序:中断服务程序用interrupt关键字来定义。
2、普通子程序:是一个大型程序中的某部分代码,由一个或多个语句块组成。
1子程序调用是预先安排好的,程序中断是随机发生的;
2调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;
3子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址
中断服务程序 调用子程
序随机产生的 程序中事先安排好的
保护断点、保护现场 只保护断点
为外设服务和处理各种事件 为主程序服务
相同点:都是让cpu从主程序转去执行子程序,执行完毕又返回主程序。
不同点:中断服务程序是随机的,而普通子程序是预先安排好的;中断服务子程序以reti结束,而一般子程序以ret结束。reti除将断点d回pc动作外,还要清除对应的中断优先标志位,以便新的中断请求能被响应。
以上就是关于进入中断服务子程序时,SP怎么变化全部的内容,包括:进入中断服务子程序时,SP怎么变化、中断服务程序与普通子程序有哪些相同和不同之处、调用中断服务程序和调用子程序有何区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)