[058][汇编语言]检测点12.1 内中断 中断向量表 中断过程

8086CPU 可以表示256种中断信息的来源

  • 中断类型码为一个字节型数据(8位 byte

内中断

  • CPU 用中断类型码中断向量表中找到相应的中断处理程序的入口地址
  • 入口地址由 段地址:偏移地址 组成,占用 2个字单元(即4个字节、4个内存单元)
  • 中断向量表 放在 内存 之中:8086CPU 规定将内存地址 0000:0000~0000:03FF1024(256 x 4 = 1024)个内存单元用来存放中断向量表

检测点 12.1

[058][汇编语言]检测点12.1 内中断 中断向量表 中断过程_第1张图片
检测点12.1

存储N号中断源对应的中断程序入口

高位地址 低位地址
偏移地址 4N+1 4N
段地址 4N+3 4N+2

8086CPU 中断过程

(1)(从中断信息中)取得中断类型码 N;
(2)标志寄存器的值入栈 pushf
(3)设置 TF = 0 ,IF = 0
(4)CS的内容入栈 push CS
(5)IP的内容入栈 push IP
(6)从内存地址为 4N+2 以及 4N 取读取中断处理程序 (IP) = (4N) , (CS) = (4N+2)

iret 指令

  • iret 通常和硬件自动完成的中断过程配合使用
iret
 
等价于
pop IP
pop CS
popf

单步中断

CPU执行完一条指令后,此刻检测到 TF = 1 ,进入单步中断
单步中断的类型码为 1

所引发的中断过程如下:
(1)(从中断信息中)取得中断类型码 N = 1
(2)标志寄存器的值入栈 pushf
(3)设置 TF = 0 ,IF = 0
(4)CS的内容入栈 push CS
(5)IP的内容入栈 push IP
(6)从内存地址为 4N+2 以及 4N 取读取中断处理程序 (IP) = (4x1) , (CS) = (4x1+2)
  • TF = 0 避免CPU无限执行单步中断

响应中断

  • 执行完 SS寄存器 相关的指令后, 即便发生中断,CPU也不会响应
  • 连续设置 SS 和 SP 才可以指向正确的栈顶地址
mov ax,1000H

------------------
|  mov ss,ax  |
|  mov sp,16  |
------------------
一定要挨着写!

你可能感兴趣的:([058][汇编语言]检测点12.1 内中断 中断向量表 中断过程)