下冰雹 · 2023年07月31日

万字长文玩转中断:从硬件看中断之8088

前言

老实话,不知道这个中断有没有写的必要,因为网上有太多的优秀的文章。

但是最后看了好多篇前辈们的文章后,仿佛懂了,但是总感觉不得劲。最后发现前辈的大多数内容都是很局部的,这不是因为前辈们的能力,只是因为前辈想尽量用简短的文字去描述一些知识。

于是这篇毕竟啰嗦的文章就产生了,之前恰好也搞了gic,于是这里x86和arm都会有所涉及,相信这篇文章会对你有所收获。

整个文章系列分为以下两个方面:

  • 1、从硬件看什么是中断?
  • 2、从内核看什么是中断?

(感谢前辈们的优秀书籍与博客)

1、从硬件看什么是中断?

1、前言

所谓中断,是指CPU在正常运行程序时,由程序预先安排好的事件,或者由内、外部事件引起CPU中断正在运行的程序,而转到为预先安排的事件或内、外部事件服务的程序中去。

  • 这些引起程序中断的事件称为中断源。
  • 预先安排好的事件是指PC的中断指令。

执行到此,立即转到对应的服务程序去执行。

内部事件是指系统板上出现的一些事件信号,中断指令也可看做内部事件

外部事件是指某些接口设备所发出的请求中断程序执行的信号,这些信号称为中断请求信号

中断请求信号何时发生是不可预知的,然而,它们一旦请求中断,就会向CPU发出电信号,因此这些信号CPU是可以测知的。这样,CPU就无需花大量的时间去查询这些信号。

例如,键盘何时有键按下是随机的,因而CPU可以对键盘不加等待,而去执行其他程序,一旦有键按下,键盘马上产生中断信号,CPU得知这一信号后,就立即去执行为键盘服务的中断程序,服务结束后,CPU又恢复执行被中断了的程序。

  • 中断服务程序执行完,返回原来执行程序的中断处(称为断点)继续往下执行,称为中断返回。
  • 有时中断请求信号(即中断源)可能有好几个,因此CPU响应这些中断就得有先后次序,这称为中断的优先级。

优先级高的中断,CPU首先响应;优先级低的中断暂不响应,称为挂起。

  • 有些中断源产生的中断,可以用编程的方法,使CPU不予理睬,这叫做中断的屏蔽。

CPU响应中断转去执行中断服务程序前,需要把被中断程序的现场信息保存起来,以便执行完中断服务程序后,接着从被中断程序的断点处继续往下执行。

现场信息包括程序计数器的内容、CPU的状态信息、执行指令后的结果特征和一些通用寄存器的内容。

有些信息的保存,如程序计数器的内容等,由机器硬件预先安排完成,称为中断处理的隐操作;而有些信息的保存是在中断服务程序中预先安排的。

CPU响应中断,由中断源提供地址信息,引导程序转移并执行中断服务程序,这个地址信息称为中断向量,它一般是和中断源相对应的。PC采用类型码来标识中断源。

在数据采集或实时控制中,CPU对接口设备的控制或交换信息,可采用查询、中断、DMA等方式,而中断方式以其执行速度快,可实时处理,不占用CPU过多的时间等优点,在接口技术中较多地被采用。

2、中断概述

1 中断的必要性

如上所述,CPU在与外设交换信息时,若用查询的方式,则CPU就要浪费很多时间去等待外设。

这样就存在一个快速的CPU与慢速的外设之间的矛盾,这也是计算机在发展过程中遇到的严重问题之一。为解决这个问题,一方面要提高外设的工作速度;另一方面发展了中断的概念。中断有以下好处。

  • 1.同步操作

有了中断功能,就可以使CPU和外设同时工作。 CPU在启动外设工作后,就继续执行主程序,同时外设也在工作;当外设把数据准备好后,发出中断申请,请求CPU中断它的程序,执行输入或输出(中断处理);处理完以后,CPU恢复执行主程序,外设也继续工作。而且有了中断功能,CPU可命令多个外设同时工作,这样就大大提高了CPU的利用率,也提高了输入、输出的速度。

  • 2.实现实时处理 当计算机用于实时控制时,中断是一个十分重要的功能。现场的各种参数、信息,需要的话可在任何时间发出中断申请,要求CPU处理;CPU可以马上响应(若中断是开放的话)并加以处理。这样的及时处理在查询工作方式下是做不到的。
  • 3.故障处理 计算机在运行过程中,往往会出现事先预料不到的情况,或出现一些故障,如电源突跳、存储器出错、运算溢出等,计算机可以利用中断系统自行处理,不必停机或报告工作人员。

2 中断源

引起中断的原因,或能发出中断申请的来源,称为中断源。通常中断源有以下几种。

  • 1.一般的输入/输出设备 如键盘、纸带读入机、打印机等。
  • 2.数据通道中断源 如磁盘、磁带等。3.实时时钟
  • 3.实时时钟 在控制中,常遇到时间控制问题等,若用CPU执行一段程序来实现延时的方法,则在这段时间内,CPU不能干别的工作,降低了CPU的利用率。所以,常采用外部时钟电路,当需要定时时,CPU发出命令,令时钟电路(电路的定时时间通常是可编程的,即可用程序来确定和改变)开始工作,待规定的时间到了后,时钟电路发出中断申请,由CPU加以处理。(看门狗)
  • 4.故障源 例如,电源掉电时,需要把正在执行的程序的状态——PC(或IP)、各个寄存器的内容和标志位的状态保留下来,以便重新供电后能从断点处继续运行。另外,目前绝大部分微型计算机中,RAM为半导体存储器,电源掉电后,必须接入备用电源(电池)供电,以保护存储器中的信息。所以,在直流电源上并上大电容,使其因掉电或电压下降到一定值时就发出中断申请,由计算机的中断系统执行上述的各项操作。
  • 5.为调试程序而设置的中断源 一个新程序编制好以后,必须经过反复调试才能可靠地工作。在程序调试时,为了检查结果,或为了寻找毛病所在,往往要求在程序中设置断点,或进行单步工作(一次只执行一条指令),这要由中断系统来实现。 (断点竟然是中断)

3 中断系统的功能

为了满足上述各种情况下的中断要求,中断系统应具有如下功能。

  • 1.实现中断及返回 当某一中断源发出中断申请时,CPU能决定是否响应这个中断请求(当CPU在执行更紧急、更重要的工作时,可以暂不响应中断)。若允许响应这个中断请求,CPU必须在现行的指令执行完后,把断点处的IP和CS的值(即下一条应执行指令的地址)、各个寄存器的内容和标志位的状态,推入堆栈保留下来──保护断点和现场。然后才能转到需要处理的中断源的服务程序(Interrupt Service Routine)的入口,同时清除中断请求触发器。当中断处理完后,恢复被保留下来的各个寄存器和标志位的状态(称为恢复现场)并恢复IP和CS的值(称为恢复断点),使CPU返回断点,继续执行主程序。
  • 2.能实现优先排队 通常,在系统中有多个中断源,会出现两个或更多个中断源同时提出中断请求的情况,这样就必须要求设计者事先根据轻重缓急,给每个中断源确定一个中断级别──优先权。当多个中断源同时发出中断申请时,CPU能找到优先权级别最高的中断源,响应它的中断请求;在优先权级别最高的中断源处理完以后,再响应级别较低的中断源。
  • 3.高级中断源能中断低级的中断处理 当CPU响应某一中断源的请求,在进行中断处理时,若有优先权级别更高的中断源发出中断申请,则CPU要能中断正在进行的中断服务程序,保留这个程序的断点和现场(类似于子程序嵌套),响应高级中断,在高级中断处理完以后,再继续执行被中断的中断服务程序。当发出新的中断申请的中断源的优先级别与正在处理的中断源为同级或更低时,CPU就先不响应这个中断申请,直至正在处理的中断服务程序执行完以后才去处理新的中断申请。

3、CPU响应中断的条件和过程

由于引脚的限制,CPU的中断请求线的数量是有限的。例如,8088只有一条可屏蔽硬件中断请求线(INTR)。最简单的情况当然是只有一个中断源,我们就从这个最简单的情况分析。

1 CPU响应中断的条件

  • 1.设置中断请求触发器

每一个中断源,要能发出中断请求信号,且这个信号能一直保持到CPU响应这个中断请求后,才可清除中断请求故要求每一个中断源有一个中断源请求触发器A,如图所示。

image.png
图1 设置中断请求的电路

  • 2.设置中断屏蔽触发器 在实际系统中,往往有多个中断源。为了增强控制的灵活性,需要在每一个外设的接口电路中增加一个中断屏蔽触发器B,只有当此触发器的输出为“1”时,外设的中断请求才能被送至CPU,如图2所示。可把8个外设的中断屏蔽触发器组成一个端口,用输出指令来控制它们的状态。

image.png
图2 具有中断屏蔽的接口电路

2 CPU对中断的响应

  • 3.中断是开放的

在CPU内部有一个中断允许触发器。只有当其为“1”时(即中断开放时),CPU才能响应中断;若其为“0”(即中断是关闭的),则即使INTR线上有中断请求,CPU也不响应。

这个触发器的状态可由STI和CLI指令改变。+ 当CPU复位时,中断允许触发器的输出为“0”,即关中断,所以必须用STI指令开中断。+ 当中断响应后,CPU自动关中断,所以必须在中断服务程序中用STI指令开中断。

  • 4.CPU在现行指令结束后响应中断

CPU在现行指令运行到最后一个机器周期的最后一个T状态时,才采样INTR线。

若发现有中断请求,则把内部的中断锁存器置“1”,下一个机器周期不进入取指周期,而进入中断周期。其时序流程如图3所示。

image.png
图3 中断时序流程图

当满足上述条件后,CPU响应中断,转入中断周期,CPU做以下几件事。

  • 1.关中断

8088在CPU响应中断后,发出中断响应信号INTA的同时,内部自动地实现关中断。

  • 2.保留断点

CPU响应中断,封锁IP+1,且把IP和CS推入堆栈保留,以备中断处理完毕后,能返回主程序。

  • 3.保护现场

为了使中断处理程序不影响主程序的运行,故要把断点处有关的各个寄存器的内容和标志位的状态,推入堆栈保护起来。8088通过软件(即在中断服务程序中)把要用到的寄存器的内容用PUSH指令推入堆栈。

  • 4.给出中断入口,转入相应的中断服务程序

8088由中断源提供的中断矢量形成中断入口地址(即中断服务程序的起始地址)。在中断服务程序完成后,还要做下述的5、6两步工作。

  • 5.恢复现场 把所保存的各个内部寄存器的内容和标志位的状态,从堆栈弹出,送回CPU中的原来位置。这个操作在8088中也是通过服务程序中的POP指令来完成的。
  • 6.开中断与返回

在中断服务程序的最后,要开中断(以便CPU能响应新的中断请求)和安排一条返回指令,将堆栈内保存的IP和CS的值弹出,程序恢复到主程序中运行。

上述过程可用如图4所示的流程图表示。

image.png
图4 中断响应、服务及返回流程图

4、中断优先权及多重中断

1 中断优先权

如前所述,实际的系统中,是有多个中断源的,但是,由于CPU引脚的限制,往往只有一条中断请求线。于是,当有多个外中断源同时请求时,CPU就要识别出哪些中断源有中断请求,辨别和比较它们的优先权(Priority),先响应优先权级别最高的中断请求。另外,当CPU处理中断时,也要能响应更高级的中断请求,而屏蔽掉同级或较低级的中断请求。

要判别和确定各个中断源的优先权可以用软件和硬件两种方法。

1.用软件确定中断优先权

软件采用查询技术。当CPU响应中断后,就用软件查询以确定是哪些外设申请了中断,并判断它们的优先权。

把8个外设的中断请求触发器组合起来,作为一个端口,并赋以设备号,如图5所示,把各个外设的中断请求信号相“或”后,作为INTR信号,故任一外设有中断请求,都可向CPU送出INTR信号。

image.png

当CPU响应中断后,把中断寄存器的状态,作为一个外设读入CPU,逐位检测它们的状态,若有中断请求就转到相应的服务程序的入口。其流程如图6所示。

image.png

image.png

2.硬件优先权排队电路

  • (1)中断优先权编码电路

采用硬件编码器和比较器的优先权排队电路,如图7所示

image.png
图7 编码器和比较器的优先权排队电路

若有8个中断源,当任意一个有中断请求时,通过或门,即可有一个中断请求信号产生,能否送至CPU的中断请求线,还要受比较器的控制(若优先权失效信号为低电平,则与门2关闭)。

8条中断输入线的任一条,经过编码器可以产生三位二进制优先权编码A2A1A0,优先权最高的线的编码为111,优先权最低的线的编码为000。而且若有多个输入线同时输入,则编码器只输出优先权最高的编码。

正在进行中断处理的外设的优先权编码,通过CPU的数据总线,送至优先权寄存器,然后输出编码B2B1B0至比较器,以上过程是由软件实现的。

比较器比较编码A2A1A0与B2B1B0的大小,若A<B,则“A>B”端输出低电平,封锁与门1,就不向CPU发出新的中断申请(即当CPU正在处理中断时,当有同级或低级的中断源申请中断时,优先权排队电路就屏蔽掉它们的请求);只有当A>B时,比较器输出端才为高电平,打开与门1,将中断请求信号送至CPU的INTR输入端,CPU就中断正在进行的中断处理程序,转去响应更高级的中断。

若CPU不再进行中断处理时(即在执行主程序),则优先权失效信号为高电平,当有任一种中断源请求中断时,都能通过与门2发出INTR信号。这样的优先权电路,如何才能转入优先权最高的外设的服务程序的入口呢?当外设的个数小于等于8时,则它们公用一个产生中断矢量的电路,根据比较器的编码A2A1A0,就能做到不同的编码转入不同的入口地址。

  • (2)雏菊花环(Daisy Chain)式或称为链式优先权排队电路

当多个输入有中断请求时,则由中断输入信号的“或”电路产生INTR信号,送至CPU。CPU执行完现行指令后,响应中断,发出中断响应信号。但究竟响应哪一个中断呢?或CPU是转向哪一个中断服务程序的入口呢?这要由图8所示的链式优先权排队电路确定。

当中断响应为高电平时,若F/F A有中断请求,则它的输出为高电平,于是与门A1输出为高电平,由它控制转至中断1的服务程序的入口,且门A2输出为低电平,因而使门B1、B2、C1、C2…所有下面各级门的输入和输出全为低电平,即屏蔽了以下的各级。

若第一级没有中断请求,即F/F A=0,则中断输出为低电平,但门A2的输出却为高电平,即把中断响应传递至中断请求2。若此时F/F B=1,则与门B1输出为高电平,控制转去执行中断2的服务程序;此时与门B2的输出为低电平,因而屏蔽了以下各级。而若F/F B=0,则与门B1输出为低电平,而与门B2输出为高电平,把中断响应传递至中断请求3……

image.png
图8 链式优先权排队电路

综上所述,在链式优先权排队电路中,

  • 若上级的输出信号为“0”,则屏蔽了本级和所有的低级中断;
  • 若上级输入为“1”,在本级有中断请求时,则转去执行本级的处理程序,且使本级至下级的输出为“0”,屏蔽所有低级中断;
  • 若本级没有中断请求,则本级至下级的输出为“1”,允许下一级中断,故在链的最前面的优先权最高。

2 多级中断的概念

多级中断系统是指计算机系统中有相当多的中断源,根据各中断事件的轻重缓急而分成若干级别,每一中断级分配一个优先权。

一般来说,优先权高的中断级可以打断优先权低的中断服务程序,以程序嵌套方式进行工作。

如图9(a)所示,三级中断优先权高于二级,而二级中断优先权高于一级。

image.png

根据系统的配置不同,多级中断又可分为一维多级中断和二维多级中断,如图9(b)所示。

image.png

一维多级中断是指每一中断中只有一个中断源,而二维多级中断是指每一级中断中又有多个中断源。

图中虚线左边结构为一维多级中断,如果取掉虚线则成为二维多级中断结构。

对于多级中断,我们着重说明如下几点:

  • 第一,一个系统若有n级中断,在CPU中就有n个中断请求触发器,总称为中断请求寄存器;与之对应的有n级中断屏蔽触发器,总称为中断屏蔽寄存器。

    • 与单级中断不同,在多级中断中,中断屏蔽寄存器的内容是一个很重要的程序现场,因此在响应中断时,需要把中断屏蔽寄存器的内容保存起来,并设置新的中断屏蔽状态。
    • 一般在某一级中断被响应后,要置“0”(关闭)本级和优先权低于本级的中断屏蔽触发器,置“1”(开放)更高级的中断屏蔽触发器,以此来实现正常的中断嵌套。
  • 第二,多级中断中的每一级可以只有一个中断源,也可以有多个中断源。在多级中断之间可以实现中断嵌套,但是同一级内的不同中断源的中断是不能嵌套的,必须是处理完一个中断后再响应和处理同一级内的其他中断源。
  • 第三,设置多级中断的系统一般都希望有较快的中断响应时间,因此首先响应哪一级中断和哪个中断源,由硬件逻辑实现,而不是由程序实现。

    • 图9(b)中的中断优先排队电路,就是用于决定优先响应中断级的硬件逻辑。另外,在二维中断结构中,除了由中断优先级排队电路确定优先响应中断级外还要确定优先响应的中断源,一般通过链式查询的硬件逻辑来实现。
    • 显然,这是用独立请求方式与链式查询方式相结合的方法来决定首先响应哪个中断源。
  • 第四,和单级中断情况类似,在多级中断中也使用中断堆栈保存现场信息。使用堆栈保存现场的好处是:

    • ① 控制逻辑简单,保存和恢复现场的过程按先进后出顺序进行。
    • ② 每一级中断不必单独设置现场保护区,各级中断现场可按其顺序放在同一栈里。

image.png

5、 8088的中断方式

8088有两种类型的中断:由执行某些指令引起的软中断设备引起的硬中断,这两类中断均有中断类型码相对应。

1.软中断

执行下述指令时,将产生或可能产生中断。

  • (1)DIV(除)或IDIV(整除)指令

当执行这些除法指令时,若除数为0或商溢出,则产生中断,称为0型中断。

  • (2)INT指令

当执行中断指令INT n时,则产生n型中断。

  • (3)INTO指令

若在指令序列执行过程中,上条指令执行的结果使溢出标志位O=1,接着若执行的是INTO指令,则引起内部中断,称为4型中断;若溢出标志位O=0,该指令将不起作用。

  • (4)单步执行

当标志位T=1时,每执行一条指令,则引起一次中断,即指令为单步执行方式,这种方式常用于程序的调试。单步执行为1型中断。

2.硬中断

8088有两种中断请求线:

非屏蔽中断NMI线和可屏蔽中断INTR线,在这两条线上产生中断请求信号而引起的中断称为硬中断。

(1)可屏蔽中断

出现在INTR线上的请求信号是电平触发的,它的出现是异步的,在CPU内部由CLK的上升沿来同步。在该线上的中断请求信号(高电平有效)必须保持到当前指令的结束。

在这条线上出现的中断请求,CPU是否响应要取决于标志位I的状态, + 若I=1,则CPU就响应,可以认为此时CPU处于中断状态;+ 若I=0,则CPU就不响应。

I位的状态,可以用指令STI使其置位(即开中断);也可用CLI指令使其复位(即关中断)。 要注意:+ 在系统复位以后,标志位I=0;此外任一种中断(内部中断、NMI、INTR)被响应后,I=0。所以必须在一定的时候用STI来开放中断。+ CPU是在当前指令周期的最后一个T状态采样中断请求信号的, 若发现有可屏蔽中断请求,且中断允许(I=1),则CPU进入中断响应周期。

(时钟周期,又称节拍周期,是处理器的最基本单位,晶振频率的倒数,也称T状态)

  • (2)非屏蔽中断

当NMI线上出现一个由低向高上跳的高电平中断请求信号后(持续时间大于两个时钟周期),不管标志寄存器I位的状态如何,当前指令执行完成后,8088马上转入中断处理。

此种类型的中断有三种来源:+ 电源故障, + 系统板上随机存储器奇偶校验错, + 8087(协处理器)中断请求和I/O通道检查错。非屏蔽中断的优先权高于可屏蔽中断。

3.中断向量表

8088中有一个简单而又多功能的中断系统。上述的任何一种中断,CPU响应以后,都要保护现场(主要是标志位)和保护断点(现行的码段寄存器CS和指令指针IP),然后转入各自的中断服务程序。在8088中各种中断如何转入各自的中断服务程序呢?

8088在内存的前1KB(地址为00000H~003FFH)建立了一个中断向量表,可以容纳256个中断向量(或256个中断类型),每个中断向量占用4B。(这个应该是)

在这4B中,包含着这个中断向量(或这个中断类型)的服务程序的入口地址——前两个字节为服务程序的IP,后两个字节为服务程序的CS,如图10所示。(CS:IP)

其中前5个中断向量(或中断类型)由Intel专用,系统又保留了若干个中断向量,余下的就可以由用户自己使用,作为中断源的向量。

image.png

4.8088中的中断响应和处理过程

8088中各种中断的响应和处理过程是不相同的,但主要区别在于如何获取相应的中断类型码(向量号)。

对于硬件(外部)中断,CPU在当前指令周期的T状态采样中断请求信号,

  • 如果有可屏蔽中断请求,且CPU处在开中断状态(I标志为1),则CPU转入两个连续的中断响应周期,在第二个中断周期的T4状态前沿,采样数据线获取由外设输入的类型码;
C.PU在T1、T2、T3、T4这四个状态完成一个总线周期。在T1状态,把地址信息从地址线A19~A16,A15~A8和AD7~AD0上输出,且立即发出地址锁存信号ALE,把在A19~A16上出现的高4位地址和在AD15~AD0(8088则是AD7~AD0)上出现的地址,在外部地址锁存器上锁存。在T2状态,CPU发送读写等控制命令。在T3、T4状态,CPU发送或接收数据,并在T4状态结束此总线周期。当外部存储器或I/O端口的时序不能与CPU的时序相配合时,就需要插入TW周期。**因此,在CPU中设计了一条准备就绪READY输入线,即存储器或I/O端口输给CPU的状态线。**CPU在T3采样READY线,若为高电平,则在T3状态后进入T4状态。若存储器或I/O端口来不及在T4状态的前沿把数据准备好,则当CPU在T3状态采样时应使READY线为低电平,并在T3状态后插入一个等待状态TW。
  • 若是采样到非屏蔽中断请求,则CPU不经过上述的两个中断响应周期,而在内部自动产生中断类型码2。

