程序计数器返回中断处理程序后的位置?
您好,我想知道当程序从中断服务程序返回时,程序计数器在哪里? 我知道何时发生中断事件,PC被推入堆栈。 但是,下一个或同一个地址(刚刚执行一个)被推入堆栈的地址是什么?
first instruction;
interrupt event here;
go inside the ISR;
exit ISR;
second instruction;
要么
first instruction;
interrupt event here;
go inside the ISR
exit ISR;
first instruction;
我的意思是,PC是指向在ISR入口之前执行的指令,还是指向下一条指令(从ISR返回之后)? 我希望你明白这个主意。
由于在CPU处于精确固定状态之前无法处理中断,因此如果在指令中间引发中断,则在执行指令后将跳转到中断向量程序。
所以当从中断程序回来时,PC将在第一个指令之后指向指令。
first instruction fetch (PC is updated meanwhile)
first instruction decode
interrupt is raised
first instruction execution
** now and only now the CPU checks for a possible interrupt **
interrupt is present, pushing PC on stack and other things
jump to interrupt address
execution of interrupt
return from interrupt (pop of PC and other things)
second instruction fetch
...
当一条指令正在执行时, 程序计数器保存下一条要执行的指令的地址 。 发生中断时,处理器执行以下操作:
暂停正在执行的程序的执行并保存其上下文。 这意味着它保存下一条要执行的指令的地址,即程序计数器的值和其他相关数据。
用该中断处理程序的起始地址更新程序计数器。
当中断处理程序完成后,CPU可以在中断点恢复执行程序。
中断发生在指令i
,完成后用户程序从i+1
指令恢复执行。
中断的确切行为是特定于硬件的,但CPU将一直等到first_instruction
结束。 之后,它会将CPU状态推入堆栈(或以其他方式保存)并启动ISR。 这意味着您的ISR不会立即执行 - 这会造成很小的延迟,这可能会成为硬实时应用程序中的问题。
上一篇: Where the program counter goes after returning the interrupt handler?
下一篇: Which instruction is run after an exception was handled?