• 【微机接口】中断的基本概念


    查询方式当外设数据未准备好时,CPU需要不断查询外设是否准备好,效率低。

    中断:

    CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序转去为该事件服务,待事件服务结束后,又能自动返回到被中止的程序继续执行。

    主程序:               被中断的原程序

    中断服务子程序:中断处理的程序

    中断源:引发中断的信息源

    中断分类:

    外部中断(硬件中断):

    由外部事件引发的中断,即由CPU外部设备发出,并由CPU中断请求信号引脚输入所引发的中断。

    8086CPU有2个引脚INTR和NMI可以接受外部的中断请求信号。

    INTR接受的中断信号为可屏蔽硬件中断

    NMI接受的中断信号为非屏蔽硬件中断。

    内部中断(软件中断源):由CPU硬件故障或程序执行中的事件引发的中断,可分为软件中断和异常。

    软件中断:执行有INT n执行而引发的中断。可分为BIOS中断、DOS中断。

    中断类型码:

    每个不同的中断有一个中断号n,取值0~255,256个中断。

    21H:DOS中断

    10H,16H:BIOS中断

    2型中断:非屏蔽硬件中断,输入微处理器的NMI引脚的中断请求信号引发的中断,是不可以被禁止的。

    可屏蔽中断的中断类型码由8259A给出。(INTA给8259A的第二个负脉冲时发送中断类型码)

    软件中断的中断类型码由中断指令给出。

    中断向量:

    实模式下,中断向量指中断服务子程序的入口地址。

    每个中断号所对应的中断向量占4字节。

    前两字节是中断服务子程序入口的偏移地址,

    后两字节是中断服务子程序的代码段段基址。

    中断向量表:

    实模式下,系统存储器地址空间中,最低的1KB空间,即00000H~003FFH单元,依次存放着256个中断号所对应的中断向量,每个中断的中断向量4字节(1024个字节),存放着1024字节中断向量的存储区就构成了一张中断向量表。

    记:0820,偏低高段低高

     注意:08H*4=20H!=32H,所以08型中断向量存放在20H~23H。

    20H,21H存放08型中断服务子程序偏移地址,22H23H存放08型中断服务子程序入口的段基址。

    已知系统RAM20H~23H单元的内容依次为22H,33H,44H,55H

    则08型中断服务子程序入口的物理地址=5544H*16+3322H=58762H

    中断向量表的初始化:

    由BIOS设计的中断服务子程序,中断向量在加电时由BIOS负责写入中断向量表

    由DOS设计的中断服务子程序,中断向量在启动DOS时,由DOS负责写入中断向量表

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

    例:设n型中断服务子程序的名字是SERVICE,将SERVICE的入口地址写入对应的中断向量表

    方法一:自己编写程序填写中断向量(易错!!!!)

    1. CLI ;关中断
    2. PUSH DS ;保护DS
    3. MOV AX,0000H ;
    4. MOV DS,AX ;将DS置为0,那么通过间接寻址时[BX]访问的就是物理地址(DS为数据段)
    5. MOV BX,4*n
    6. MOV AX,OFFSET SERVICE
    7. MOV [BX],AX ;将SERVICE的偏移地址给4*n和4*n+1
    8. MOV AX,SEG SERVICE
    9. MOC [BX+2],AX ;服务程序代码段基址写入4*n+24*n+3
    10. POP DS ;恢复DS
    11. STI ;开中断

    方法二:

    记:35读ALXESBX,25写PUSHDSAALXDSDX

    DOS35H功能调用用于读取中断向量,DOS25H功能用于写入中断向量。

    35H:读取中断向量

    AH=35H,AL=中断类型码

    ES:中断向量对应中断子程序的段基址

    BX:中断向量对应中断子程序的偏移地址

    21H:写入中断向量

    AH=25H,AL=中断类型码(中断号)

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

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

    1. CLI
    2. PUSH DS
    3. PUSHA ;把基本结构寄存器都入栈
    4. MOV AX,SEG SERVICE
    5. MOV DS,AX
    6. MOV DX,OFFSET SERVICE
    7. MOV AH,25H
    8. MOV AL,n
    9. INT 21H
    10. POPA
    11. POP DS
    12. STI

    易错:MOV AX,SEG SERVICE​​​​​​​

               MOV DS,AX

  • 相关阅读:
    1.并发编程的本质问题
    uniapp开发的多端APP源码
    java基于SpringBoot+Vu的疫情防控外出返乡行程管理系统 element 前后端分离
    ESP8266-Arduino编程实例-TM1637-驱动4位7段数码管
    Hadoop-3.2.3集群搭建
    CDH大数据平台 ModuleNotFoundError: No module named ‘MySQLdb‘
    【超硬核】React源码设计思想(一)Fiber
    springboot整合redis,并使用@Cacheable等注解进行缓存
    使用KNN进行手写体识别和iris数据集分类
    [iOS]-NSOperation、NSOperationQueue
  • 原文地址:https://blog.csdn.net/m0_52043808/article/details/127634832