INT 21H POP DS ; 中断服务程序
ATOBCD: MOV CX, NUMB
LEA SI, ASCMM
LEA DI, BCDMM CLD
ALOOP: LODSB
AND AL, 0FH ; ASCII码到BCD码的转换
STOSB LOOP ALOOP IRET
10.编写出只有一片8259A的8088系统中8259A的初始化程序,8259A的地址为02C0H和02C1H,要求:
(1) 中断请求输入采用电平触发; (2) IRQ0请求的中断类型是16; (3) 采用缓冲器方式; (4) 采用普通的EOI命令。 ; ICW1初始化
MOV DX, 02C0H
MOV AL, 0001 1011B ; 1BH OUT DX, AL ; ICW2初始化
INC DX
MOV AL, 0001 0000B ; 10H OUT DX, AL ; ICW4初始化
31
MOV AL, 0000 1001B; (09H)或0000 1101B(0DH) OUT DX, AL
11.编写一将8259A中的IRR、ISR和IMR的内容传送至存储器中REG-ARR为首地址的数组中的程序段,假设CPU为8088,8259A的偶地址为050H,奇地址为051H。
; 读IRR的内容
MOV AL, 0AH ; 写入OCW3,读IRR OUT 050H, AL
NOP ; 延时,等待8259A操作结束 IN AL, 050H ; 读出IRR
MOV REG-ADDR, AL ; IRR送到存储器 ; 读ISR的内容
MOV AL, 0BH ; 写入OCW3,读ISR OUT 050H, AL
NOP ; 延时,等待8259A操作结束 IN AL, 050H ; 读出ISR
MOV REG-ADDR+1, AL ; ISR送到存储器 ; 读IMR的内容
MOV DX, 051H IN AL, DX
MOV REG-ADDR+2, AL ; IMR送到存储器
12.某系统中有5个中断源,它们从中断控制器8259A的IRQ4~IRQ0中以脉冲方式引入系统,它们的中断类型码分别为4BH、4CH、4DH、4EH和4FH,中断入口分别为3500H、4080H、4505H、5540H和6000H。允许它们以完全嵌套方式工作,请编写相应的初始化程序,CPU响应一级中断时,能正确地进入各自的中断服务程序入口。
13.BM PC/AT机中两片8259A的硬件连接图如图7.29所示,请指出8259A主片及从片,并如何从硬件连接中的哪些部分来区分主片和从片?
32
1#:主片,2#:从片
2#芯片的INT引脚接的是1#芯片的IRQ2引脚。
14.上题中,两片8259A的初始化程序如下:
;主8259A初始化
INTA00 EQU 020H INTA01 EQU 021H
;8259A主片端口0 ;8259A主片端口1
┇
; 边沿触发,多片8259级联,需要ICW4 MOV AL, 11H OUT INTA00, AL ; 中断类型码的基值为8 MOV
AL,
8
OUT INTA01, AL ; IRQ2接从8259A MOV AL, 04H
;ICW1
;ICW2
;ICW3
OUT INTA01, AL ; 全嵌套方式,非缓冲方式,非自动结束,8086/8088模式 MOV
AL,
01H
;ICW4
OUT INTA01, AL ;从8259A初始化 INTB00 EQU INTB01 EQU
020H 021H
;8259A从片端口0 ;8259A从片端口1
┇ ; 边沿触发,多片8259级联,需要ICW4 MOV AL, 11H ;ICW1 OUT INTB00, AL ; 中断类型码的基值为70H MOV AL, 70H
;ICW2
OUT INTB01, AL
; 从属8259接主控的IRQ2
33
MOV AL, 02H ;ICW3
OUT INTB01, AL
; 全嵌套方式,非缓冲方式,非自动结束,8086/8088模式 MOV AL, 01H ;ICW4
OUT INTB01, AL
请说明两片8259A的4个初始化命令字的意义。
15.某系统中设置3片8259A级联使用,一片为主8259A;两片为从8259A,它们分别接入主8259A的IRQ2和IRQ4端。若已知当前主8259A和从8259A的IRQ3上各接有一个中断源,它们的中断类型码分别为A0H、B0H、C0H,已知它们的中断入口均在同一段中,其段基址为2050H,偏移地址分别为11A0H、22B0H和33C0H,所有中断均采用电平触发方式、完全嵌套、普通EOI结束。
(1) 画出它们的硬件连接图;
(2) 编写全部初始化程序。
解:(中断类型码认为是三片8259的中断类型基码) (1)
(2)
; 利用DOS功能调用设置中断向量 PUSH DS ; A3H设置 MOV MOV MOV MOV
AX,2050H DS,AX DX,11A0H AX,25A3H
34
INT 21H ; B3H设置 MOV MOV
DX,22B0H AX,25B3H
INT 21H ; C3H设置 MOV MOV INT
DX,33C0H AX,25C3H 21H
POP DS
; 8259A初始化,先定义各8259端口地址,依次为主控、从1#、从2# INTA0 EQU 020H INTA1 EQU 021H INTB0 EQU 0A0H INTB1 EQU 0A1H INTC0 EQU 0B0H INTC1 EQU 0B1H ; 主8259初始化 MOV MOV OUT MOV OUT MOV OUT MOV
DX, INTA0
AL, 0001 1001B ; ICW1:电平触发,多片8259级联,需要ICW4 DX, AL
AL, 1010 0000B ; ICW2:中断类型码基值为0A0H DX, AL
AL, 0001 0100B ; ICW3:IRQ4、IRQ2接从属8259
DX, AL
AL, 0001 0001B ; ICW4:完全嵌套、非缓冲方式、普通EOI结束、8086/8088模式
MOV DX, INTA1
OUT DX, AL ; 从1#初始化 MOV MOV OUT MOV OUT MOV OUT MOV
DX, INTB0
AL, 0001 1001B ; ICW1:电平触发,多片8259级联,需要ICW4 DX, AL
AL, 1011 0000B ; ICW2:中断类型码基值为0B0H DX, AL
AL, 0000 0010B ; ICW3:从属8259接主控的IRQ2
DX, AL
AL, 0001 0001B ; ICW4:完全嵌套、非缓冲方式、普通EOI结束、8086/8088模式
MOV DX, INTB1
OUT DX, AL ; 从2#初始化 MOV MOV OUT MOV
DX, INTC0
AL, 0001 1001B ; ICW1:电平触发,多片8259级联,需要ICW4 DX, AL
AL, 1100 0000B ; ICW2:中断类型码基值为0C0H
35
MOV DX, INTC1