windows-nt/Source/XPSP1/NT/base/ntos/ke/i386/int.asm
2020-09-26 16:20:57 +08:00

94 lines
1.8 KiB
NASM

title "Trap Processing"
;++
;
; Copyright (c) 1989 Microsoft Corporation
;
; Module Name:
;
; int.asm
;
; Abstract:
;
; This module implements the code necessary to field and process i386
; interrupt.
;
; Author:
;
; Shie-Lin Tzong (shielint) 8-Jan-1990
;
; Environment:
;
; Kernel mode only.
;
; Revision History:
;
;--
.386p
.xlist
include ks386.inc
include i386\kimacro.inc
include callconv.inc
.list
;
; Interrupt flag bit maks for EFLAGS
;
EFLAGS_IF equ 200H
EFLAGS_SHIFT equ 9
_TEXT SEGMENT DWORD PUBLIC 'CODE'
ASSUME DS:FLAT, ES:FLAT, SS:FLAT, FS:NOTHING, GS:NOTHING
; NOTE This routine is never actually called on standard x86 hardware,
; because passive level doesn't actually exist. It's here to
; fill out the portable skeleton.
;
; The following code is called when a passive release occurs and there is
; no interrupt to process.
;
cPublicProc _KiPassiveRelease ,0
stdRET _KiPassiveRelease ; cReturn
stdENDP _KiPassiveRelease
page ,132
subttl "Disable Processor Interrupts"
;++
;
; BOOLEAN
; KeDisableInterrupts(
; VOID
; )
;
; Routine Description:
;
; This routine disables interrupts at the processor level. It does not
; edit the PICS or adjust IRQL, it is for use in the debugger only.
;
; Arguments:
;
; None
;
; Return Value:
;
; (eax) = !0 if interrupts were on, 0 if they were off
;
;--
cPublicProc _KeDisableInterrupts ,0
cPublicFpo 0, 0
pushfd
pop eax
and eax,EFLAGS_IF ; (eax) = the interrupt bit
shr eax,EFLAGS_SHIFT ; low bit of (eax) == interrupt bit
cli
stdRET _KeDisableInterrupts
stdENDP _KeDisableInterrupts
_TEXT ends
end