【发布时间】:2018-09-22 09:37:09
【问题描述】:
我知道这个问题似乎很笼统,因为它可能取决于平台,
但我了解过程/函数调用,将返回地址推送到堆栈和局部变量等的汇编代码可以是调用者函数或被调用者函数的一部分。
当发生硬件异常或中断时,程序计数器将通过异常表获取异常处理程序的地址,但存储状态、返回地址等的实际代码在哪里。或者这是在中断和异常的硬件级别?
提前致谢
【问题讨论】:
-
有些架构不保存任何东西,有些只保存最小的上下文。当由 SW 完成时,代码是 ISR 的一部分。当由硬件完成时,它要么是硬连线的,要么是微程序的。
-
但是至少必须保存返回地址?和状态寄存器可能吗?
-
这太宽泛了,因为它是特定于架构的,您可以简单地在您拥有或应该拥有的此类开发文档中查找答案。最小值是返回地址,有些架构为此有一个隐藏堆栈,有些架构有备用寄存器组。并且一些架构扩展了为您保存状态字(标志等),或者可能为您以及 pc 和 psr 保存一些寄存器。您对哪种架构感兴趣,您不了解手册的哪些部分?
-
例如,我会对 ARM 感兴趣。我主要想知道返回地址等是否通过与过程调用相同的软件指令保存,或者它通常是一种特殊情况,除了通过硬件自动保存的东西
-
是的,必须保存返回地址。 IIRC 存在将返回地址保存在特定寄存器中的架构。但是你明白了,它是硬件做的,软件做的太晚了:)
标签: exception assembly microcontroller interrupt