8088系统,单片8259,普通全嵌套方式,非自动结束中断,非缓冲方式,边沿触发中断,端口地址为80H,81H,中断从IR1引入,IR1对应的中断类型号是39H,IR1中断服务子程序入口地址是INTP,请编写8259初始化程序段和设置中断向量的程序段。
时间: 2024-12-14 18:28:20 浏览: 54
在8088系统中,为了初始化8259A并设置中断向量,你需要执行以下几个步骤。这里假设你使用的是早期的基本指令集,因为更现代的汇编语言可能会有所不同。
**8259A 初始化程序段:**
```assembly
; 初始化8259A(单片8259)
; 片选信号CS = 0x01 (IO端口80H)
; 中断优先级寄存器IPR = 0x00 (所有中断都同优先级)
; 方式控制字DIPW = 0x07 (全嵌套、非自动结束、非缓冲、边沿触发)
ORG 0x00 ; 开始地址
MOV AL, 0x01 ; 启动基本模式,置低DIPW的第1位
OUT 0x81, AL ; 写入方式控制寄存器DIP
MOV AL, 0x00 ; 所有中断同优先级
OUT 0x80, AL ; 写入中断优先级寄存器IPR
MOV AL, 0x07 ; 设置DIPW为全嵌套等选项
OUT 0x81, AL ; 再次写入DIP
```
**设置中断向量程序段:**
```assembly
; 设置中断向量表,中断从IR1(中断类型号39H)开始
; 中断服务子程序入口地址INTP (假设为0x1000)
; 中断向量表通常位于内存地址0x1000-0x10FF
; IR1中断类型号
MOV AX, 0x3900 ; 将中断类型号39H和固定偏移(0x00)组合成16进制地址
MOV [0x1000], AX ; 存储在中断向量表起始位置
; IR1中断服务程序地址
ADD AX, INTP ; 加上INTP地址(假设INTP=0x1000)
MOV [0x1002], AX ; 存储服务程序地址
```
注意:这个示例仅给出了基本的初始化和向量设置,实际应用中还需要考虑中断向量表的布局以及可能的中断控制器扩展情况。
阅读全文