• CPU处理外部突发事件的重要技术。
  • 外部中断(可屏蔽):计算机外设发出的中断请求
  • 内部中断(不可屏蔽):出错
  • 软件中断:不是真正的中断,是可被调用的一般程序

    中断优先权

    • 除法错、溢出中断、软件中断>不可屏蔽中断>可屏蔽中断>单步中断

      中断处理程序

    • 中断信息(中断类型码8位)-> 中断向量表(2^8=256个) -> 处理程序入口地址

    • 8086cpu:中断向量表在0000:0000~0000:03FF(256*4个字节:2个字节给段地址,2个给偏移地址)
  • 时间片的前提

    中断的过程

  • 1、从中断信息中取得中断类型码(N)

  • 2、标志寄存器的值入栈(保护标志位):pushf
  • 3、设置标志寄存器的第8位TF和第9位IF位0
  • 4、CS入栈:push CS
  • 5、IP入栈:push IP
  • 6、从内存地址位中断类型码4和中断类型码4+2的两个字单元读取中断处理程序的入口地址设置IP和CS:(IP)=(N4),(CS)=(N4+2)

    中断处理程序

  • 1、保存用到的寄存器

  • 2、处理中断
  • 3、恢复用到的寄存器
  • 4、iret返回(pop IP,pop CS,popf)

    int 0中断(除法错误)

  • 安装代码+注册中断向量表 ```cpp assume cs:code

code segment

  1. ;设置ds:si指向源地址
  2. mov ax,cs
  3. mov ds,ax
  4. mov si,offset d0
  5. ;设置es:di 向目的地址
  6. mov ax,0
  7. mov es,ax
  8. mov di,200h ;安全的内存空间(中断向量0在的位置)
  9. ;设置cx为传输长度
  10. mov cx,offset do0end - offset do0
  11. ;设置传输方向为正
  12. cld
  13. rep movab
  14. ;设置中断向量表
  15. mov ax,4c00h
  16. int 21h

do0: ;特色中断处理程序 mov ax,4c00h int 21h do0end:nop

code ends end start ```

单步中断(类型码1)

  • CPU执行完一条指令后,如果检测到标志寄存器TF位为1,则产生单步中断,引发中断过程

响应中断的特殊情况

  • 很多情况下会先屏蔽中断
  • 例如
    • 执行向ss传送数据指令后,检测到中断信号也不会响应
      • ss:sp应该联合设置,连续完成;引发中断需要向栈中压入数据
      • 设置ss的下一步如果不是设置sp,单步中断不会响应