某一 8086CPU 系统中,采用一片 8259A 进行中断管理。设定 8259A 工作在普通全嵌 套方式,发送 EOI 命令结束中断,采用边沿触发方式请求中断,IR0 对应的中断向量号为 90H。另外,8259A 在系统中的 I/O 地址是 FFDCH(A0=0)和 FFDEH(A0=1)。请编写 8259A 的初始化程序段。
时间: 2024-02-12 09:07:16 浏览: 28
以下是一份基于汇编语言的 8259A 初始化程序段,假设 I/O 端口地址为 FFDCH 和 FFDEH:
```
; 初始化 8259A,采用普通全嵌套方式,边沿触发方式请求中断
INIT_8259A PROC NEAR
; 初始化主片
mov al, 00110001b ; ICW1: 边沿触发方式,级联从片,需要 ICW4
out FFDCH, al ; 将 8259A 主片的 ICW1 控制字写入端口 FFDCH
mov al, 00000010b ; ICW2: 中断向量起始地址为 90H
out FFDDH, al ; 将 8259A 主片的 ICW2 控制字写入端口 FFDDH
mov al, 00000100b ; ICW3: 从片连接在 IR2 引脚上
out FFDDH, al ; 将 8259A 主片的 ICW3 控制字写入端口 FFDDH
mov al, 00000001b ; ICW4: 8086 模式,非缓冲区方式
out FFDDH, al ; 将 8259A 主片的 ICW4 控制字写入端口 FFDDH
; 初始化从片
mov al, 00110001b ; ICW1: 边沿触发方式,级联从片,需要 ICW4
out FFDEH, al ; 将 8259A 从片的 ICW1 控制字写入端口 FFDEH
mov al, 00001000b ; ICW2: 中断向量起始地址为 90H + 8
out FFDFH, al ; 将 8259A 从片的 ICW2 控制字写入端口 FFDFH
mov al, 00000010b ; ICW3: 从片连接在主片的 IR2 引脚上
out FFDFH, al ; 将 8259A 从片的 ICW3 控制字写入端口 FFDFH
mov al, 00000001b ; ICW4: 8086 模式,非缓冲区方式
out FFDFH, al ; 将 8259A 从片的 ICW4 控制字写入端口 FFDFH
; 初始化 IMR,允许所有中断请求
mov al, 11111111b ; 0~7 中断请求全部允许
out FFDCH, al ; 将 IMR 控制字写入端口 FFDCH
mov al, 11111111b ; 8~15 中断请求全部允许
out FFDEH, al ; 将 IMR 控制字写入端口 FFDEH
ret
INIT_8259A ENDP
```
上述程序将主片和从片都初始化为边沿触发方式,使用中断向量号为 90H,并且采用普通全嵌套方式。在初始化过程中,IMR 控制字设置为允许所有中断请求。