汇编语言—中断 (8259A)

2023-10-07 19:40
文章标签 中断 汇编语言 8259a

本文主要是介绍汇编语言—中断 (8259A),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

中断——外设随机地(指主程序运行到任何一条指令时)或程序预先安排产生中断请求信号,暂停CPU正在运行的程序,转入执行称为中断服务的子程序,中断服务完毕后,返回到主程序被中断处继续执行的过程。

中断源——引起中断的时间

中断系统应具有以下功能:

1、能实现中断响应、中断服务和中断返回

2、能实现中断优先级排队,优先级高的先处理

3、能实现中断嵌套

中断过程

        一个完整的中断基本过程包括:中断请求、中断判优、中断响应、中断处理及中断返回等五个基本过程。

(1)中断请求        外设向CPU发出请求

        当某一外部中断源要求CPU中断时,首先要想CPU发出中断请求,该请求信号被存放在中断源接口电路的 中断请求触发器 中暂存,并通过INTR(可屏蔽)NMI(非可屏蔽)信号线引入CPU。

(2)中断判优        判断中断的优先级,优先级高的先处理

        由于中断请求是随机的,在某一瞬间有可能出现两个或两个以上中断源同时提出请求的情况。这时必须根据中断源的轻重缓急,给每个中断源确定一个终端级别——中断优先权。

        另一个作用能实现中断嵌套。

(3)中断响应        CPU进行执行中断程序前的预处理

        CPU每执行完一条指令后,查询是否有中断请求。当查询到有中断请求且此时CPU允许中断(即IF=1,开中断),CPU响应中断。

响应中断后系统做的工作:

1. 自动关中断:通过使IF清零来实现.(IF(中断允许标志位)=0,TF(调试标志位)=0)

2. 保存FR(Flag)和断点;(入栈保护断点)

3. 形成中断入口地址。通过中断矢量,去中断向量表中查找中断程序的入口地址。

(4)中断处理

        执行中断服务程序

1. 中断服务开始要用压栈指令(PUSH)将要用到的寄存器内存压入堆栈,以便返回到主程序时能正常运行。——保护现场

2. 中断服务程序结束后,用POP指令把所保存的有关寄存器的内容从堆栈中弹出,以便恢复到中断前状态。——恢复现场

(5)中断返回        恢复现场

        通常在中断返回前,要用指令开中断,以便再次响应中断,然后执行中断返回指令IRET。IRET指令具有弹出断点地址送IP和CS及恢复标志寄存器FR的功能。子程序返回是RET。

8086/8088的中断系统

中断类型码:8位

每个中断类型码占用 4 字节。

硬件中断——由外部硬件产生的,也称外部中断。

        非屏蔽中断:通过CPU的NMI引入,它不受内部中断允许标志位IF的屏蔽,一般在一个系统中只允许一个非屏蔽中断。

        可屏蔽中断:通过CPU的INTR引入,它受IF的控制,只有在IF=1时,CPU才能响应中断源的请求。当IF=0时,中断请求被屏蔽。

软件中断——CPU根据软件的某些指令或软件对标志寄存器某个标志位的设置而产生的,由于它与外部中断电路完全无关,故称为内部中断。

中断向量表

        存放中断地址的一段内存空间称中断向量表。

存放各类中断的中断服务程序的入口地址 

表的地址位于内存的:0000H~03FFH        1KB大小,共256个入口

每个入口占用4个单元,依次位IP:CS,低字节为段内偏移,高字节为段基址。

 中断向量地址指针 = 4 * 中断类型码

各类型中断的优先权及中断响应

(1)软件查询方 式

        缺点:效率低

(2)硬件优先权排队电路

        简单硬件方式——菊花链法或链式优先权排队电路。

        专用硬件方式——可编程的中断控制器 8259A

        软件  >  硬件(NMI > INTR)  >  单步

        8086/8088系统中,中断优先权次序从高到底排序为:除法出错、INTn、INTO、NMI、INTR、单步中断。

外部中断的处理过程

        当一个可屏蔽中断(INTR)被响应时,CPU实际执行了7个总线周期,即:

(1)执行第一个INTA周期。

(2)执行第二个INTA周期,被响应的外设通过D0~D7的8位数据线提供中断类型码n(由8259A提供),CPU接到类型码后,将它左移两位,形成向量表指针存入暂存器。

(3)执行一个总线写周期,把FR压栈。同时IF和TF为0,以禁止中断响应过程中其他可屏蔽中断的进入,同时也禁止了中断过程中出现单步中断。

(4)执行一个总线写周期,CS压栈。

(5)执行一个总线写周期,IP压栈。

(6)执行一个总线读周期,从中断向量表中取出中断服务程序入口地址的偏移量送IP中。

