前言
SMM,全称为 Special Mask Mode,特殊掩码模式。在一般情况下(普通的Mask Mode),IRQ的中断请求得到响应执行,ISR相应位置位,在中断服务发起EOI命令前,ISR的位不会清位,8259会抑制优先级低的IRQ。
然而,在开启ESMM模式中,其允许在中断服务例程里动态依据IMR及IRR来响应中断请求,而不需要例会ISR。
代码分析
在《x86/x64体系探索及编程》的ex17-2中实现了这个,简单分析一下代码吧。
首先,在do_timer_handler函数中先开启键盘中断,然后再开启SMM模式,然后再关闭键盘中断,之后一直loop等待着键盘中断触发。
do_timer_handler:
call enable_keyboard
call send_smm_command
call disable_timer
sti
mov esi, t_msg2
call puts
wait_for_keyboard:
mov ecx, 0xffff
delay:
nop
loop delay
bt DWORD [keyboard_done], 0
jnc wait_for_keyboard
这时候屏幕内容如下,可以看到其正在处理IRQ0中断,并且等待键盘中断。

本文介绍了SMM(特殊掩码模式)在8259中断处理中的作用,通过代码分析展示了在开启SMM模式下如何动态响应中断请求。在Bochs模拟器中,探讨了键盘中断的处理流程,强调了8259A的ISR、IMR和IRR寄存器的重要性,并简要提及了键盘事件的堆栈调用图。文章以8259A中断处理为起点,预告了未来对AIPC的深入学习。
最低0.47元/天 解锁文章
4095

被折叠的 条评论
为什么被折叠?



