首页 > 代码库 > 内中断
内中断
1.CPU根据中断码如何找到中断处理程序
要定位中断处理程序,就需要找到中断处理程序的段地址和偏移地址,如果根据中断码找到他们?这就引入中断向量表,CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址。
2.使用中断类型码找到中断向量,并用它设置CS和IP,这个操作是由CPU硬件自动完成的。这个过程成为中断过程:
(1)从中断信息中取得中断类型码
(2)标志寄存器的值入栈(保护标志位)
(3)设置标志寄存器的TF和IF为0
(4)CS、IP入栈
(5)从内存地址中断类型码*4和中断类型码*4+2的两个字单元中读取中断处理程序入口地址
3.中断处理程序
由于CPU随时都可能检测到中断信息,也就是说,CPU随时都可能执行中断处理程序,所以中断处理程序必须一直存储在内存某段空间之中。
中断处理程序的编程步骤:
1)保存用到的寄存器
2)处理中断
3)恢复寄存器
4)用iret指令返回
iret指令用汇编语法描述为:
pop IP
pop CS
popf
iret通常和硬件自动完成的中断过程配合使用。可以看到,在中断过程中,寄存器入栈的顺序是标志寄存器、CS、IP,而iret出栈顺序是IP、CS、标志寄存器,刚好和其相对应,实现了用执行中断处理程序前的CPU现场恢复标志寄存器和CS、IP的工作,而iret执行后,CPU回到执行中断处理程序前的执行点继续执行。
4.中断指令举例,我们修改7ch中断码对应的中断程序,将7ch对应的中断处理程序修改为求word型数的平方
assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset sqr mov ax,0 mov es,ax mov di,200h mov cx,offset sqrend-offset sqr cld rep movsb ;将sqr程序移动到8086的安全控件0:200处 mov ax,0 mov es,ax mov word ptr es:[7ch*4],200h ;修改中断向量表项的IP mov word ptr es:[7ch*4+2],0 ;修改中断向量表项的CS mov ax,4c00h int 21 sqr:mul ax iret sqrend:nop code ends end start
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。