检测点15.1(2)可从三方面考虑:
一、该主程序有两处修改了中断向量表。第1处是用新编int 9的入口地址替换掉系统int 9的入口地址,第2处则是将该表中的入口地址重新还原为系统int 9的值。
二、该主程序中每处修改都是分两步完成,第1步改ip,第2步改cs 。如果在第1步与第2步之间发生键盘中断,也就是说,此时中断向量表只完成了ip的修改,表中的cs:ip是前述两种int 9的入口地址的混合值,这时引用该值必然发生错误。
三、既然我们随时都可以通过键盘输入数据,即表明随时都可以发生键盘中断——这暗示CPU的常态设置是标志位IF=1。为避免上述错误,应当在修改中断向量表之前设置IF=0,完成修改后再置常态IF=1,即要用cli和sti将修改过程括起来。 |