• 【微机接口】中断系统:中断响应和处理的过程


    CPU获得中断类型码方式:

    (1)非屏蔽硬件中断请求,CPU内部会自动产生中断类型码2

    (2)可屏蔽硬件中断请求,当CPU处于开中断状态时,由外部中断控制器将相应的中断类型码送给CPU(如8259A)

    (3)INT n指令,中断类型码为n

    记:非2可外int n

    CPU获得中断类型码n后,中断处理过程:

    (1)F寄存器压入堆栈,保护各个标志位

    (2)清除I标志和T标志(P52),屏蔽新的可屏蔽硬件中断和单步中断

    (3)保护主程序的断点,即将主程序断点处的CS、IP的当前值压入堆栈,压入的顺序为先压入断点的CS值,再压入断点的IP值。

    (4)CPU从4n~4n+3单元中取出n型中断向量写入IP,CS,将4n~4n+1单元写入IP,4n+2~4n+3单元内容写入CS

    (5)CPU根据新的CS:IP的值转向n型中断服务子程序

    (6)服务程序执行完毕,执行中断返回指令。

    中断返回指令的功能是按顺序恢复断点处的IP值、CS值和之前保护的相应中断前的标志寄存器内容。

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

    记:F寄存器,CS,IP入栈,从4n~4n+3找到中断向量放入CS:IP,执行中断服务子程序,执行中断返回指令IRET,返回断点,恢复现场。

    XXX PROC

    保护现场:如果中断服务子程序中使用到的寄存器,如果主程序中也要使用该寄存器,就会发生冲突,所以进入中断服务子程序的第一步就是要保护现场,将主程序中用到的资源加以保护

    保护主程序的断点是中断隐指令完成,保存通用寄存器和状态寄存器的内容由中断服务子程序完成。

    中断处理

    恢复现场:将各个寄存器的内容出栈,遵循先进后出的原则,即保护现场时,各个寄存器进栈顺序的逆序是出栈的顺序。

    中断返回中断返回指令IRET,使中断服务子程序能安全返回之前的主程序断点。

    IRET

    XXX ENDP

  • 相关阅读:
    Python_数据容器_集合set
    嵌入式学习-FreeRTOS-Day3
    小程序隐私弹窗的实现
    MATLAB算法实战应用案例精讲-【数据分析】数据仓库-数据治理
    nginx 详细的使用教程
    Spirng,SpringBoot实现多文件上传(MultipartFile)
    Java - 手写识别; 如何用spring ai和大模型做手写识别教程
    Caddy部署与使用—踩坑总结
    分片上传简单实现重点是Promise的运用
    STM32
  • 原文地址:https://blog.csdn.net/m0_52043808/article/details/127806684