大家好,
我在裸机学习汇编语言,在写中断程序的时候遇到了如下问题:
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的,然而中断还是无法发生,不知道这个问题该如何解决?