裸机汇编语言死循环阻塞所有中断例程求解?

大家好,
我在裸机学习汇编语言,在写中断程序的时候遇到了如下问题:
1.我学习的是x86的汇编语言,在写好中断程序的之后,中断例程有两个,一个是timer定时器,定时在屏幕上print一行文字,然后中断程序返回。
代码像这样:
timer.c:

printf;
return;

另一个是打印键盘输入的字符的例程:
keyboard.c:

printf(char c);
return;

2.main函数内初始化完变量之后,进入一个while(1)的死循环。这个情况下,我能看到尽管main程序是死循环,timer和keyboard中断程序还是能不断的执行。
3.问题:一般来说,进入中断要先cli 关中断,然后中断完成后sti开启中断。现在我想做中断嵌套,在timer.c中间加了如下代码:
timer.c:

printf;
sti;    //开中断
while(1);    //想让timer中断先等会,看看keyboard中断能不能执行
return;

结果是程序不断在这个while里执行,bochs调试的时候看到另一个中断例程从来得不到执行。并且此时看到eflag寄存器IF位是置1的,然而中断还是无法发生,不知道这个问题该如何解决?

阅读 2.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进