中断信息:CPU不再接着向下执行,而是转去处理这个特殊信息。
它可以来自于CPU内部和外部。
12.1内中断的产生
当CPU发生以下情况时将产生中断信息:
1、出发错误。
2、单步执行。
3、执行int0指令。
4、执行int指令。
8086CPU用成为中断类型码的数据来标识中断信息的来源。
中断类型码共有8位,能表示28=256种不同的中断来源。
中断的来源简称中断源。
用来处理终端信息的程序被称为中断处理程序。
CPU用中断类型码通过中断向量表查找中断程序的入口地址,其实中断向量表也就是中断程序的入口地址列表。
在8086PC中,中断向量表的位置固定,都是从0x0到0x03E8,它以字为单位,高字存放段基址,低字存放偏移地址。
就是根据中断向量表调整CS和IP找到中断处理程序入口的过程。
这一过程在P238到P239有简要介绍。
中断处理程序的处理过程如P239页所显示的那样。
在这里,IRET的作用就是恢复中断处理前的CPU现场。
IRET:Interrupt Return,中断返回指令。
它的功能可以描述为:
POP IP
POP CS
POPF
汇编编译器可以处理算术运算符,比如减号。
MOV
AX,8-4就等同于MOV AX,4。
此外,汇编编译器还可以处理表达式,比如:
MOV
AX,(5+3)*5/10等同于MOV AX 4。
TF(Trace
Flag):跟踪标志位。
如果CPU检测到TF为1就会执行中断。
单步中断的类型码为1,它是一种调试的手段,也是CPU提供的一种功能,它能暂时停止CPU的工作,显示各寄存器的状态并让CPU转去中断处理。
不过在中断处理之前,它必须要让TF=0,否则如果TF一直为1的话,CPU将一直循环处理中断,这就陷入了死循环。
P249描述了它所引发的中断过程。
有时候CPU遇到中断也不响应。
书中举了SS:SP的例子。
向SS中输入数据以后会产生中断,但是CPU不会响应。这是因为中断必须保存现场,就必须要把CS和IP中的值压栈,此时虽然SS做了相应的调整但是SP却没变,那么SS:SP就会指向错误的栈顶。
所以想此种情况的中断CPU是不会响应的。