8.1 中断的基本概念
8.2 可编程中断控制器 8259
8.3 中断服务程序的编程
8.4 保护模式的中断处理
第八章 中断与中断控制
8.1 中断的基本概念
中断最初是作为处理器与外部设备交换信息的一种控制方式提出
的。由此,最初的中断全部是对外部设备而言的,称为外部中断
或硬件中断。
随着计算机技术的发展,中断的范围也随之扩大,出现了内部软
件中断的概念,它是为解决机器内部运行时出现的异常以及为编
程方便而提出的。
外部中断或硬件中断通常称为 中断,软件中断或异常中断通常称
为 异常 (Exception)
8.1 中断的基本概念
不论哪种中断都遵循同样的中断处理过程
中
断
源
中断
请求
当
前
程
序
中断
服务
程序程序断点
中断返回
中断响应
中断:处理器暂停执行当前程序,转而处理随机发生的事件,处理
完毕后再返回到断点处继续执行原来程序的过程
?中断的类型
PC系列微机最多可以支持 256种中断,它们被分为四种类型:
?内部中断和异常
?软件中断
?外部可屏蔽中断
?外部非屏蔽中断
每个中断和异常都指定了一个类型号代表不同的优先级。
类型 0表示最高优先级的中断,类型 255最低优先级的中断
1,内部中断和异常
为处理器执行某些操作而引起的中断,包括除法错误异常、单
步调试中断、断点中断等
这类中断使用了 0H~09H中的若干个中断号
内部中断和异常的例子 P,218
?中断的类型
2.软件中断
执行 有定义的 INT n指令而引发的中断,称为软件中断
有定义的 并非所有的中断号都有对应的中断服务程序
软件中断使用 05H,10H~0FFH中的若干个中断号
软件中断进一步分为 BIOS中断和 DOS中断
?中断的类型
3.外部可屏蔽中断
外部可屏蔽中断是处理器响应各种外部硬件中断的最常用的方
法,通过 CPU的 INTR引脚产生
外部可屏蔽中断受处理器内部的中断允许标志位 IF的控制
处理器以电平触发方式接受 INTR请求,当每条指令结束时,
若 INTR为高电平且 IF=1,则 CPU响应相应 I/O接口的中断请求。
处理器只有一个 INTR引脚可以接受外部可屏蔽中断请求,为
了管理众多的外部中断源,微机系统中采用可编程中断控制器
8259。 PC系列机通过两片 8259级连可以响应 15个外部中断源
?中断的类型
4.外部非屏蔽中断
为外部紧急请求提供服务的中断,通过处理器的 NMI引脚产生
NMI输入是上升沿触发的,只要 NMI输入端上出现由 0到 1的跳
变,一个中断服务请求就被锁存在 Pentium中,与 IF标志的状
态无关
NMI有一个专用的类型号 02H
使用非屏蔽中断的典型例子是电源故障中断
?中断的类型
?中断的优先级与中断嵌套
通常一个系统有多个中断源,而 CPU同一时刻只能响应一个中
断源的请求,那么当多个中断源同时请求中断服务时,应该先
响应哪一个,有一个次序安排的问题。按中断源的轻重缓急程
度确定的优先级别,称为优先级。
内部中断和异常
软件中断
外部非屏蔽中断
外部可屏蔽中断
优
先
级
递
增
?中断的优先级与中断嵌套
当 CPU正在响应某一中断源的请求,执行为其服务的中断服务
程序时,如果有优先级更高的中断源发出请求,CPU将中止正
在执行的中断服务程序而转入为新的中断源服务,等新的中断
服务程序执行完后,再返回到被中止的中断服务程序,这一过
程称为中断嵌套。
中断嵌套可以有多级,具体级数原则上不限,只取决于堆栈深
度
?中断的优先级与中断嵌套
1#中断请求
响应
返回
1#中断
服务程序
2#中断请求
响应
返回
2#中断
服务程序
3#中断请求
响应
返回
3#中断
服务程序原主程序
中断优先级 3#>2#>1#
?中断向量
中断类型号通过一个地址指针表与中断服务程序的入口地址相
联,在实模式下,该表称为中断向量表。
中断向量表包含 256个中断向量。每个中断向量包含两个字( 4
个字节),高地址字为中断服务程序所在代码段的段基址,低
地址字为代码段中中断服务程序第一条指令的偏移量。
实模式下,中断向量表存放在内存最低端的 1K单元之中,物理
地址 00000H~003FFH
P,222
?中断指令
STI—— 开中断指令
将标志寄存器中的中断标志位 IF置 1,允许 CPU响应来自
INTR引脚的中断请求
CLI—— 关中断指令
将标志寄存器中的中断标志位 IF清 0,使 CPU不响应来自
INTR引脚的中断请求
?中断指令
INT n—— 软件中断指令
n为中断号。调用 n号中断服务程序
① 将标志寄存器压栈
②将 TF置 0,禁止单步操作,将 IF置 0,使 CPU处于关中断状态
③断点的 CS,IP压栈
④从中断向量表取 n号中断向量 IP,CS
⑤ 转向 n号中断服务程序
?中断指令
IRET—— 中断返回指令
中断服务程序的出口指令,从栈顶弹出 6个字节依次写入 IP,CS
和标志寄存器
在执行 IRET之前必须保证栈顶是断点地址,否则执行 IRET指令
将导致系统瘫痪
8.2 可编程中断控制器 8259A
8259A是一种可编程中断控制器,有如下功能:
?一片 Intel 8259可管理 8个中断请求,并把当前优先
级最高的中断请求送到 CPU的 INTR端。
?当 CPU响应中断时,为 CPU提供中断类型码。
?8个外部中断的优先级排列方式,可以通过对 8259
编程进行指定。也可以通过编程屏蔽某些中断请求,
或者通过编程改变中断类型码。
?允许 9片 8259级联,构成 64级中断系统。
在 PC/AT系列微机中,使用两片 8259级联,构成 15级中断
?8259A的引脚与功能结构
P,234
?D7~D0:数据线。用于与 CPU之间传送命令、状态、
中断类型码。
?,读出信号。通知 8259把某个内部寄存器的值
送数据线 D7~D0。
?,写入信号。通知 8259把数据线 D7~D0上的值
写入内部某个寄存器。
?A0:选择内部寄存器的端口地址。
在标准 AT机中,使用两片 8259构成主从式中断系
统,
主 8259的端口地址,20H,21H
从 8259的端口地址,A0H,A1H
?INT,把 IRQ7~IRQ0上的最高优先级请求传送到 CPU
的 INTR引脚
?,接收 CPU的中断响应信号。 CPU发出的中断响
应信号为两个负脉冲。第一个负脉冲作为中断应答信
号,第二个负脉冲到来时,8259从数据线 D7~D0上发
出中断类型码。
?8259A的引脚与功能结构
?8259A的内部结构框图和中断工作过程
P,235
IRR:中断请求寄存器
ISR:中断服务寄存器
IMR:中断屏蔽寄存器
PR:优先级判别器
中断过程执行步骤:
P,236
?8259A的控制字格式
初始化命令字( ICW1~ICW4)
ICW1~ICW4在初始化程序中设定,且在整个工作过程
中保持不变。
ICW1~ICW4必须按顺序设定。
ICW1写入 8259偶地址中( A0=0,在 AT机中为
20H/A0H),ICW2~ICW4写入 8259奇地址中( A0=1,
在 AT机中为 21H/A1H)。
P.238 图 7.14
初始化命令字( ICW1~ICW4)
1,ICW1
2,ICW2
3,ICW3
ICW3设置主 8259和从 8259的联结关系(仅当
ICW1中的 SNGL=1,系统中有多片 8259级联时,
才设置 ICW3)。
4,ICW4
规定 8259的中断结束方式,中断嵌套方式,缓冲 /
非缓冲方式。
P,237
初始化命令字( ICW1~ICW4)
ICW1A EQU 20H ;主片端口地址
ICW2A EQU ICW1A+1
ICW3A EQU ICW2A
ICW4A EQU ICW2A
…...
MOV AL,11H ; ICW1,边沿触发,多片,需 ICW4
OUT ICW1A,AL
NOP ; I/O端口延时
MOV AL,08H ; ICW2,中断类型码
OUT ICW2A,AL
NOP
MOV AL,04H ; ICW3,IR2接从片
OUT ICW3A,AL
NOP
MOV AL,01H ; ICW4,非缓冲,全嵌套,非自动结束
OUT ICW4A,AL
NOP
AT机中主片的初始化
操作命令字( OCW1~OCW3)
OCW1~OCW3在应用程序中设置,且可设置多次。
OCW1~OCW3的设置次序无要求。
OCW1为奇地址( A0=1,AT机中为
21H/A1H),OCW2~OCW3为偶地址( A0=0,AT机
中为 20H/A0H)。
操作命令字( OCW1~OCW3)
1,OCW1
中断屏蔽命令字 IMR,当其中某位置 1时,对应的
IR请求被屏蔽 。
例:使主 8259的 IR5屏蔽,程序为:
OCW1 EQU 21H ;主 8259 OCW1的地址
IN AL,OCW1 ;读出 IMR
OR AL,00100000B ;屏蔽 IR5
OUT OCW1,AL
操作命令字( OCW1~OCW3)
2,OCW2
设置中断优先级循环方式和中断结束方式
P,241
3,OCW3
多功能操作命令字
操作命令字( OCW1~OCW3)
3,OCW3
可以设置对 8259内部寄存器读出命令
例:读 IRR
OCW3 EQU 20H
IRR EQU OCW3
ISR EQU OCW3
MOV AL,0AH ;读出命令,P=0,RR=1,RIS=0,选 IRR
OUT OCW3,AL
IN AL,IRR ;在 AL中读得 IRR的值
操作命令字( OCW1~OCW3)
3,OCW3
可以设置对 8259内部寄存器读出命令
例:读 ISR
OCW3 EQU 20H
IRR EQU OCW3
ISR EQU OCW3
MOV AL,0BH ;读出命令,P=0,RR=1,RIS=1,选 ISR
OUT OCW3,AL
IN AL,ISR
?8259A应用举例
PC/AT中,8259的使用情况为:
?2片 8259级联,提供 15级向量中断。从片的 INT接
主片的 IR2。
?端口地址:主片 20H,21H,从片 A0H,A1H。
?主片和从片均采用边沿触发。
?采用全嵌套优先级排列方式
?采用非缓冲方式,主片 接 +5V,从片 接地。
?主片的类型码为 08H~0FH,从片的类型码为
70H~77H。
?8259A应用举例
?8259A应用举例
ICW1A EQU 20H ;主片端口地址
ICW2A EQU ICW1A+1
ICW3A EQU ICW2A
ICW4A EQU ICW2A
ICW1B EQU 0A0H ;从片端口地址
ICW2B EQU ICW1B+1
ICW3B EQU ICW2B
ICW4B EQU ICW2B; ----------- 主片 8259A------------
MOV AL,11H ; ICW1,边沿触发,多片,需 ICW4
OUT ICW1A,AL
NOP ; I/O端口延时
MOV AL,08H ; ICW2,中断类型码
OUT ICW2A,AL
NOP
MOV AL,04H ; ICW3,IR2接从片
OUT ICW3A,AL
NOP
MOV AL,01H ; ICW4,非缓冲,全嵌套,非自动结束
OUT ICW4A,AL
NOP; ----------- 从片 8259A------------
MOV AL,11H ; ICW1,边沿触发,多片,需 ICW4
OUT ICW1B,AL
NOP
MOV AL,70H ; ICW2,中断类型码
OUT ICW2B,AL
NOP
MOV AL,02H ; ICW3,INT接主片的 IR2
OUT ICW3B,AL
NOP
MOV AL,01H ; ICW4,非缓冲,全嵌套,非自动结束
OUT ICW4B,AL
NOP
PC/AT机主、从 8259的初始化程序
?8259A应用举例
8.3 中断服务程序的编程
?中断服务程序的编程原则
1)中断是异步发生的,进入响应时并不考虑当前运行状态。因
此中断服务程序必须保护现场
2)在进入具体中断处理之前要先初始化中断向量,使其指向相
应的中断服务程序,但在此之前要先关中断,以防接管中断过
程中发生中断
3)在中断服务程序入口处要立即开中断,以允许较高优先级的
中断产生
4)中断服务程序的服务时间要尽量压缩,以免干扰同级或低级
中断设备的工作
5)由于 PC机中 8259采用正常结束中断,因此在中断服务程序
执行 IRET返回前应向 8259发结束中断命令 EOI
MOV AL,20H ;使当前 ISR中的对应位复位
OUT 20H,AL
IRET
6)当编制替代系统原有中断服务程序时,应保存好原中断向量
的内容。在应用程序终止前恢复原有的中断向量
7)中断服务程序不要使用 DOS系统功能调用( INT 21H),因
为 DOS不允许重入
?中断服务程序的编程原则
8)若中断服务程序只为某个应用程序服务,则中断服务程序可
以和主程序组装成一个程序一起装入内存,随主程序结束而一起
退出内存
9)若中断服务程序为多个应用程序服务,则中断服务程序可以
与一个初始化程序组装成一个程序一起装入内存,通过初始化程
序的执行而将中断服务程序驻留内存
?中断服务程序的编程原则
?中断向量表的操作
读写转段向量表不能使用 MOV指令,而应调用相应的 DOS功能
?取中断向量
预置 AH=35H,AL=中断类型号
执行 INT 21H
—— 把类型号为 AL的中断向量取出到 ES:BX中
?设置中断向量
预置 AH=25H,AL=中断类型号,DS:DX=中断向量
执行 INT 21H
—— 把 DS:DX指向的中断向量放置到中断向量表中类型号
为 AL的中断向量处
?中断向量表的操作
例:填写中断向量表,实现用户所定义的 60H中断
…...
CLI
PUSH DS
MOV AX,SEG INT60
MOV DS,AX
MOV DX,OFFSET INT60
MOV AH,25H
MOV AL,60H
INT 21H
POP DS
STI
…...
INT60 PROC FAR
……
IRET
INT60 ENDP
中断服务
程序
?中断向量表的操作
例:用用户定义的 中断服务程序置换系统原有的中断服务程序
DATA SEGMENT
OLD_INT_SEG DW?
OLD_INT_OFF DW?
…
DATA ENDS
….
MOV AL,XX
MOV AH,35H
INT 21H
MOV OLD_INT_SEG,ES
MOV OLD_INT_OFF,BX
CLI
PUSH DS
MOV AX,SEG NEW_INT
MOV DS,AX
MOV DX,OFFSET NEW_INT
MOV AH,25H
MOV AL,XX
INT 21H
POP DS
STI
……
CLI
PUSH DS
MOV AX,SEG OLD_INT_SEG
MOV DS,AX
MOV DX,OFFSET OLD_INT_OFF
MOV AH,25H
MOV AL,XX
INT 21H
…...
?中断服务程序的编程
中断入口
保护现场
为中断源服务部分
发中断结束命令
恢复现场
中断返回
?中断服务程序的驻留
INT 21H的 31H号功能
功能:实现程序驻留,返回 DOS
入口参数,AH=31H
DX=被驻留程序的体积,单位是节,1节 =16字节
CODE SEGMENT
ASSUME ….
START,JMP INIT
INT_PR PROC FAR
STI
PUSH … 保护现场
…… 中断服务程序主体
POP… 恢复现场
MOV AL,20H
OUT 20H,AL
IRET
INT_PR ENDP
INTI,CLI
设置中断向量
MOV AL,0
OUT 21H,AL
STI
MOV AH,31H
MOV DX,(OFFSET INIT+15)/16+10H
INT 21H
CODE ENDS
END START
?中断服务程序的驻留
8.4 保护模式的中断处理
?保护模式下采用中断描述符表 IDT管理各级中断
?IDT中最多可以有 256个描述符,对应于 256个中断 /
异常源
?IDT表中的描述符包括了中断服务程序的入口地址
信息
?IDT可置于内存的任意区域,其起始地址由中断描
述符表寄存器 (IDTR)设置
8.4 保护模式的中断处理
?IDT表中的描述符一般是中断门和陷阱门,中断门
对应外部硬件中断,陷阱门对应内部软件中断或异
常
门描述符的格式
0
1
2
3
4
5
6
7
?? ò? á? 0 ~1 5 ??
?? ?? ·? 0 ~1 5 ??
·? ?ê è¨?T ×? ?ú
?? ò? á? 1 6 ~3 1 ??
0 0 0 ×? ?? êy
8.4 保护模式的中断处理
01234567
P DPL 0 TYPE
访问权限字节
中断门 TYPE=1110
陷阱门 TYPE=1111
8.4 保护模式的中断处理
SIDT指令 —— 存储中断描述符表寄存器
IDTREG DB 6 DUP(?)
…...
SGDT IDTREG
将 IDTR的内容复制到由 IDTREG指定的内存中的 6个字节中
LIDT指令 —— 装入中断描述符表寄存器
IDTREG DW 01FFH,0000H,0001H
…...
LIDT IDTREG
将由 IDTREG指定的内存中的 6字节操作数装入 IDTR中
8.4 保护模式的中断处理
1.执行下述指令片段后,IDT装在内存的什么地址?表的长度是多少?
表中可以存放多少个门描述符?
IDT_TABLE DW 01FFH,0000H,0001H
…...
LIDT IDTREG
2.假设 8259的端口地址为 50H,51H,试编写一段程序,将 8259中的
IRR,ISR,IMR的内容读出送至存储器中 REG_ARR开始的内存单元
中
3.某微机系统采用三片 8259级连使用,一片为主,两片为从,从片分
别接入主片的 IR2和 IR4,试画出该系统的硬件连接图。
4.某微机系统只有一片 8259,其端口地址为 02C0H,02C1H,试编写
初始化程序,要求 1)中断请求输入采用电平触发,2) IR0的中断类
型码是 16,3)采用缓冲器方式,4)采用普通的 EOI命令
作业
8.2 可编程中断控制器 8259
8.3 中断服务程序的编程
8.4 保护模式的中断处理
第八章 中断与中断控制
8.1 中断的基本概念
中断最初是作为处理器与外部设备交换信息的一种控制方式提出
的。由此,最初的中断全部是对外部设备而言的,称为外部中断
或硬件中断。
随着计算机技术的发展,中断的范围也随之扩大,出现了内部软
件中断的概念,它是为解决机器内部运行时出现的异常以及为编
程方便而提出的。
外部中断或硬件中断通常称为 中断,软件中断或异常中断通常称
为 异常 (Exception)
8.1 中断的基本概念
不论哪种中断都遵循同样的中断处理过程
中
断
源
中断
请求
当
前
程
序
中断
服务
程序程序断点
中断返回
中断响应
中断:处理器暂停执行当前程序,转而处理随机发生的事件,处理
完毕后再返回到断点处继续执行原来程序的过程
?中断的类型
PC系列微机最多可以支持 256种中断,它们被分为四种类型:
?内部中断和异常
?软件中断
?外部可屏蔽中断
?外部非屏蔽中断
每个中断和异常都指定了一个类型号代表不同的优先级。
类型 0表示最高优先级的中断,类型 255最低优先级的中断
1,内部中断和异常
为处理器执行某些操作而引起的中断,包括除法错误异常、单
步调试中断、断点中断等
这类中断使用了 0H~09H中的若干个中断号
内部中断和异常的例子 P,218
?中断的类型
2.软件中断
执行 有定义的 INT n指令而引发的中断,称为软件中断
有定义的 并非所有的中断号都有对应的中断服务程序
软件中断使用 05H,10H~0FFH中的若干个中断号
软件中断进一步分为 BIOS中断和 DOS中断
?中断的类型
3.外部可屏蔽中断
外部可屏蔽中断是处理器响应各种外部硬件中断的最常用的方
法,通过 CPU的 INTR引脚产生
外部可屏蔽中断受处理器内部的中断允许标志位 IF的控制
处理器以电平触发方式接受 INTR请求,当每条指令结束时,
若 INTR为高电平且 IF=1,则 CPU响应相应 I/O接口的中断请求。
处理器只有一个 INTR引脚可以接受外部可屏蔽中断请求,为
了管理众多的外部中断源,微机系统中采用可编程中断控制器
8259。 PC系列机通过两片 8259级连可以响应 15个外部中断源
?中断的类型
4.外部非屏蔽中断
为外部紧急请求提供服务的中断,通过处理器的 NMI引脚产生
NMI输入是上升沿触发的,只要 NMI输入端上出现由 0到 1的跳
变,一个中断服务请求就被锁存在 Pentium中,与 IF标志的状
态无关
NMI有一个专用的类型号 02H
使用非屏蔽中断的典型例子是电源故障中断
?中断的类型
?中断的优先级与中断嵌套
通常一个系统有多个中断源,而 CPU同一时刻只能响应一个中
断源的请求,那么当多个中断源同时请求中断服务时,应该先
响应哪一个,有一个次序安排的问题。按中断源的轻重缓急程
度确定的优先级别,称为优先级。
内部中断和异常
软件中断
外部非屏蔽中断
外部可屏蔽中断
优
先
级
递
增
?中断的优先级与中断嵌套
当 CPU正在响应某一中断源的请求,执行为其服务的中断服务
程序时,如果有优先级更高的中断源发出请求,CPU将中止正
在执行的中断服务程序而转入为新的中断源服务,等新的中断
服务程序执行完后,再返回到被中止的中断服务程序,这一过
程称为中断嵌套。
中断嵌套可以有多级,具体级数原则上不限,只取决于堆栈深
度
?中断的优先级与中断嵌套
1#中断请求
响应
返回
1#中断
服务程序
2#中断请求
响应
返回
2#中断
服务程序
3#中断请求
响应
返回
3#中断
服务程序原主程序
中断优先级 3#>2#>1#
?中断向量
中断类型号通过一个地址指针表与中断服务程序的入口地址相
联,在实模式下,该表称为中断向量表。
中断向量表包含 256个中断向量。每个中断向量包含两个字( 4
个字节),高地址字为中断服务程序所在代码段的段基址,低
地址字为代码段中中断服务程序第一条指令的偏移量。
实模式下,中断向量表存放在内存最低端的 1K单元之中,物理
地址 00000H~003FFH
P,222
?中断指令
STI—— 开中断指令
将标志寄存器中的中断标志位 IF置 1,允许 CPU响应来自
INTR引脚的中断请求
CLI—— 关中断指令
将标志寄存器中的中断标志位 IF清 0,使 CPU不响应来自
INTR引脚的中断请求
?中断指令
INT n—— 软件中断指令
n为中断号。调用 n号中断服务程序
① 将标志寄存器压栈
②将 TF置 0,禁止单步操作,将 IF置 0,使 CPU处于关中断状态
③断点的 CS,IP压栈
④从中断向量表取 n号中断向量 IP,CS
⑤ 转向 n号中断服务程序
?中断指令
IRET—— 中断返回指令
中断服务程序的出口指令,从栈顶弹出 6个字节依次写入 IP,CS
和标志寄存器
在执行 IRET之前必须保证栈顶是断点地址,否则执行 IRET指令
将导致系统瘫痪
8.2 可编程中断控制器 8259A
8259A是一种可编程中断控制器,有如下功能:
?一片 Intel 8259可管理 8个中断请求,并把当前优先
级最高的中断请求送到 CPU的 INTR端。
?当 CPU响应中断时,为 CPU提供中断类型码。
?8个外部中断的优先级排列方式,可以通过对 8259
编程进行指定。也可以通过编程屏蔽某些中断请求,
或者通过编程改变中断类型码。
?允许 9片 8259级联,构成 64级中断系统。
在 PC/AT系列微机中,使用两片 8259级联,构成 15级中断
?8259A的引脚与功能结构
P,234
?D7~D0:数据线。用于与 CPU之间传送命令、状态、
中断类型码。
?,读出信号。通知 8259把某个内部寄存器的值
送数据线 D7~D0。
?,写入信号。通知 8259把数据线 D7~D0上的值
写入内部某个寄存器。
?A0:选择内部寄存器的端口地址。
在标准 AT机中,使用两片 8259构成主从式中断系
统,
主 8259的端口地址,20H,21H
从 8259的端口地址,A0H,A1H
?INT,把 IRQ7~IRQ0上的最高优先级请求传送到 CPU
的 INTR引脚
?,接收 CPU的中断响应信号。 CPU发出的中断响
应信号为两个负脉冲。第一个负脉冲作为中断应答信
号,第二个负脉冲到来时,8259从数据线 D7~D0上发
出中断类型码。
?8259A的引脚与功能结构
?8259A的内部结构框图和中断工作过程
P,235
IRR:中断请求寄存器
ISR:中断服务寄存器
IMR:中断屏蔽寄存器
PR:优先级判别器
中断过程执行步骤:
P,236
?8259A的控制字格式
初始化命令字( ICW1~ICW4)
ICW1~ICW4在初始化程序中设定,且在整个工作过程
中保持不变。
ICW1~ICW4必须按顺序设定。
ICW1写入 8259偶地址中( A0=0,在 AT机中为
20H/A0H),ICW2~ICW4写入 8259奇地址中( A0=1,
在 AT机中为 21H/A1H)。
P.238 图 7.14
初始化命令字( ICW1~ICW4)
1,ICW1
2,ICW2
3,ICW3
ICW3设置主 8259和从 8259的联结关系(仅当
ICW1中的 SNGL=1,系统中有多片 8259级联时,
才设置 ICW3)。
4,ICW4
规定 8259的中断结束方式,中断嵌套方式,缓冲 /
非缓冲方式。
P,237
初始化命令字( ICW1~ICW4)
ICW1A EQU 20H ;主片端口地址
ICW2A EQU ICW1A+1
ICW3A EQU ICW2A
ICW4A EQU ICW2A
…...
MOV AL,11H ; ICW1,边沿触发,多片,需 ICW4
OUT ICW1A,AL
NOP ; I/O端口延时
MOV AL,08H ; ICW2,中断类型码
OUT ICW2A,AL
NOP
MOV AL,04H ; ICW3,IR2接从片
OUT ICW3A,AL
NOP
MOV AL,01H ; ICW4,非缓冲,全嵌套,非自动结束
OUT ICW4A,AL
NOP
AT机中主片的初始化
操作命令字( OCW1~OCW3)
OCW1~OCW3在应用程序中设置,且可设置多次。
OCW1~OCW3的设置次序无要求。
OCW1为奇地址( A0=1,AT机中为
21H/A1H),OCW2~OCW3为偶地址( A0=0,AT机
中为 20H/A0H)。
操作命令字( OCW1~OCW3)
1,OCW1
中断屏蔽命令字 IMR,当其中某位置 1时,对应的
IR请求被屏蔽 。
例:使主 8259的 IR5屏蔽,程序为:
OCW1 EQU 21H ;主 8259 OCW1的地址
IN AL,OCW1 ;读出 IMR
OR AL,00100000B ;屏蔽 IR5
OUT OCW1,AL
操作命令字( OCW1~OCW3)
2,OCW2
设置中断优先级循环方式和中断结束方式
P,241
3,OCW3
多功能操作命令字
操作命令字( OCW1~OCW3)
3,OCW3
可以设置对 8259内部寄存器读出命令
例:读 IRR
OCW3 EQU 20H
IRR EQU OCW3
ISR EQU OCW3
MOV AL,0AH ;读出命令,P=0,RR=1,RIS=0,选 IRR
OUT OCW3,AL
IN AL,IRR ;在 AL中读得 IRR的值
操作命令字( OCW1~OCW3)
3,OCW3
可以设置对 8259内部寄存器读出命令
例:读 ISR
OCW3 EQU 20H
IRR EQU OCW3
ISR EQU OCW3
MOV AL,0BH ;读出命令,P=0,RR=1,RIS=1,选 ISR
OUT OCW3,AL
IN AL,ISR
?8259A应用举例
PC/AT中,8259的使用情况为:
?2片 8259级联,提供 15级向量中断。从片的 INT接
主片的 IR2。
?端口地址:主片 20H,21H,从片 A0H,A1H。
?主片和从片均采用边沿触发。
?采用全嵌套优先级排列方式
?采用非缓冲方式,主片 接 +5V,从片 接地。
?主片的类型码为 08H~0FH,从片的类型码为
70H~77H。
?8259A应用举例
?8259A应用举例
ICW1A EQU 20H ;主片端口地址
ICW2A EQU ICW1A+1
ICW3A EQU ICW2A
ICW4A EQU ICW2A
ICW1B EQU 0A0H ;从片端口地址
ICW2B EQU ICW1B+1
ICW3B EQU ICW2B
ICW4B EQU ICW2B; ----------- 主片 8259A------------
MOV AL,11H ; ICW1,边沿触发,多片,需 ICW4
OUT ICW1A,AL
NOP ; I/O端口延时
MOV AL,08H ; ICW2,中断类型码
OUT ICW2A,AL
NOP
MOV AL,04H ; ICW3,IR2接从片
OUT ICW3A,AL
NOP
MOV AL,01H ; ICW4,非缓冲,全嵌套,非自动结束
OUT ICW4A,AL
NOP; ----------- 从片 8259A------------
MOV AL,11H ; ICW1,边沿触发,多片,需 ICW4
OUT ICW1B,AL
NOP
MOV AL,70H ; ICW2,中断类型码
OUT ICW2B,AL
NOP
MOV AL,02H ; ICW3,INT接主片的 IR2
OUT ICW3B,AL
NOP
MOV AL,01H ; ICW4,非缓冲,全嵌套,非自动结束
OUT ICW4B,AL
NOP
PC/AT机主、从 8259的初始化程序
?8259A应用举例
8.3 中断服务程序的编程
?中断服务程序的编程原则
1)中断是异步发生的,进入响应时并不考虑当前运行状态。因
此中断服务程序必须保护现场
2)在进入具体中断处理之前要先初始化中断向量,使其指向相
应的中断服务程序,但在此之前要先关中断,以防接管中断过
程中发生中断
3)在中断服务程序入口处要立即开中断,以允许较高优先级的
中断产生
4)中断服务程序的服务时间要尽量压缩,以免干扰同级或低级
中断设备的工作
5)由于 PC机中 8259采用正常结束中断,因此在中断服务程序
执行 IRET返回前应向 8259发结束中断命令 EOI
MOV AL,20H ;使当前 ISR中的对应位复位
OUT 20H,AL
IRET
6)当编制替代系统原有中断服务程序时,应保存好原中断向量
的内容。在应用程序终止前恢复原有的中断向量
7)中断服务程序不要使用 DOS系统功能调用( INT 21H),因
为 DOS不允许重入
?中断服务程序的编程原则
8)若中断服务程序只为某个应用程序服务,则中断服务程序可
以和主程序组装成一个程序一起装入内存,随主程序结束而一起
退出内存
9)若中断服务程序为多个应用程序服务,则中断服务程序可以
与一个初始化程序组装成一个程序一起装入内存,通过初始化程
序的执行而将中断服务程序驻留内存
?中断服务程序的编程原则
?中断向量表的操作
读写转段向量表不能使用 MOV指令,而应调用相应的 DOS功能
?取中断向量
预置 AH=35H,AL=中断类型号
执行 INT 21H
—— 把类型号为 AL的中断向量取出到 ES:BX中
?设置中断向量
预置 AH=25H,AL=中断类型号,DS:DX=中断向量
执行 INT 21H
—— 把 DS:DX指向的中断向量放置到中断向量表中类型号
为 AL的中断向量处
?中断向量表的操作
例:填写中断向量表,实现用户所定义的 60H中断
…...
CLI
PUSH DS
MOV AX,SEG INT60
MOV DS,AX
MOV DX,OFFSET INT60
MOV AH,25H
MOV AL,60H
INT 21H
POP DS
STI
…...
INT60 PROC FAR
……
IRET
INT60 ENDP
中断服务
程序
?中断向量表的操作
例:用用户定义的 中断服务程序置换系统原有的中断服务程序
DATA SEGMENT
OLD_INT_SEG DW?
OLD_INT_OFF DW?
…
DATA ENDS
….
MOV AL,XX
MOV AH,35H
INT 21H
MOV OLD_INT_SEG,ES
MOV OLD_INT_OFF,BX
CLI
PUSH DS
MOV AX,SEG NEW_INT
MOV DS,AX
MOV DX,OFFSET NEW_INT
MOV AH,25H
MOV AL,XX
INT 21H
POP DS
STI
……
CLI
PUSH DS
MOV AX,SEG OLD_INT_SEG
MOV DS,AX
MOV DX,OFFSET OLD_INT_OFF
MOV AH,25H
MOV AL,XX
INT 21H
…...
?中断服务程序的编程
中断入口
保护现场
为中断源服务部分
发中断结束命令
恢复现场
中断返回
?中断服务程序的驻留
INT 21H的 31H号功能
功能:实现程序驻留,返回 DOS
入口参数,AH=31H
DX=被驻留程序的体积,单位是节,1节 =16字节
CODE SEGMENT
ASSUME ….
START,JMP INIT
INT_PR PROC FAR
STI
PUSH … 保护现场
…… 中断服务程序主体
POP… 恢复现场
MOV AL,20H
OUT 20H,AL
IRET
INT_PR ENDP
INTI,CLI
设置中断向量
MOV AL,0
OUT 21H,AL
STI
MOV AH,31H
MOV DX,(OFFSET INIT+15)/16+10H
INT 21H
CODE ENDS
END START
?中断服务程序的驻留
8.4 保护模式的中断处理
?保护模式下采用中断描述符表 IDT管理各级中断
?IDT中最多可以有 256个描述符,对应于 256个中断 /
异常源
?IDT表中的描述符包括了中断服务程序的入口地址
信息
?IDT可置于内存的任意区域,其起始地址由中断描
述符表寄存器 (IDTR)设置
8.4 保护模式的中断处理
?IDT表中的描述符一般是中断门和陷阱门,中断门
对应外部硬件中断,陷阱门对应内部软件中断或异
常
门描述符的格式
0
1
2
3
4
5
6
7
?? ò? á? 0 ~1 5 ??
?? ?? ·? 0 ~1 5 ??
·? ?ê è¨?T ×? ?ú
?? ò? á? 1 6 ~3 1 ??
0 0 0 ×? ?? êy
8.4 保护模式的中断处理
01234567
P DPL 0 TYPE
访问权限字节
中断门 TYPE=1110
陷阱门 TYPE=1111
8.4 保护模式的中断处理
SIDT指令 —— 存储中断描述符表寄存器
IDTREG DB 6 DUP(?)
…...
SGDT IDTREG
将 IDTR的内容复制到由 IDTREG指定的内存中的 6个字节中
LIDT指令 —— 装入中断描述符表寄存器
IDTREG DW 01FFH,0000H,0001H
…...
LIDT IDTREG
将由 IDTREG指定的内存中的 6字节操作数装入 IDTR中
8.4 保护模式的中断处理
1.执行下述指令片段后,IDT装在内存的什么地址?表的长度是多少?
表中可以存放多少个门描述符?
IDT_TABLE DW 01FFH,0000H,0001H
…...
LIDT IDTREG
2.假设 8259的端口地址为 50H,51H,试编写一段程序,将 8259中的
IRR,ISR,IMR的内容读出送至存储器中 REG_ARR开始的内存单元
中
3.某微机系统采用三片 8259级连使用,一片为主,两片为从,从片分
别接入主片的 IR2和 IR4,试画出该系统的硬件连接图。
4.某微机系统只有一片 8259,其端口地址为 02C0H,02C1H,试编写
初始化程序,要求 1)中断请求输入采用电平触发,2) IR0的中断类
型码是 16,3)采用缓冲器方式,4)采用普通的 EOI命令
作业