(7)执行一个总线读周期,从中断向量表中取出中断服务程序入口地址的段值送CS。

        对于非屏蔽与软中断跳过第(1)、(2)步,从第(3)步开始执行到第(7)步。(类型码无需从外部获取)

8259A可编程中断控制器

1、功能

(1)具有8级优先权控制,级联可能扩展到64级。

(2)每一级中断都可能屏蔽或允许。

(3)在中断响应周期,8259A可提供相应的中断向量号(中断类型号)。

(4)8259A的工作方式,可通过编程来进行选择。

8259A的编程

8259A的编程分两部分:

(1)初始化编程

        由CPU向8259A送2~4字节的初始化命令字ICW。

        写初始化命令字ICW1——芯片控制字

写初始化命令字ICW2——中断类型控制字(中断类型码)

用来定义中断类型码的高5位

 

 写初始化指令字ICW3——主/从片初始化(级联控制字)

写初始化命令字ICW4——方式控制字

 

8259A结束中断处理的方式有:

1、普通中断结束方式:任何一级中断服务程序结束时给8259A发送一个EOI命令,8259A将ISR寄存器中级别最高的置'1'位清0,这种方式只有在当前结束的中断总是尚未处理完的级别最高的中断时才能使用。

2、自动中断结束方式:中断服务程序结束时将当前结束的中断级别也传送给8259A,8259A将ISR寄存器中指定级别的响应置'1'位清零,适用于在任何情况下使用。

3、特殊中断结束方式:特殊终端结束方式是在普通中断结束方式的基础上,当终端服务结束给8259A发出EOI命令的同时,将当前结束的中断级别也传给8259A,即在命令字明确指出对ISR寄存器中指定级别相应位清0,所以这种方式也称‘指定EOI方式’。

(2)工作方式编程

        由CPU向8259A送三个字节的工作命令字OCW,以规定8259A的工作方式。该命令字可在8259A初始化命令字ICW后的任何时间写入。

操作命令字OCW1——屏蔽操作命令字

用来设置或清除对中断的屏蔽(设置IMR的值)

操作命令字OCW2——中断方式命令字

设置优先循环和中断结束方式

 

 操作命令字OCW3——状态操作命令字

设置和撤销特殊屏蔽方式、设置中断查询方式、设置对8259A内部寄存器的读出命令

这篇关于汇编语言—中断 (8259A)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160008

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

外部中断的边缘触发和电平触发

MCS-51单片机中的边缘触发是指当输入引脚电平由高到低发生跳变时,才引起中断。而电平触发是指只要外部引脚为低电平就引起中断。         在电平触发方式下,当外部引脚的低电平在中断服务返回前没有被拉高时(即撤除中断请求状态),会引起反复的不需要的中断,造成程序执行的错误。这类中断方式下,需要在中断服务程序中设置指令,清除外部中断的低电平状态,使之变为高电平。

汇编语言知识基础介绍

汇编语言是一种低级编程语言,直接与计算机硬件的指令集架构(ISA)对应。它在操作系统、设备驱动程序和性能关键的应用程序中起着重要作用。以下是汇编语言的基础介绍: 1. 基本概念 指令集架构(ISA):汇编语言与特定的处理器架构(如 x86、ARM)对应,每种架构有其特定的指令集。汇编指令:汇编语言的语法是处理器指令的符号表示,通常包括操作码(opcode)和操作数。操作码指定操作的类型,操作数

【Java编程思想】线程的基本协作机制 与 线程的中断

wait/notify Java在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException; 一个带时间参数,单位是毫秒,表示最

基于IMX6ULL的Cortex-A中断原理讲解,以及编写其中断向量表

首先借助STM32我们需要了解中断系统是如何构成的         会有一个中断源,也就是能够向CPU发出中断请求的设备或事件。中断源不分硬件和软件,也就是产生中断信号,就会执行中断服务函数         但是CPU是如何知道中断源产生后就找到对应的中断服务函数呢,这个时候就要引入中断向量表,它的主要功能是描述中断对应的中断服务函数,每个中断源都有一个唯一的中断号(也称向量号),

【银河麒麟高级服务器操作系统实例】虚拟化平台系统服务中断现象分析及处理建议

服务器环境以及配置 【机型】虚机 处理器: Kunpeng-920 内存: 40G 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 银河麒麟操作系统 Kylin-Server-10-SP1-Release-Build20-20210518-arm64 【第三方软件】 智能运维系统、mysql数据集群 现象描述 环境描

s3c2440---中断控制器

一、概述 S3C2440A 中的中断控制器接受来自 60 个中断源的请求。提供这些中断源的是内部外设,如 DMA 控制器、 UART、IIC 等等。 在这些中断源中,UARTn、AC97 和 EINTn 中断对于中断控制器而言是“或”关系。 当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求 ARM920T 内核的 FIQ 或 IRQ。 仲裁步骤由硬件优先级逻辑决定