80X86中断系统(1)

 中断系统

CPU采用中断方式与外设进行信息交换(使得CPU效率大幅提高) 

  1. CPU启动输入设备,让输入设备准备数据
  2. CPU执行现行程序
  3. 当输入设备准备好数据时,将数据送至输入接口。
  4. 输入接口向CPU发送中断请求。
  5. CPU根据自己的情况,决定是否响应中断请求。
  6. 当CPU响应中断请求后,CPU会暂停当前的现行程序,去执行中断服务子程序。
  7. 中断服务子程序会将输入接口的数据读入CPU
  8. 当中断服务子程序执行结束后,CPU会接着之前的断点继续执行现行程序

中断定义:在CPU执行程序的过程中,由于外部或内部的事件作用,使得CPU当前执行的程序站而去执行中断服务子程序,再执行完后又能自动返回的被中断的程序中继续执行的过程。

   被中止的程序——主程序

   主程序被中止的地方——断点(下一条指令的地址)

中断源:能够引发CPU中断的信息源。

   (1)、外部中断源(硬件中断源)

         I/O设备:键盘、显示器、打印机

         数据通道:硬盘、磁盘

         时钟:0号计数器、8254引发的中断

         故障源:掉电、存贮器奇偶校验错

   (2)、内部中断源(软件中断源)

         INT中断指令:如执行INT 21H

         CPU执行指令产生异常:如被0除、单步执行

中断分类:

   (1)、外部中断(硬件中断)

         由CPU以外的设备发出,并从CPU的中断请求信号引脚输入引发的中断称为外部中断。

      80X86CPU有两个中断请求信号引脚(INTR和NIMI)

         INTR由输入到INTR引脚的中断信号引发的中断称为可屏蔽硬件中断。

         NMI由输入到NMI引脚的中断信号引发的中断称为非屏蔽硬件中断

         当中断开时,非可屏蔽中断源一旦提出请求,CPU必须无条件响应,而对于可屏蔽中断源的请求,CPU可以响应,也可         以不响应。

   (2)、内部终端(软件中断)

         由CPU硬件故障或程序执行中的事件引发的中断称为内部中断

      软件中断:执行INT n指令引发的中断。

               BIOS中断:

               DOS中断:

1、DOS专用中断

2、DOS保留中断

3、用户可调用的DOS中断

4、保留给用户开发的DOS中断

      异常:由CPU本身的故障、程序故障引发的中断

            除法错中断:当除法结果溢出或者除数为0时,发生的中断

            单步或陷阱中断:执行每条指令后,如果标志寄存器的T标志(陷阱标志)为1则产生中断。

中断类型码:用于区别不同类型的中断,给每一个类型的中断分配一 个中断号n(0——255)

            Intel保留了前32种中断(0——31)为系统专用

            后224个可以由用户自己设定

0型中断

除法错中断

1型中断

单步或陷阱中断

2型中断

非屏蔽型硬件中断

3型中断

断点中断

4型中断

溢出中断

5型中断

屏幕打印

08H-0FH型中断

可屏蔽型硬件中断

10H-1FH型中断

BIOS中断

20H-3FH型中断

DOS中断

中断向量:在实模式下,中断服务子程序的入口地址。由两部分组成

         中断服务子程序所在代码段的段基址:2个字节

        中断服务子程序入口的偏移地址:2个字节

中断向量表:终端类型码通过一个地址指针表与中断服务子程序的入口地址联系:

      实模式下:该表称为中断向量表

             向量表设置在系统RAM的最低1K单元

               (00000H-003FFH)

00000H

0型中断向量

 

 

00004H

1型中断向量

 

 

···

···

 

 

4*n

N型中断向量

4*n+0:n型服务子程序入口的偏移地址(低八位)

4*n+1:n型服务子程序入口的偏移地址(高八位)

4*n+2:n型服务子程序入口的段基址(低八位)

4*n+3:n型服务子程序入口的段基址(高八位)

···

···

 

 

003FFH

255型中断向量

 

 

               例子:08H型中断向量存放位置:20H——23H

                          08H*4=20H

      保护模式下:该表称为中断描述符表

中断向量表的初始化:

     由BIOS和DOS设计的中断服务子程序由BIOS和DOS各自负责写入中断向量表

      由用户开发的中断服务子程序,由用户自己写入中断向量表

用户如何向中断向量表写入中断向量?

   方法一:用户自己编写程序填写中断向量

         CLI                                                          (关闭中断)

                  PUSH        DS           (将DS寄存器重点内容压入堆栈进行保存)

                  MOV         AX, 0000H

                  MOV         DS, AX

                  MOV         BX, 4*n

                  MOV         AX, OFFSET SERVICE(获取SERVICE的偏移地址)

                  MOV         [BX], AX

                  MOV         AX, SEG SERVICE    (获取SERVICE程序的段基址)

                  MOV         [BX+2], AX

                  POP          DS             (恢复DS中的内容)

                  STI                                                          (打开中断)

 

   方法二:DOS设计的两个子程序,专用于中断向量的读出和写入

        INT 21H的35H子功能:读出n型中断向量

           入口:AL=中断类型码

           出口:ES:BX=n型中断向量

        INT 21H的25H子功能:写入n型中断向量

           入口:DS=中断服务子程序所在代码段的段基址

                  DX=中断服务子程序入口的偏移地址

                AL=中断类型码

                出口:无

        CLI                                                          (关闭中断)

                  PUSH        DS           (将DS寄存器重点内容压入堆栈进行保存)

                  PUSHA

                  MOV         AX, SEG SERVICE

                  MOV         DS, AX

                  MOV         DX, OFFSET SERVICE

                  MOV         AH, 25H

                  MOV         AL, n

                  INT           21H

                  POPA

                  POP          DS             (恢复DS中的内容)

                  STI

中断响应及处理过程:微机系统处理不同类型的中断的响应和处理过程不完全相同,主要时中断类型码的获取方式不同。

   非屏蔽硬件中断请求:CPU自动产生中断类型码2

   可屏蔽中断请求:

     CPU处于开中断状态:由外部中断控制器将相应的中断类型码                          送给CPU。

   异常:由CPU自动生成中断类型码

   INT n指令:指令中的n即中断类型码

获取中断类型码后的处理过程:

1、将F寄存器(标志寄存器)压入堆栈、(保存中断处理前的F状态)

   使F寄存器的T标志置0——禁止单步操作

               I标志置0——使CPU处于关中断的状态

2、断点地址压入堆栈

   先:将断点的基地址(CS)压入堆栈

   后:将断点的拍偏移地址(IP)压入堆栈

3、CPU从4n—4n+3单元去除n型服务子程序的入口地址

   将n型服务子程序的入口地址送入CS:IP

   转入n型中断服务子程序执行

4、中断服务子程序执行完毕,执行中断返回指令(IRET)

   按顺序恢复断点处的IP值、CS值和之前保存的F寄存器的内容

   CPI根据恢复后的CS:IP返回断点,继续执行主程序

中断服务子程序结构

中断优先与中断分级:

   当多个中断源在同一时刻提出请求时,CPU对中断响应的次序称为中断优先级。

中断类型

优先级

除法错中断

最高

软件中断(INT n)

断点中断

溢出中断INTO

非屏蔽硬件中断(NMI)

可屏蔽硬件中断(INTR)

单步中断

最低

   禁止中断:产生中断请求后,CPU不能中断现行程序的执行

   中断屏蔽:用程序有选择地封锁部分中断,而允许其他部分仍可得到响应

   中断嵌套:在执行中断服务程序时,仍可再响应中断请求。

中断指令:

     开中断指令:STI

                  使F寄存器I标志置1,CPU处于开中断状态

      关中断指令:CLI

                  使F寄存器I标志置0,CPU处于关中断状态

            I标志置0或1只对可屏蔽硬件中断有作用

      软件中断指令:INT n

                  无条件的转向n型中断服务子程序

      中断返回指令:IRET

                  依次从栈顶弹出6个元素到CS:IP,F。

                  如果栈顶是INT n的断点地址,那执行IRET后可以返回断点,否则不能

      溢出中断指令:INTO

                  先判断O标志位是否为1,如果是,那么调用类型为4的中断子程序,用于处理中断

posted @ 2022-05-03 21:43  玄修杰  阅读(592)  评论(0编辑  收藏  举报