📄 tp2_interrupt.asm
字号:
;/***************************************************************************
;** File name : tp2_interrupt.asm
;** Author : x.cheng
;** Create date :
;**
;** Comment:
;** hardware interrupt server routine(low-level)
;** for int 0x20-2F
;**
;** Revisions:
;** $Log: tp2_interrupt.asm,v $
;** Revision 1.1 2005/08/04 08:32:12 x.cheng
;** add into repositories
;**
;**
;***************************************************************************/
[bits 32]
SECTION .text
%include "..\inc\def_int_exc.inc" ; //! Include common assembler header.
; //! Common interrupt procedure.
; //! Every INTs must call this procedure.
extern _DefaultInterruptHandler
align 4
COMMON_ISR:
cld
; // Saving segment registers; get rid of
; // %gs and %fs registers because the kernel
; // does not use them.
; // For the user tasks registers %fs, %gs are
; // correctly stored into their TSS, so we
; // have no trouble during a task switch.
push ds
push es
; // Saving general purpose registers.
push eax
push ecx
push edx
push ebx
push ebp
push esi
push edi
; // Update segment registers with the kernel
; // data segment.
mov eax, KERNEL_DATA
mov ds, ax
mov es, ax
; // Call the default handler;
; // void DefaultInterruptHandler(ts_IrqContext *pstConext);
push esp
call _DefaultInterruptHandler
Return_From_Interrupt:
pop esp
; // Restore general purpose registers.
pop edi
pop esi
pop ebp
pop ebx
pop edx
pop ecx
pop eax
; // Restore segment registers.
pop es
pop ds
; // Skip the IRQ number.
add esp, 4
; // Return from interrupt; restores %eip, %cs and
; // eflags registers for 0-privileged tasks;
; // for other tasks also %esp and %ss registers
; // are restored.
iret
; // --- Interrupt Service Routines Declaration ------------------------//
INTERRUPT_ENTRY irq_Timer, 0x20 ;//timer interrupt, in io.h
INTERRUPT_ENTRY irq_Keyb, 0x21 ;//keyb interrupt,
; INTERRUPT_ENTRY irq_PicSlave, 0x22 ;//PIC slave,
INTERRUPT_ENTRY irq_Com2, 0x23 ;//com2, or reserved,
INTERRUPT_ENTRY irq_Com1, 0x24 ;//com1,
INTERRUPT_ENTRY irq_Lpt2, 0x25 ;//lpt2,
INTERRUPT_ENTRY irq_Floppy, 0x26 ;//floppy disk,
INTERRUPT_ENTRY irq_Lpt1, 0x27 ;//lpt1,
INTERRUPT_ENTRY irq_Rtc, 0x28 ;//cmos real time clock,
INTERRUPT_ENTRY irq_PicMaster, 0x29 ;//PIC master,
INTERRUPT_ENTRY irq_Reserved1, 0x2a ;//reserved,
INTERRUPT_ENTRY irq_Reserved2, 0x2b ;//reserved,
INTERRUPT_ENTRY irq_Ps2, 0x2c ;//PS2 prot,
INTERRUPT_ENTRY irq_80x87, 0x2d ;//Numeric Coprocessor,
INTERRUPT_ENTRY irq_IdeChn0, 0x2e ;//IDE Channel 0 (Master),
INTERRUPT_ENTRY irq_IdeChn1, 0x2f ;//IDE Channel 1 (Slave),
INTERRUPT_ENTRY irq_Unhandled, 0xFF ; //!< Unhandled interrupt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -