1. 为什么需要中断??
1.1 是为了让cpu具备一种能力,让cpu在执行指令的时候,检测到cpu内部或者外部的一种特殊信号,并且对这种信号做出处理。
1.2 中断是怎么处理的?
中断有中断源,中断向量表,中断处理程序。
1.2.1中断源是触发中断处理程序的,比如我们点击键盘,触发外中断,当程序执行时候发现除法问题就会除法除法错误中断。
1.2.2 中断向量表是存在一块固定内存的地方,内存范围是0000:0000到0000:03FF,1024个内存单元,256个中断向量,其实没有256个,里面有0000:0200-0000:02FF这段内存是空的,很多人自己写中断例程的时候也往往写在这里。
1.2.3 中断处理程序是预先写好在固定地方,内存地址就存在中断向量表里面。
2.中断的种类:内中断和外中断
2.1 如果是cpu内部信号就称之为内部中断:
内部中断分为四种:1.除法错误 对应的中断类型码为0
2.单步执行 对应的中断类型码为0
3.执行into指令 对应的中断类型码为4
4:执行int指令 int N n是常数,
2.2 外部中断,是指cpu对外部设备的控制。比如键盘,鼠标。
pc系统的接口卡和主板上,装有这种接口芯片,这些外设接口芯片的内部有若干寄存器,
cpu将这些寄存器当做端口来访问。外设的输入不直接送入内存和cpu。而是送入相关的接口 芯片的端口中,再有相关的芯片送到外设,cpu还可以向外设输出控制命令,而这些控制命令也是先送到相关芯片的端口中,然后再由相关的芯片根据命令对外设实施控制。cpu就通过中断机制来满足随时处理外设发出的信号。
2.2.1 可屏蔽中断。cpu可以不响应的外中断,cpu是否响应可屏蔽中断,要看标志寄存器的IF位的设置,当CPu监测到可屏蔽中断信息时,如果IF=1,则执行完当前指令后,引发中断,否则不引发中断过程,所有的外设引发的都是可屏蔽中断
2.2.2不可屏蔽中断。
3.自己编写中断程序。部分地方未写出
assume cs:code
code segment
start :mov ax,cs
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200H
mov cx,offset do0end-offser do0 //计算do0代码段的长度
cld
rep movsb
mov ax,4c00H
int 21H
do0:显示字符串"overflow"
mov ax,4c00H
int 21H
do0end:nop
code ends
end start