如果在执行程序的最后一条指令期间发生中断,则压入堆栈的 return 地址是多少?
What is the return address that is pushed onto the stack if interrupt occurs during the execution of the last instruction of a program?
计算机组织与体系结构
当程序执行过程中发生中断时,CPU 执行该指令并将下一条指令的地址存储在堆栈中并为中断服务,然后再次恢复执行先前的程序指令使用堆栈的帮助
现在如果 CPU 正在执行程序的最后一条指令然后发生中断并且 return 地址被压入堆栈怎么办
不存在程序的最后一条指令。
CPU 将继续获取指令 - 遵循这些指令指示的任何路径。
一些体系结构有一个特定的指令来停止 CPU - 这要么是永久停止(这样就不再提供中断服务)要么是临时停止。
在后一种情况下,当 CPU 恢复时,它将重新开始从暂停后的指令中获取指令,程序必须意识到这一点。
如果程序在操作系统内执行,当程序结束时,它必须通知 OS 这种情况(可能就像执行 return 一样简单)以便它可以 "point" CPU 在另一个节目中。
OS 本身永远不会结束,如果无事可做,则会安排一个虚拟任务 - 通常会暂停 CPU 直到下一次中断。
在某些情况下不应发生中断(例如,在开始处理另一个中断时)——在这种情况下,它们将被禁用。
简单来说,在最坏的情况下,程序必须循环 (while (1);
) 以防止 CPU 在代码末尾获取。
在体系结构级别,中断服务于指令边界,即在 "last" 指令结束之后和 "next" 指令之前。
某些架构可能不会强制执行此操作,但这是完全不同的蜡球。
因此,当中断服务时,CPU 的状态始终在体系结构上定义。
由于不能在调用的 ret
指令期间提供中断,而是在调用之前或之后提供中断,因此 return 地址指向 ret
本身(如果中断在之前提供)或调用后的指令(如果是服务器之后)。
计算机组织与体系结构
当程序执行过程中发生中断时,CPU 执行该指令并将下一条指令的地址存储在堆栈中并为中断服务,然后再次恢复执行先前的程序指令使用堆栈的帮助
现在如果 CPU 正在执行程序的最后一条指令然后发生中断并且 return 地址被压入堆栈怎么办
不存在程序的最后一条指令。
CPU 将继续获取指令 - 遵循这些指令指示的任何路径。
一些体系结构有一个特定的指令来停止 CPU - 这要么是永久停止(这样就不再提供中断服务)要么是临时停止。
在后一种情况下,当 CPU 恢复时,它将重新开始从暂停后的指令中获取指令,程序必须意识到这一点。
如果程序在操作系统内执行,当程序结束时,它必须通知 OS 这种情况(可能就像执行 return 一样简单)以便它可以 "point" CPU 在另一个节目中。
OS 本身永远不会结束,如果无事可做,则会安排一个虚拟任务 - 通常会暂停 CPU 直到下一次中断。
在某些情况下不应发生中断(例如,在开始处理另一个中断时)——在这种情况下,它们将被禁用。
简单来说,在最坏的情况下,程序必须循环 (while (1);
) 以防止 CPU 在代码末尾获取。
在体系结构级别,中断服务于指令边界,即在 "last" 指令结束之后和 "next" 指令之前。
某些架构可能不会强制执行此操作,但这是完全不同的蜡球。
因此,当中断服务时,CPU 的状态始终在体系结构上定义。
由于不能在调用的 ret
指令期间提供中断,而是在调用之前或之后提供中断,因此 return 地址指向 ret
本身(如果中断在之前提供)或调用后的指令(如果是服务器之后)。