📄 82592.asm
字号:
main0 equ 20h
main1 equ 21h
sub0 equ 0a0h
sub1 equ 0a1h
DATA SEGMENT
MESS1 DB 'THIS IS A 8259 INTR',0Ah,0Dh,'$'
MESS2 DB 'ENTER ANY KEY TO EXIT TO DOS',0Ah,0Dh,'$'
YANMA1 DB ?
YANMA2 DB ?
DATA ENDS
;STACKS SEGMENT
;sta DW 100 DUP(?)
;STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA;,SS:STACKS
START:
MOV AX,DATA
MOV DS,AX
; MOV AX,STACKS
; MOV SS,AX
CLI;关中断
MOV AH,35H
MOV AL,72H ;取72H号中断向量送 ES:BX
INT 21H
PUSH ES ;保存原中断向量
PUSH BX
PUSH Ds
MOV DX,SEG INTR_proc
MOV DS,DX
MOV DX,OFFSET INTR_proc ;设置新的中断向量
MOV AH,25H
MOV AL,72H
INT 21H
POP DS
MOV DX, main1 ;主片允许中断
IN AL, DX
MOV YANMA1,AL
AND AL, 11111011B
OUT DX, AL
MOV DX,sub1
IN AL, DX
MOV YANMA2,AL ;从片允许中断
AND AL, 11111011B
OUT DX, AL
MOV DX,OFFSET MESS2;显示提示信息
MOV AH,09H
INT 21H
MOV DX, 0D400H+68H ;9054的I/O起始地址及中断使能寄存器的偏移地址
IN AX, DX
OR AX,0900H ;设置中断允许
OUT DX, AX
MOV BX,0ah;设置中断次数为10
STI;开中断
LL: CMP BX,0
JE EXIT
MOV AH, 01H;判断有无键按下
INT 16H
JNZ EXIT
JMP LL
;;WW为可选
;;WW:
; ; JMP WW ;等中断
; ; JMP LL
exit1:mov ax,4c00h
int 21h
EXIT: MOV DX, 0D400H+68H ;9054的I/O起始地址及中断使能寄存器的偏移地址
IN AX, DX
OR AX,0F7FFH ;中断禁止
OUT DX, AX
MOV DX, main1 ;恢复掩码
MOV AL,YANMA1
OUT DX, AL
MOV DX,sub1
MOV AL,YANMA2
OUT DX, AL
POP DX;?
POP DS ;恢复原中断向量
MOV AH,25H
MOV AL,72H
INT 21H
MOV AH,4CH
INT 21H
INTR_proc proc far
push ax
; push dx
CLI
DEC BX
MOV DX,OFFSET MESS1
MOV AH,09H
INT 21H
MOV DX,sub0;发中断结束命令
MOV AL,20H
OUT DX,AL
mov dx,main0
out dx,al
; pop dx
pop ax
STI
IRET
intr_proc endp
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -