如何从32位保护模式(显然是x86)中查看PIT IRQ处理程序的返回值?我想我可以这样做,我不完全确定.
pop eax ; pop last thing from stack
mov dword return_address,eax
push eax
iret
Run Code Online (Sandbox Code Playgroud)
这将从堆栈中读取正确的项目,但如果你这样做,你将腐败eax.
在执行结束时,正确的ISR必须将所有使用的寄存器恢复到ISR启动时的状态.
另外需要注意的return_address是...... 将通过段寄存器(此处ds)隐式引用.如果ds在ISR和ISR中断的代码中始终相同,则可以.但是,如果中断的代码发生变化ds,则ISR必须ds在其开头保存,将其设置为正确的选择器值,使用它然后将其恢复.如果不这样做,该mov指令可能会破坏内存或导致异常.