实验介绍
8259中断实验,要求实现8259的级联。主8259的MIR7接KK1+。从8259的SIR1接KK2+。实现中断嵌套。
本程序特点:可以比较直观的观察出多重中断的嵌套和返回。
实验设计
原程序内容:无限循环输出字符 ‘6’
中断服务程序1内容:循环输出10个字符’7’
中断服务程序2内容:循环输出一个字符’8’
初始化命令字如下图所示,可根据具体情况进行修改:
代码实现
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AX, 0000H
MOV DS, AX
;初始化中断向量表
MOV AX, OFFSET SERVER1
MOV SI, 003CH
MOV [SI], AX
MOV AX, SEG SERVER1
MOV SI, 003EH
MOV [SI], AX
MOV AX, OFFSET SERVER2
MOV SI, 00C4H
MOV [SI], AX
MOV AX, SEG SERVER2
MOV SI, 00C6H
MOV [SI], AX
CLI
;初始化主片8259
MOV AL, 11H ;0001 0001 级联,边沿触发,要ICW4
OUT 20H, AL ;ICW1
MOV AL, 08H ;0000 1000 中断类型号从8开始
OUT 21H, AL ;ICW2
MOV AL, 04H ;0000 0100 IR2从片
OUT 21H, AL ;ICW3
MOV AL, 03H ;0000 0011 非缓冲方式,8086/8088配置
OUT 21H, AL ;ICW4
;初始化从片8259
MOV AL, 11H ;ICW1 0001 0001 级联,边沿触发,要ICW4
OUT 0A0H, AL
MOV AL, 30H ;ICW2 0011 0000 终端类型号从30H开始
OUT 0A1H, AL
MOV AL, 02H ;ICW3 0000 0010 通过IR1引脚连接主片
OUT 0A1H, AL
MOV AL, 03H ;ICW4 0000 0011 非缓冲方式,8086/8088配置
OUT 0A1H, AL
MOV AL, 0FDH
OUT 0A1H,AL ;OCW1 = 1111 1101
STI
WAIT1: MOV DL,'6' ;源程序无限输出字符6
MOV AH, 02H
INT 21H
PUSH CX
MOV CX,0000H
WAITS0:
PUSH AX
POP AX
LOOP WAITS0
JMP WAIT1
SERVER1: STI ;中断服务程序1,输出10个字符7
MOV CX,000AH
PRINT10:
PUSH CX
MOV DL,'7'
MOV AH, 02H
INT 21H
MOV CX, 0000H ;CX=0000H 最大循环数
WAITS1: ;延时程序
PUSH AX
POP AX
LOOP WAITS1
POP CX
LOOP PRINT10
MOV AL, 0A0H
OUT 20H, AL
OUT 0A0H, AL
IRET
SERVER2: STI ;输出一个字符8
MOV DL,'8'
MOV AH, 02H
INT 21H
IRET
CODE ENDS
END START
实验结果
实验结果类似如下所示:
66666666667777787777766666666666686666677777777776666666666666666666666