对于软件中断,中断类型码也是自动形成的。对于INT n指令,则类型码即为指令中给定的n。8088在取得了类型码后的处理过程是一样的,其顺序为:

  • ① 将类型码乘4,作为中断向量表的指针;
  • ② 把CPU的标志寄存器入栈,保护各个标志位,此操作类似于PUSH F指令;
  • ③ 复制追踪标志T的状态,接着清除I和T标志,屏蔽新的INTR中断和单步中断;
  • ④ 保存主程序中的断点,即把主程序断点处的IP和CS的值推入堆栈保护,先推入CS的值,再推入IP的值;
  • ⑤ 从中断向量表中取中断服务程序的入口地址,分别送至CS和IP中,先取CS的值;
  • ⑥ 按新地址执行中断服务程序。

在中断服务程序中,通常要保护CPU内部寄存器的值(保护现场)及开中断(若允许中断嵌套的话)。

在中断服务程序执行完后,要恢复现状,最后执行中断返回指令IRET。

IRET指令按次序恢复断点处的IP和CS的值,恢复标志寄存器(相当于POP F)。

于是程序就恢复到断点处继续执行。8088的中断响应和处理过程可用如图11所示的流程图来表示。

image.png

6、IBM PC/XT的中断方式

1.IBM PC/XT的中断类型

在IBM PC/XT中有三种类型的中断。

  • (1)内部中断即软中断

包括被0除、单步执行、溢出和中断指令(包括断点中断)等。这是由8088执行指令产生的中断。

  • (2)非屏蔽中断NMI

在IBM PC/XT中若存储器的读/写奇偶校验错,或者是由8087(协处理器)的异常所产生的中断,都送至8088的NMI输入端要求处理。

  • (3)可屏蔽中断INTR

在IBM PC/XT系统中,可能有多个外部设备中断请求信号,而8088 CPU的可屏蔽中断输入信号只有一个INTR。

为此,在IBM PC/XT系统中,采用中断控制器(8259)将外部设备中断请求信号扩充到8个。

IBM PC/XT系统中可屏蔽的中断源及其相应的类型码如表1所示。

表1 可屏蔽的中断源及其相应的类型码
image.png

2.IBM PC/XT中系统保留的中断

8088 CPU最多能处理256种不同的中断,其中有5个保留为CPU专用;又有相当一部分是由磁盘操作系统DOS保留为系统用的。

所有已经保留的中断类型,用户就不能再使用了,但可使用的仍然有近200个中断,这对于绝大部分用户来说已经是足够了。

IBM PC/XT中保留的中断(所用的DOS的版本号不同会有一些不同)中,前5个中断类型是8088规定的专用中断。BIOS的中断类型号为0~1F,其功能如表2所示:

表2 IBM PC/XT中保留的BIOS中断
image.png
image.png

在这些类型的中断中,

  • 类型号8~F就是上述通过8259的八级硬件中断;
  • 类型号5和10~1A是基本外部设备的输入/输出驱动程序和BIOS中调用的有关程序;
  • 类型号1B和1C由用户设定,1D~1F指向3个数据区域。

中断类型号20~3F由DOS操作系统使用,用户程序也可以调用其中的20~27号中断。

这些中断功能安排如表3所示。

表3 IBM PC/XT中保留的DOS中断
image.png

40号以后的中断类型可由用户程序安排使用。

本章我们借助8088这个基础的中断控制器,让我们对中断的硬件电路有了基础的认知,这里我们来看两个当下非常常用和流行的中断控制管理器8259A、APIC。

当然ARM的GIC肯定也是会有的哦。

7、参考内容

  • 《计算机硬件技术基础》
  • 《汇编语言与接口技术》
作者:Hcoco
文章来源:TrustZone

推荐阅读

更多IC设计干货请关注IC设计专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
19462
内容数
1300
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息