📄 新建 文本文档.txt
字号:
源程序:
;先执行PCI_BIOS.EXE,获得PCI板卡申请的第一个I/O空间的首地址及
;中断号,修改下面CPU访问PCI控制寄存器的端口地址。
;由中断号确定相应中断向量及OCW1、OCW2命令字。
M8254COUNT0 EQU 9840H ;修改端口地址
M8254COUNT1 EQU 9841H
M8254COUNT2 EQU 9842H
M8254MODE EQU 9843H
INTBYTE0 EQU 9038H
INTBYTE1 EQU 9039H
INTBYTE2 EQU 903AH
INTBYTE3 EQU 903BH
IMBBYTE3 EQU 901FH
DATA SEGMENT
STRING DB '5 INTERRUPTS',0DH,0AH
LENSTR EQU $-STRING
CBAK DW ?
IBAK DW ?
MBAK DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CLI
MOV AX,DATA
MOV DS,AX
MOV DX,INTBYTE0
MOV AL,00H
OUT DX,AL
MOV DX,INTBYTE1
MOV AL,1FH
OUT DX,AL
MOV DX,INTBYTE2
MOV AL,3FH
OUT DX,AL
MOV DX,INTBYTE3
MOV AL,00H
OUT DX,AL
MOV AL,73H ;保存系统中断矢量
MOV AH,35H
INT 21H
PUSH ES
PUSH BX
PUSH DS
MOV AX,SEG MINT ;设置中断矢量
MOV DS,AX
MOV DX,OFFSET MINT
MOV AL,73H
MOV AH,25H
INT 21H
POP DS
IN AL,0A1H
MOV MBAK,AL
AND AL,0F7H ;打开中断屏蔽位,根据中断号修改
OUT 0A1H,AL
STI
MOV DX,M8254MODE ;CLK=KK1
MOV AL,17H
OUT DX,AL
MOV DX,M8254COUNT0
MOV AL,5
OUT DX,AL
L1: NOP
CALL BREAK
JMP L1
MINT: PUSH DS
PUSH AX
PUSH DX
;清PCI板中断标志
MOV DX,IMBBYTE3
IN AL,DX
MOV DX,INTBYTE2
MOV AL,3FH
OUT DX,AL
;清8259中断标志
MOV AL,62H ;根据中断号修改
OUT 20H,AL
MOV AL,63H
OUT 0A0H,AL
MOV AX,DATA
MOV DS,AX
CALL SSTRING
POP DX
POP AX
POP DS
IRET
BREAK PROC NEAR
PUSH DS
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
POP DS
CLI
MOV AL,MBAK
OUT 0A1H,AL
POP DX ;恢复系统中断矢量
POP DS
MOV AL,73H
MOV AH,25H
INT 21H
MOV DX,INTBYTE1
MOV AL,00H
OUT DX,AL
STI
MOV AX,4C00H
INT 21H
RETURN:POP DS
RET
BREAK ENDP
SSTRING PROC NEAR ;显示字符串
MOV SI,OFFSET STRING
MOV CX,LENSTR
L3: MOV AL,[SI]
MOV AH,0EH
INT 10H
INC SI
LOOP L3
RET
SSTRING ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -