通常当中断发生时,程序会返回到产生中断的那一行。
我想在 ISR 例程完成后从新行运行程序,即我不希望它从产生中断的地方返回。
我是否必须更改存储在 SP 中的 IP 或者还有什么?
谢谢
您的 ISR 不知道它所中断的执行点,也不知道它所中断的堆栈中存储了什么。只是“跳”到另一条“线”,没有堆栈清理操作,(这是不可能的,因为你不知道上面有什么),将生成 UB,(可能在 AV/segFault 端出现 UB 错误)。
我所知道的实现似乎想要的东西的唯一方法是交换到不同的堆栈 - 发出信号量/事件,线程正在等待并请求在 ISR 退出时运行 OS 调度程序。新准备好的线程很可能会在 ISR 完成后立即运行(取决于加载/优先级等),甚至可能抢占被中断的线程,因此“从新行运行程序”,有点...... :)
PC(Program Counter)在Intel x86中通常称为指令指针(IP),将存储下一条指令地址。您需要在中断程序结束时将 PC 更改为换行符。
您还可以在中断例程结束时增加存储在堆栈中的 Pc VALue,然后将其存储在 PC 中。