⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irqfunc2.asm

📁 访问32位PCI总线IRQ的例程
💻 ASM
字号:
;
; Interrupt vector hook functions for IBM-AT or compatible machine's & needs CPU 386 or later)
;

;use  TASM.EXE V2.01 or later
;
;      TASM /jSMART /jJUMPS /uM520 /jLOCALS /m8 /t
;
.386p
CGROUP	GROUP TEXT, _TEXT

TEXT SEGMENT BYTE PUBLIC 'CODE' USE16

    EXTRN	C hookIRQ_:NEAR
    EXTRN	C freeIRQ_:NEAR
    EXTRN	C maskIRQ_:NEAR

TEXT ENDS

_TEXT SEGMENT BYTE PUBLIC 'CODE' USE16
     ASSUME  CS:CGROUP,DS:NOTHING,ES:NOTHING

;**************************
; Hook IRQ vector
;
; unsigned long _hookIRQ(unsigned int IRQ,unsigned int CallBackRoutine);
;
;       入力    [SP-2].W	IRQ Level (0-15)
;               [SP-6].W	CallBackRoutine's Offset address
;       出力    DX:AX	Original Vector Address
;       破壊    None
;**************************
_hookIRQ PROC C NEAR PUBLIC USES BX, IRQLevel:WORD,CBAddress:WORD

	MOV	AX, IRQLevel
	MOV	BX, CBAddress
	CALL	hookIRQ_
	MOV	DX, BX
	RET

_hookIRQ ENDP

;**************************
; Free IRQ vector for IBM-AT
;
; void _freeIRQ(unsigned int IRQ,unsigned long OriginalVector);
;
;       入力    AX	IRQ Level (0-15)
;               CX      OriginalVector's Offset address
;               DX      OriginalVector's Segment address
;       出力    None
;       破壊    AX
;**************************
_freeIRQ PROC C NEAR PUBLIC USES AX CX DX, IRQLevel:WORD,OrgVectorAddress:DWORD

	MOV	AX, IRQLevel
	MOV	CX, WORD PTR OrgVectorAddress
	MOV	DX, WORD PTR OrgVectorAddress+2
	CALL	freeIRQ_
	RET

_freeIRQ ENDP

;**************************
; Mask/UnMask IRQ
;
;unsigned int _maskIRQ(unsigned int IRQ,unsigned int MaskStatus);
;
;       入力    AX	IRQ Level (0-15)
;		BX	Mask Status
;			0) UnMask
;			1) Mask
;       出力    AX	Previous mask status
;       破壊    None
;**************************
_maskIRQ PROC C NEAR PUBLIC USES BX, IRQLevel:WORD,maskSts:WORD

	MOV	AX, IRQLevel
	MOV	BX, maskSts
	CALL	maskIRQ_
	RET

_maskIRQ ENDP

_TEXT ENDS
     END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -