8086的内中断典型如int 21h的分析

  • 除法错误:0执行div指令产生除法溢出
  • 单步执行:1
  • 执行into指令:4
  • 执行int n指令,立即数n为中断类型码

  • CPU接到中断信息:执行中断处理程序
  • 中断信息和入口地址联系:中断向量表共1024个字节256个中断
  • 每个入口地址占四个字节,放IP共2个字节和CS共2个字节
  • 中断类型码和入口地址的映射关系
(IP) = (N * 4)
(CS) = (N * 4 + 2)

  • 0号中断
    在这里插入图片描述
assume cs:code
code segment
start:
mov ax,8
mov bx,0
div bx
mov ah,4ch
int 21h
code ends
end start
  • 中断所在的位置
    在这里插入图片描述
  • 观察INT 21H,计算得0000:0084
    在这里插入图片描述

  • 中断过程由CPU硬件自动完成
  • 由中断类型码找到中断向量并由它设置CS和IP
  1. 从中断信息取得中断类型码
  2. 标志寄存器的值入栈——中断过程要改变标志寄存器的值,需要保护
  3. 设置标志寄存器TF和IF为0
  4. CS内容入栈
  5. IP内容入栈
  6. 从中断向量表读取中断处理程序的入口地址,设置IP和CS
取得中断类型码N
pushf
TF = 0 IF = 0
push CS
push IP
(IP) = (N * 4),(CS) = (N * 4 + 2)
  • CPU随时可能检测中断信息,所以中断程序常驻内存(一直存储在内存的某段空间中)
  • 中断处理程序的入口地址,即中断向量,必须存储在中断向量表的表项中
    (0000:0000 - 0000:03FF)
发布了251 篇原创文章 · 获赞 28 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/xiong_xin/article/details/103604147
今日推荐