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

📄 tp2_interrupt.asm

📁 小型操作系统,以VC为开发环境,需要boachs调试
💻 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 + -