前言:
内中断 。
目录:
概念:
任何一个通用 CPU 都具备一种能力, 可以在执行完当前正在执行的指令之后,
检测到从 CPU 外部发送过来的或者内部产生的一种特殊信息,
并且可以立即对所接受到的信息进行处理,这种特殊的信息称为: 中断信息
中断意味着 CPU 不再继续向下执行, 而是转去处理这个特殊的信息,
简单的讲,就是在做某件事情的时候,有东西突然打断你。
中断原因 | 中断类型码 |
---|---|
除法错误 | 0 |
单步执行 | 1 |
执行 into 指令 | 4 |
执行 int 指令 | n |
中断类型码是中断来源信息的编码, 在 8086CPU 中使用一个字节的长度来编码中断源。
中断处理程序:
CPU 在收到中断信息之后, 需要对中断进行处理
中断处理程序就是用来处理对应中断的程序. CPU 在收到中断信息之后,
就会转去执行对应的中断处理程序. 中断处理程序由程序员编写
中断向量表: 是中断向量的列表
中断向量: 是中断程序的入口地址
中断过程:
-
从中断信息中获取中断类型码
-
标志寄存器的值入栈
-
设置标志寄存器的第八位 TF 和第九位 IF 的值为 0
-
CS 的内容入栈
-
IP 的内容入栈
-
从内存地址为中断类型码
*4
和中断类型码*4+2
的两个单元中读取中断处理程序的入口地址放入IP和CS中
相当于 (IP)=(N*4) (CS)=(N*4+2)
中断处理程序和iret指令:
中断处理程序的编写与子程序类似:
-
保存用到的寄存器
-
处理中断
-
恢复用到的寄存器
-
用iret指令返回
iret指令的功能是:
pop IP
pop CS
popf
很显然iret是起到恢复现场的功能。
除法错误中断的处理:
当用div指令产生除法溢出中断时,中断类型码0将定位到中断向量表的第一个中断向量,
然后进行相关的中断处理程序的执行。
div除法中断处理为显示 “Divide overflow” 同时回到操作系统。
总结:
参考文献:
https://blog.csdn.net/zhaoruixiang1111/article/details/81149657
https://blog.csdn.net/u013018721/article/details/51282095