背景:
王爽汇编语言 检测点17.1,int16中断时一定是IF=1,否则缓冲区为空时,无法接收到键盘输入.
那么既然IF=1,我就设想是否有可能键盘输入的值置到AX后,其他的中断调用将AX修改了.
是否可能存在这种情况?如果是,那么如何避免呢?
中断服务例程在执行时,会先保存当前的标志寄存器和通用寄存器的值,然后在结束时恢复这些寄存器的值。
所以在int16中断服务例程执行期间,即使IF=1允许其他中断发生,其他中断服务例程也不会修改int16中断服务例程中使用的寄存器,包括AX寄存器。
int16中断结束后,会先从栈中恢复原来的标志寄存器值,然后再恢复AX等通用寄存器的值。所以可以确保int16中断服务例程不会受到其他中断的影响。
具体来说,中断服务例程的执行步骤是: