简介

  • 中断是CPU处理外部突发事件的一个重要技术。
  • 它能使CPU在运行过程中外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。
  • 引起中断的原因活着说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断两类。
  • 外部中断一般是指计算机外设发出的中断请求,入:键盘中断、打印机中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备的中断请求。

    中断向量表

  • CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址。

  • 什么是中断向量表:
    • 中断向量表就是中断向量的列表
  • 中断向量表在内存中存放,对于8086PC机,中断向量表指定放在内存地址0处。
  • 从内存0000:0000到0000:03FF的1024个单元中存放着中断向量表。

    中断过程

  • 可以用中断类型码,在中断向量表中找到中断处理程序的入口。

  • 找到这个入口地址的最终目的是用它设置CS和IP,是CPU执行中断处理程序。
  • 用中断类型码找到中断向量,并用它设置CS和IP,这个工作是由CPU的硬件自动完成的。
  • CPU硬件完成这个工作的过程被称为中断过程。
  • 8086CPU的中断过程:

    • (从中断信息中)取得中断类型码;
    • 标志寄存器的值入栈(保护标志位);
    • 设置标志寄存器的第八位TF和第九位IF的值为0;
    • CS的内容入栈;
    • IP的内容入栈;
    • 从内存地址为中断类型码4和中断类型码4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS。

      中断处理程序

  • 由于CPU随时都可能检测到中断信息,也就是说,CPU随时都可能执行中中断处理程序,所以中断处理程序必须一直存储在内存某段空间之中。

  • 中断处理程序的入口地址,即中断向量,必须存储在对应的中断向量表表项中。
  • 中断处理程序的编写方法和子程序的比较相似。
    • 保存用到的寄存器
    • 处理中断
    • 恢复用到的寄存器
    • 用iret指令返回
      • pop IP
      • pop CS
      • popf
  • iret通常和硬件自动完成的中断过程配合使用。
  • 在中断过程中,寄存器入栈的顺序时标志寄存器、CS、IP,而iret的出栈顺序时IP、CS、标志寄存器,刚好和其对应,实现了用执行中断处理程序前的CPU现场恢复标志寄存器和CS、IP的工作。

    单步中断

  • 如果CPU不提供其他功能的话,就按正常的方式工作,只要CPU一加电,它就从预设的地址开始一直执行下去不可控制。

  • Debug中看到的情况却是,Debug可以控制CPU执行被加载程序中的一条指令,然后让他停下来,显示寄存器的状态。
  • Debug利用了CPU提供的单步中断功能。
    • 如果检测到标志寄存器TF位为1,则产生过单步中断。