📄 intirq0.asm
字号:
INTA00 EQU 20H
INTA01 EQU 21H
DATA SEGMENT
MESS DB 'THIS IS A 8259A INTERRUPT!',0AH,0DH,'$'
FLAG DB 0
INTMASK DB ?
CSREG DW ?
IPREG DW ?
DATA ENDS
STACK SEGMENT STACK 'STACK'
DB 50 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: CLI
MOV AX,DATA
MOV DS,AX
MOV AX,3508H
INT 21H
MOV AX,ES
MOV CSREG,AX
MOV IPREG,BX
PUSH DS
MOV AX,CS
MOV DS,AX
MOV DX,OFFSET INT_PROC
MOV AX,2508H
INT 21H
POP DS
MOV DX,INTA01
IN AL,DX
MOV INTMASK,AL
AND AL,0FEH
OUT DX,AL
MOV BX,10
STI
LL: MOV AL,FLAG
CMP AL,01H
JNZ LL
CLI
MOV AL,INTMASK
MOV DX,INTA01
OUT DX,AL
MOV DX,IPREG
MOV AX,CSREG
MOV DS,AX
MOV AX,2508H
INT 21H
STI
MOV AH,1
INT 21H
MOV AX,4C00H
INT 21H
INT_PROC:PUSH DS
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,09
INT 21H
MOV DX,INTA00
MOV AL,20H
OUT DX,AL
DEC BX
JNZ NEXT
MOV AL,01
MOV FLAG,AL
MOV DX,INTA01
IN AL,DX
OR AL,04H
OUT DX,AL
NEXT: POP DS
IRET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -