当前位置: 首页 > >

微机原理第6章-中断技术

发布时间:

第6章

第6章:教学重点

教学重点
8088 CPU的中断系统 内部中断服务程序的编写 中断控制器8259A的作用

第6章:6.1 8088中断系统

8088的中断系统采用向量中断机制 能够处理256个中断 用中断向量号0 ~ 255区别 可屏蔽中断还需要借助专用中断控制器 Intel 8259A实现优先权管理

第6章:6.1.1 8088的中断类型

非屏蔽中断源
NMI

可屏蔽中断源

内部中断
除法错中断 IR0 INTR指令中断 8259A IR1 外 中断 溢出中断 IR2 设 控制器 IR3 INTA 单步中断 中
单步 中断 IR4 外部中断 IR5 非屏蔽中断 IR6 可屏蔽中断 IR7 断 源

CPU 中断逻辑

INT N 指令

INTO 指令

除法 错误

第6章:1. 内部中断

内部中断是由于 8088 内部执行程序出现异 常引起的程序中断 利用内部中断,微处理器为用户提供了发 现、调试并解决程序执行时异常情况的有 效途径 例如, ROM-BIOS 和 DOS 系统利用内部中 断为程序员提供了各种功能调用

第6章:⑴ 除法错中断

在执行除法指令时,若除数为 0或商超过了 寄存器所能表达的范围,则产生一个向量 号为0的内部中断,称为除法错中断 例如: mov bl,0
idiv bl ;除数BL=0,产生除法错中断 mov ax,200h mov bl,1 div bl ;商=200H,不能用AL表达 ;产生除法错中断

第6章:⑵ 指令中断

在执行中断调用指令INT n时产生的一个向 量号为n(0 ~ 255)的内部中断,称为指令 中断 其中向量号为 3的指令中断比较特别(生成 一个字节的指令代码: 11001100 ),常用 于程序调试,被称为断点中断
例如:DEBUG.EXE调试程序的运行命令G设置 的断点,就是利用INT 3指令实现的

第6章:⑶ 溢出中断

在执行溢出中断指令 INTO时,若溢出标志 OF为 1,则产生一个向量号为 4的内部中断, 被称为溢出中断 例如:
mov ax,2000h add ax, 7000h ;2000H+7000H=9000H,溢出:OF=1 into ;因为OF=1,所以产生溢出中断

第6章:⑷ 单步中断

若单步中断TF为1,则在每条指令执行结束 后产生一个向量号为 1的内部中断,称为单 步中断

例如:DEBUG.EXE调试程序的单步命令T就利 用单步中断实现对程序的单步调试

第6章:2. 外部中断

外部中断是由于 8088 外部提出中断请求引 起的程序中断 利用外部中断,微机系统可以实时响应外 部设备的数据传送请求,能够及时处理外 部意外或紧急事件 外部中断的原因是处理器外部随机产生的, 所以是真正的中断(Interrupt) 内部中断的原因是处理器执行程序出现异 常,所以经常被称为异常(Exception)

第6章:⑴ 非屏蔽中断

通过非屏蔽中断请求信号向微处理器提出 的中断请求,微处理器无法禁止,将在当 前指令执行结束予以响应,这个中断被称 为非屏蔽中断 8088的非屏蔽中断的向量号为 2,非屏蔽中 断请求信号为NMI 非屏蔽中断主要用于处理系统的意外或故 障。例如:
电源调电前的数据保护 存储器读写错误的处理

第6章:⑵ 可屏蔽中断

外部通过可屏蔽中断请求信号向微处理器提出的 中断,微处理器在允许可屏蔽中断的条件下,在 当前指令执行结束予以响应,同时输出可屏蔽中 断响应信号,这个中断就是可屏蔽中断 8088的可屏蔽中断请求和响应信号分别是INTR和 INTA* ;由 IF标志控制可屏蔽中断是否允许响应; 向量号来自外部中断控制器 8088 通常需要配合中断控制器 8259A 共同处理可 屏蔽中断 可屏蔽中断主要用于主机与外设交换数据

第6章:中断标志IF的状态

IF=0:可屏蔽中断不会被响应
关中断、禁止中断、中断屏蔽 系统复位,使IF=0 任何一个中断被响应,使IF=0 执行指令CLI,使IF=0

IF=1:可屏蔽中断会被响应
开中断、允许中断、中断开放 执行指令STI,使IF=1

执行指令IRET恢复原IF状态

