?? 新建 文本文檔.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 + -