(1)仔细分析一下上面的int 9中断例程,看看是否可以精简一下?
其实在我们的int 9中断例程中,模拟int指令调用原int 9中断例程的程序段是可以精简的,因为我们进入中断例程后,IF和TF都已经置0,没有必要在进行设置了。对于程序段:
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:(此处为答案)
pushf
call dword ptr ds:[0]
两条指令。
(2)仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主程序中,如果在执行设置int 9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则CPU将转去一个错误的地址执行,将发生错误。
找出这样的程序段,该写它们,排除潜在的问题。
提示,注意sti和cli指令的用法。
答案:
; 将
mov word ptr es:[9*4],offset int9
mov word ptr es:[9*4+2],cs
; 改写为
cli
mov word ptr es:[9*4],offset int9
mov word ptr es:[9*4+2],cs
sti
(全文完)