明 确 IF 标 志 的 状 态 是 关 键

第6章:6.1.2 8088的中断响应过程

查询中断的顺序, 现行指令 决定了各种中断源的优先权 Y 软件中断 软件中断 高 N 除法错中断
NMI N

Y 指令中断 溢出中断
Y

INTR非屏蔽中断 IF=1 N 可屏蔽中断 N Y TF=1

Y

中断响应周期 读中断向量号

N 下条指令

单步中断



第6章:6.1.2 8088的中断响应过程(续)
标志寄存器入栈 TEMP=TF,IF=TF=0

( 1) ( 2)

CS:IP入栈 ( 3) 8088各种中断源的优先权, 获取中断向量 ( 4) 实际上是指被识别出来的先后 Y 还有NMI 多种中断同时请求时, N Y TEMP=1 最先响应的则可能是 N 执行服务程序 ( 5) 单步中断或 NMI中断 弹出CS:IP 弹出标志寄存器 返回被中断程序

( 6)

第6章:6.1.3 8088的中断向量表

中断向量:中断服务程序的入口地址(首地址) 逻辑地址含有段地址CS和偏移地址IP(32位) 每个中断向量的低字是偏移地址、高字是段地址, 需占用4个字节 8088微处理器从物理地址 000H开始,依次安排各 个中断向量,向量号也从0开始 256个中断占用1KB区域,就形成中断向量表
向量号为N的中断向量的物理地址=N×4

第6章:6.2 内部中断服务程序

编写内部中断服务程序与编写子程序类似
利用过程定义伪指令PROC/ENDP 第1条指令通常为开中断指令STI 最后用中断返回指令IRET 通常采用寄存器传递参数

主程序需要调用中断服务程序
调用前,需要设置中断向量 设置必要的入口参数 利用INT n指令调用中断服务程序 处理出口参数

第6章:例6.1 内部中断服务程序

编写80H号中断服务程序,并调用 功能:具有显示以“ 0” 结尾字符串的功能, 利用显示器功能调用INT 10H实现字符显示 字符串缓冲区首地址为入口参数: DS:DX(段地址:偏移地址)传递参数

第6章:例6.1的数据段

;数据段 intoff dw ? ;用于保存偏移地址 intseg dw ? ;用于保存段基地址 intmsg db ‘A Instruction Interrupt !’, 0dh,0ah,0

回车、换行 以“0”结尾

第6章:例6.1的获取原中断向量

;代码段 mov ax,3580h int 21h mov intoff,bx mov intseg,es

;利用DOS功能35H号 ;获取原80H中断向量 ;保存偏移地址 ;保存段基地址

获取中断向量(DOS功能调用INT 21H) 功能号:AH=35H 入口参数:AL=中断向量号 出口参数:ES:BX=中断向量(段地址:偏移地址)

第6章:例6.1的设置新中断向量

push ds mov dx,offset new80h ;取中断程序偏移地址 mov ax,seg new80h ;取中断程序段地址 mov ds,ax mov ax,2580h int 21h pop ds 设置中断向量(DOS功能调用INT 21H) 功能号:AH=25H 入口参数:AL=中断向量号 DS:DX=中断向量(段地址:偏移地址)

第6章:例6.1的中断调用

;设置入口参数:

DS=段地址(已设置) DX=偏移地址 mov dx,offset intmsg int 80h ;调用80H中断服务程序

A Instruction Interrupt !

程序功能

第6章:例6.1的主程序返回

mov dx,intoff ;恢复原中断向量 mov ax,intseg mov ds,ax ;改变DS mov ax,2580h int 21h ;因紧接着返回DOS mov ax,4c00h ;故无需恢复DS int 21h 设置中断向量(DOS功能调用INT 21H) 功能号:AH=25H 入口参数:AL=中断向量号 DS:DX=中断向量(段地址:偏移地址)

第6章:例6.1的中断服务程序(1)

;80H号内部中断服务程序: ;显示字符串(以“0”结尾) ;入口参数:DS:DX=缓冲器首地址 new80h proc sti push ax push bx push si ;过程定义 ;开中断 ;保护寄存器

第6章:例6.1的中断服务程序(2)

new1:

mov si,dx mov al,[si] cmp al,0 jz new2 mov bx,0 mov ah,0eh int 10h inc si jmp new1

;读取欲一个显示字符 ;为结尾“0”,则结束 ;采用ROM-BIOS功能调用

;准备显示下一个字符

第6章:例6.1的中断服务程序(3)

new2:

new80h

pop si pop bx pop ax iret endp

;恢复寄存器

;中断返回 ;过程(中断服务程序)结束
A Instruction Interrupt !

程序功能

6.3 可编程中断控制器8259A

PIC,Programmable Interrupt Controller 可对8个中断源实现优先级控制 可扩展至对64个中断源实现优先级控制 可编程设置不同工作方式 根据中断源向x86提供不同中断类型码 引脚分配及功能见教材图6.26

6.3.1.8259A的内部结构

8259A的内部结构(见下图)
中断请求寄存器IRR
? 保存从 IR0~IR7来的中断请求信号,某位=1表示对应的 IRi有 中断请求

中断服务寄存器ISR
? 保存所有正在服务的中断源,某位 =1 表示对应的 IRi 中断正在 被服务

中断屏蔽寄存器IMR
? 存放中断屏蔽字,某位=1表示对应的IRi输入被屏蔽

中断优先权判别电路
? 确定是否向CPU发出中断请求,中断响应时确定ISR的哪位应 置位及把相应中断的类型码放到数据总线上

第6章: 6.3.1 8259A的内部结构 INTA 控制逻辑 D7~D0 数据 总线 缓冲器 读 /写 控制 逻辑 级联 缓冲器 比较器 INT 中 断 请 求 寄 存 器

RD WR A0 CS CAS0 CSA1 CAS2 SP/EN

中 断 服 务 寄 存 器

优 先 权 判 别 电 路

IR0

IR7

中断屏蔽寄存器

6.3.2 8259A的工作过程

8259A对中断请求的处理过程如下:
当某IRi有效时,IRR相应位置1 若有效的IRi未被屏蔽,则向CPU发出中断请求 检 测 到 第 1 个 INTA# 信 号 后 , 置 ISRi=1 , IRRi=0 检测到第2个INTA#信号后,把ISRi=1中最高优 先级的中断类型码放到DB上 若工作在 AEOI 方式,在第 2 个 INTA# 结束时, 使 ISRi 复位;否则由 CPU 发出 EOI 命令使 ISRi 复位

6.3.3 8259A的工作方式

8259A的工作方式有如下几类:
中断优先方式与中断嵌套 中断结束处理方式 屏蔽中断源的方式 中断触发方式 级联工作方式

中断优先方式与中断嵌套

中断优先方式
两类优先级控制方式:固定优先级和循环优先级 固定优先级方式
? 所有中断请求IRi的中断优先级固定不变 ? 优先级排列顺序可编程改变 ? 加电后8259A的默认方式,默认优先级顺序从高到 低为IR0~IR7
默认优先级 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 7 6 5 4 3 2 1 0 优先级 优先级可编程改变 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 3 2 1 0 7 6 5 4

最低级

最高级

最高级

最低级

中断优先方式与中断嵌套(续)

循环优先级方式
? 中断源轮流处于最高优先级,即自动中断优先级循 环 ? 初始优先级顺序可用编程改变 ? 某中断请求IRi被处理后,其优先级别自动降为最低, 原来比它低一级的中断上升为最高级
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ISRi 0 7 1 6 0 5 1 4 0 3 0 2 0 1 0 0 ISR内容 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 0 2 1 1 0 0 0 7 0 6 0 5 0 4 0 3

最低级
IR4的服务结束以前

最高级

最高级

最低级

IR4的服务结束以后

中断优先方式与中断嵌套(续)

中断嵌套方式
在中断处理过程中允许被更高优先级的事件所中 断称为中断嵌套。8259A有两种中断嵌套方式: ? 普通全嵌套方式(默认方式)
一中断正被处理时,只有更高优先级的事件可以打 断当前的中断处理过程而被服务。

?

特殊全嵌套方式

一中断正被处理时,允许同级或更高优先级的事件 可以打断当前的中断处理过程而被服务。 注: 特殊全嵌套仅用于多个 8259A级连时的主8259A, 而不能用于从属8259A或单8259A系统。

?

一般全嵌套方式与特殊全嵌套方式的区别
B. 一 般 嵌 套 方 式 :
主8259A
IR0 IR1 IR2

IR4 的中断被服务 时,这些中断将 被封锁。

C. 一般嵌套方式:
从8259A
IR0

从片的INT被主片封 锁,故更高级别的 IR0-IR2 中断也无法 得到响应

IR1
IR2 IR3

A.

去CPU

IR3

假定IR7发生中 断,并获得服务

INT IR4
IR5

INT IR4
IR5
IR6 IR7

IR6
IR7

E.

D. 特殊嵌套方式: IR4 的 中 断 被 服
务时,只封锁 IR5-IR7。

特殊嵌套方式: 因主片不封锁从片的 INT ,故级别高的 IR0IR2 中断可以得到响应。 ( 但 IR3-IR7 仍 被 本 从 片封锁)

中断结束处理方式

当某一IRi中断被服务时,ISR中的相应位 ISRi=1 。当服务结束后,则必须清零该 ISRi位。使ISRi=0是通过向 8259A发出中 断结束命令(EOI命令)实现的。 三种EOI命令
自动EOI(AEOI)——(自动EOI方式) 非指定 EOI ( NSEOI ) —— (正常 EOI 方式) 指定EOI(SEOI)——(特殊EOI方式)

AEOI : 在 第 2 个 INTA# 结 束 时 , 由 8259A 使 ISRi自动复位;
? 因不保留当前正在服务的中断的状态,故AEOI不能 用于中断嵌套方式

SEOI :由 CPU 发出一条 SEOI 命令,该 EOI 命 令中指出了所要复位的ISR的位号。
? 用于特殊屏蔽方式

NSEOI :由 CPU 发出正常 EOI 命令,该 EOI 命 令使ISRi=1的位中优先级最高的那一位复位。
? 用于普通全嵌套方式

中断服务程序

?

特殊全嵌套方式 下的EOI处理
?只有当从PIC的

┇ 向从PIC发EOI命令 读从PIC的ISR 全0? Y 向主PIC发EOI命令 恢复现场 IRET N

中断全部处理完 后,才能向主PIC 发EOI命令

屏蔽中断源的方式

IMR 屏蔽字决定了允许或禁止某位 IRi 所对 应的中断:IMi=1 禁止, IMi=0 允许。 特殊屏蔽方式:
提供了允许较低优先级的中断能够得到响应的 特殊手段。 原理:假定当前正在处理IR6,先进入特殊屏蔽 方式,然后设置 IM6=1。这时,除 IR6外的所有 中断请求均能得到响应。 特殊屏蔽方式中只能用SEOI命令结束中断。

特殊屏蔽例:
。 CLI MOV OUT IN OR OUT STI 。 。 CLI IN AND OUT MOV OUT STI 。 MOV OUT IRET ;IR4中断处理程序 AL,68H 0C0H,AL AL,0C2H AL,10H 0C2H,AL ;OCW3:0 1 1 0 1 0 0 0 ;设置特殊屏蔽方式 ;屏蔽IR4

;IR7请求,响应,返回 ;为设命令字 ;读出屏蔽字 ;清除IMR4 ;OCW3:0 1 0 0 1 0 0 0 ;取消特殊屏蔽 ;继续IR4中断服务 ;OCW2:0 0 1 0 0 0 0 0 (EOI)

AL,0C2H AL,0EFH 0C2H,AL AL,48H 0C0H,AL

AL,20H 0C0,AL

中断触发方式

边沿触发
IRi出现上升沿表示有中断请求

电*触发
IRi出现高电*表示有中断请求

在第1个INTA#结束前,IRi必须保持高电*

级联工作方式

单片8259A可支持8个中断源; 采用多片 8259A级连,可最多支持 64个中断 源。n片8259A可支持7n+1个中断源; 级连时只能有一片 8259A 为主片,其余的均 为从属片; 涉及到的8259A引脚包括:
CAS0-CAS2 SP#/EN# IRi INT

级连电路连接方法

系统总线 AB、DB、CB

INTA A0 CS D0-D7

RD WR INT CAS0 CAS1 CAS2

INTA A0 CS D0-D7 RD WR INT

INTA A0 CS D0-D7 RD WR INT CAS0 CAS1 CAS2

8259A (从片1)

8259A (从片2)

CAS0 CAS1 CAS2

8259A (主片)

SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

VCC

6.3.4 8259A的编程使用

8259A的控制命令分为
初始化命令字ICW
? ICW1~ICW4 ? 向8259A写入ICW的过程称为初始化编程

操作命令字OCW
? OCW1~OCW3 ? 向8259A写入OCW的过程称为操作方式编程

8259A内部寄存器的寻址方法

?

需要CS#、A0、RD#、WR#和D4、D3的 配合 内部寄存器的访问方法如下表:
读写操作 写OCW2 写OCW3 写ICW1 写ICW2,ICW3,ICW4,OCW1(顺序写入) 读出IRR、ISR 读出IMR

?

CS# RD# WR# A0 D4 D3 0 0 0 0 0 1 0 1 0 0 1 x 1 x x 0 0 1 0 1 x x

8259A的初始化顺序

8259 的 初 始 化 流 程如图
注意次序不可颠倒
N 写ICW1
写ICW2
级连?

Y 写ICW3

N

需ICW4?

Y 写ICW4

8259A的控制命令字

初始化8259A必须从ICW1开始
写ICW1意味着重新初始化8259A 写入ICW1后,8259A的状态如下:
? ? ? ? ? 清除ISR和IMR(全0); 将中断优先级设成初始状态:IR0最高,IR7最低; 设定为一般屏蔽方式; 采用非自动中断结束方式; 状态读出逻辑预置为读IRR。

ICW1——初始化字

A0 0

D7 x

D6 x

D5 x

D4 1

D3 LTIM

D2 x

D1 SNGL

D0 IC4

LTIM: 触发方式
=1 高电*触发 =0 上升沿触发

SNGL: 级连控制
=1 单片 =0 级连

IC4: ICW4控制
=1 要写ICW4 =0 不写ICW4(默认ICW4为全0)

ICW2——中断向量码

A0 1

D7 T7

T6

D6 T5

D5 T4

D4 T3

D3 x

D2 x

D1 x

D0

T7~T3: 中断向量码的高5位 T2~T0: 最低3位为中断源的序号IRn
000~111分别对应IR0~IR7 由8259A根据中断源的序号自动填入 例如: 若 ICW2 命令字为 48H ,则 IR0 的中断向量码为 48H,IR7的中断向量码为4FH,等等。

ICW3——级连控制字

A0 1

D7 S7

S6

D6 S5

D5 S4

D4 S3

D3 S2

D2 S1

D1 S0

D0

主片的级联控制字
Si=1 对应IRi线上连接了从片

A0 1

D7 0

0

D6 0

D5 0

D4 0

D3 ID2

D2 ID1

D1 ID0

D0

从片的级联控制字
ID2~ID0 标识码,说明本从片连接到主片的哪 个IR引脚上。 000~111分别对应IR0~IR7。

ICW3——级连控制字(续)

ICW3必须与主从片的连接关系一致: 例如,主片的 IR4 与从片的 INT 线连接,则 主片的ICW3=10H,从片的ICW3=04H。 中断响应时,主片通过级连线 CAS2-CAS0 送出被允许中断的从片标识码,各从片用 自己的ICW3与CAS2-CAS0比较,二者一致 的从片才可发送中断向量码。

ICW4——中断结束方式字

A0 1

D7 0

0

D6 0

D5 D4 SFNM BUF

D3 M/S

D2 AEOI

D1 1

D0

SFNM: 特殊全嵌套
1 特殊全嵌套方式 0 一般全嵌套方式

BUF: 缓冲方式 M/S: 主/从缓冲选择
BUF M/S 1 1 缓冲方式/主PIC 1 0 缓冲方式/从PIC 0 x 非缓冲方式/正常

AEOI: 自动EOI
1 自动EOI方式 0 非自动EOI方式

8259A的操作命令字OCW

OCW用于设置8259的工作状态 在初始化后写入 OCW的写入顺序可任意 写入地址要求:
OCW1必须写入奇地址端口(A0=1) OCW2,OCW3必须写入偶地址端口(A0=0)

OCW1——中断屏蔽字

A0 1

D7 M7

M6

D6 M5

D5 M4

D4 M3

D3 M2

D2 M1

D1 M0

D0

Mi=1 中断请求线IRi被屏蔽(不允许中断) =0 允许该IRi中断

OCW1将写入IMR寄存器。 A0=1时读OCW1可读出设置的IMR内容。

OCW2——中断结束和优先级循环

A0 0

D7 R

SL

D6 EOI

D5 0

D4 0

D3 L2

D2 L1

D1 L0

D0

