计算机的组织和架构
在程序执行过程中发生中断时,CPU将执行该指令并将下一条指令的地址存储在堆栈中,并为该中断提供服务,然后再次借助堆栈< / p>
现在,如果CPU正在执行程序的最后一条指令,然后发生中断并将什么返回地址压入堆栈,该怎么办
答案 0 :(得分:0)
不存在程序的最后一条指令。
CPU将继续提取指令-遵循这些指令告诉它的任何路径。
某些体系结构具有特定的指令来停止CPU-这是永久性停止(这样就不再处理中断)或临时性停止。
在后一种情况下,当CPU恢复运行时,它将在停止后重新开始从一条指令中提取指令,并且程序必须意识到这一点。
如果一个程序在操作系统内部执行,则在程序结束时必须将这种情况通知OS(可能像返回一样简单),以便它可以将CPU“指向”另一个程序。 />
操作系统本身永无止境,它无事可做,已安排了一个虚拟任务-通常是一个虚拟任务,它将暂停CPU直到下一个中断。
在某些情况下不应发生中断(例如,在开始处理另一个中断时),在这种情况下,它们将被禁用。
为简单起见,在最坏的情况下,程序必须旋转循环(while (1);
),以防止CPU在代码末尾获取数据。
在体系结构级别,中断在指令边界进行服务,即在“最后一条”指令结束之后和在“下一条”指令之前。
某些架构可能无法强制执行此操作,但这是完全不同的蜡球。
因此,在处理中断时,CPU的状态始终在体系结构上进行定义。
由于不能在调用ret
的过程中处理中断,而是在调用之前或之后进行处理,因此返回地址要么指向ret
本身(如果中断是在处理之前),要么指向在之后的指令呼叫(如果在服务器之后)。