如果在执行程序的最后一条指令期间发生中断,将被压入堆栈的返回地址是什么?

时间:2018-09-11 05:41:54

标签: computer-science

计算机的组织和架构

在程序执行过程中发生中断时,CPU将执行该指令并将下一条指令的地址存储在堆栈中,并为该中断提供服务,然后再次借助堆栈< / p>

现在,如果CPU正在执行程序的最后一条指令,然后发生中断并将什么返回地址压入堆栈,该怎么办

1 个答案:

答案 0 :(得分:0)

不存在程序的最后一条指令。

CPU将继续提取指令-遵循这些指令告诉它的任何路径。
某些体系结构具有特定的指令来停止CPU-这是永久性停止(这样就不再处理中断)或临时性停止。
在后一种情况下,当CPU恢复运行时,它将在停止后重新开始从一条指令中提取指令,并且程序必须意识到这一点。

如果一个程序在操作系统内部执行,则在程序结束时必须将这种情况通知OS(可能像返回一样简单),以便它可以将CPU“指向”另一个程序。 /> 操作系统本身永无止境,它无事可做,已安排了一个虚拟任务-通常是一个虚拟任务,它将暂停CPU直到下一个中​​断。
在某些情况下不应发生中断(例如,在开始处理另一个中断时),在这种情况下,它们将被禁用。

为简单起见,在最坏的情况下,程序必须旋转循环(while (1);),以防止CPU在代码末尾获取数据。


在体系结构级别,中断在指令边界进行服务,即在“最后一条”指令结束之后和在“下一条”指令之前。 某些架构可能无法强制执行此操作,但这是完全不同的蜡球。
因此,在处理中断时,CPU的状态始终在体系结构上进行定义。
由于不能在调用ret的过程中处理中断,而是在调用之前或之后进行处理,因此返回地址要么指向ret本身(如果中断是在处理之前),要么指向在之后的指令呼叫(如果在服务器之后)。