HEU微机原理与接口(五):8259A中断程序初始化与设计

文章详细介绍了8259A中断控制器的初始化过程,包括写入控制数以设定工作模式,以及如何建立中断向量表。中断向量包含中断服务程序的入口地址,中断初始化涉及ICW1至ICW4的设置。此外,文中还展示了中断服务程序的格式,包括中断结束命令的发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8259A中断程序初始化与设计

1.基本概念

(1) 中断向量
中断向量是一个4x1字节的单元,低字节用来存储中断程序的入口地址中的偏移地址,高字节存储另一半的段地址
(2) 中断向量表
在内存中,我们定义0000H段的中存储了256种中断程序(方法0~255)的入口地址,其大小为256x4字节
(3)中断向量号/中断类型号
由于中断向量表被分成了256份的"4个单元"(中断向量),因此中断向量号N可以代表要查找的第N个中断向量,其在中断向量表中的偏移地址可以用4xN计算得到

2.初始化:写入控制数

对于8259A,我们需要写入控制数来告诉芯片我们需要的工作模式
以端口地址为60H~61H为例
ICW1:查表.典型值为13H 写入端口偶地址
ICW2:写入8259的中断矢量号 写入端口奇地址
ICW3:一般不写
ICW4:查表.典型值01H 写入端口奇地址
OCW1:表示允许发生的中断地址i.把允许发生中断的Di位写0,其余写1.如允许IR5发生中断,写奇地址OCW1=1101 1111B=0DFH.

由于OUT/IN指令规定只能使用AX传输数据,因此写入每个控制字需要两条指令

以HEU2019年程序题为例:
已知8259端口地址为60H-61H,8259的中断矢量号从70H开始,允许发生的中断地址为IR4

8259部分代码如下:

CODE SEGMENT
    ;8259初始化
    ASSUME CS:CODE
    MOV AL,13H
    OUT 60H,AL;ICW1
    MOV AL,70H
    OUT 61H,AL;ICW2
    MOV AL,01H
    OUT 61H,AL;ICW4
    MOV AL,0EFH
    OUT 61H,AL;OCW1=11101111B=0EFH
    STI

3.建立中断向量表

原理:

  1. 获取中断服务程序入口地址的偏移地址存入低位
  2. 获取中断服务程序入口地址的段地址存入高位

已知中断矢量号起始为70H,允许的中断地址为IR5

PUSH DS             ;配合POP指令保护DS
MOV AX.0
MOV DS,AX           ;DS写0,进入0000H段
MOV AX,OFFSET MIR5  ;获取中断服务程序偏移地址
MOV SI,01D4H        ;计算(70H+5H)x4=01D4H
MOV [SI],AX         ;写入低位偏移地址
MOV AX,CS           ;由于MIR5在代码段,所以使用CS作为段寄存器
MOV [SI+2],AX       ;写入高位段地址
POP DS              ;DS复原

4.中断服务程序格式和中断结束

在这里插入图片描述

EOI=1时,中断自动结束

MIR5:   MAIN        ;这里执行中断程序的主任务
        ...
OUTT:   MOV AL,20H  ;发送中断结束命令
        OUT 60H,AL  ;OCW2写入EOI
        IRET        ;中断返回
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值