L2~L0: 优先级编码 R: 优先级自动循环 SL: 指定优先级 EOI: 结束中断命令
R 0 0 1 1 0 1 1 SL EOI 0 1 非指定EOI 命令(NSEOI),全嵌套方式 1 1 指定EOI 命令(SEOI),全嵌套方式,按L2-L0编码复位ISR 0 1 NSEOI 命令,优先级自动循环 0 0 自动EOI,设置优先级自动循环 0 0 自动EOI,取消优先级自动循环(固定优先级) 1 1 SEOI 命令,按L2-L0编码循环优先级(L2-L0设为最低优先级) 1 0 按L2-L0编码循环优先级(L2-L0设为最低优先级)

OCW3——屏蔽方式和读出控制字

A0 0

D7 0

D6 ESMM

D5 SMM

D4 0

D3 1

D2 P

D1 RR

D0 RIS

ESMM: 允许使能特殊屏蔽方式 SMM: 特殊屏蔽方式 ESMM SMM 1 1 特殊屏蔽方式置位 1 0 特殊屏蔽方式复位 0 x 非特殊屏蔽方式 P(Polling): =1 查询方式 =0 非查询方式

RR: 读寄存器 RIS: ISR/IRR选择 RR RIS 1 1 读ISR 1 0 读IRR 0 x 无效

OCW3(续)

查询方式允许 8259A 不工作于中断方式, 而是以查询方式工作。
CPU先写一个D2=1的OCW3,再对同一地址读 入,即可得到如下状态字节: I x x x x R2 R1 R0 I=1表示有中断请求,中断请求号为R2-R0 此查询步骤可反复执行,以响应多个同时发生 的中断。

读IRR/ISR:写入此命令后,随后再对同一 地址读,即可得到IRR或ISR的内容。

8259A编程举例

按以下要求初始化8259A:
接口地址为20H和21H; 中断为上升沿触发;单片8259A;不写ICW4; 与IR0-IR3对应的中断向量码为08H-0BH; IR4-IR7不使用。

根据要求,各初始化参数及工作参数如下:
ICW1 = 00010010 = 12H ICW2 = 08H 中断向量码 OCW1 = 11110000 = 0F0H 中断屏蔽字

8259A编程举例(续)

初始化程序如下:
INIT8259A: MOV MOV OUT MOV MOV OUT MOV OUT DX,20H ;A0=0,写ICW1 AL,12H ;上升沿触发,单片,不写ICW4 DX,AL DX,21H ;A0=1,写ICW2,OCW1 AL,08H ;ICW2 DX,AL AL,0F0H ;OCW1:屏蔽IR4-IR7 DX,AL

6.3.5 PC机中断程序设计
1)主程序 保存原中断向量 设置自己的中断向量 初始化堆栈指针 设置8259A的中断屏蔽字(其他的已由操作系统设置) STI 2)中断服务程序 保存所用到的寄存器内容 中断服务程序主体 恢复进入时保存的寄存器内容 发EOI命令(必要时可提前) STI(必要时可提前) IRET

中断程序举例

PC 机中主 8259A 的 I/O 地址为 20H 和 21H ,中断向 量码为08H; 中断请求从IR6引入,故中断类型号为0EH; 主程序如下:
;保存原来的中断向量 mov ah,35h mov al,0eh int 21h mov save_ip,bx mov save_cs,es ;中断类型码 ;取原中断向量(在es:bx中) ;保存原来的中断向量

;设置自己的中断向量 push ds mov dx,offset my_int mov ax,seg my_int mov ds,ax ;DS:DX的内容为my_int的首地址 mov ah,25h mov al,0eh int 21h ;设置自己的中断向量 pop ds ;初始化堆栈指针 mov sp,my_stack_top ;设置8259A的中断屏蔽字 in al,21h and al,10111111b ;开放IR6中断 out 21h,al sti …… <其他代码放在这里> ……

子程序如下:
my_int proc far pusha … <中断服务程序主体> … popa mov al,20h out 20h,al sti iret endp

;EOI命令,00100000B ;写OCW2

my_int

第6章:教学要求

1.熟悉8088的中断类型、中断响应过程、中断向量表 2.掌握内部中断服务程序的编写 3.了解8259A在IBM PC系列机上的应用情况 *题7(第189 ~ 190页)——6.1 6.2 6.4 6.14 补充*题:
1.8088中断允许标志IF在什么情况是0,如何使其为1? 2. 8088CPU各种中断的优先权顺序是什么? 3. 说明IRET指令的功能。 4. 如何利用DOS功能调用设置中断向量? 5. 如何利用DOS功能调用获取中断向量?
?

作业: *题6.1, 6.2, 6.5, 6.7, 6.11, 6.13, 6.17




友情链接: