A update
This commit is contained in:
40
idt.asm
Normal file
40
idt.asm
Normal file
@ -0,0 +1,40 @@
|
||||
[bits 32]
|
||||
global idt_load
|
||||
global common_isr_stub
|
||||
|
||||
extern isr_handler
|
||||
extern _push_regs
|
||||
extern _pop_regs
|
||||
|
||||
idt_load:
|
||||
mov eax, [esp + 4]
|
||||
lidt [eax]
|
||||
ret
|
||||
|
||||
common_isr_stub:
|
||||
call _push_regs ; Push all general-purpose registers
|
||||
push ds
|
||||
push es
|
||||
push fs
|
||||
push gs
|
||||
|
||||
mov ax, 0x10 ; Load kernel data segment
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
|
||||
push esp ; Pass pointer to the register state
|
||||
call isr_handler ; Call your C ISR handler
|
||||
|
||||
add esp, 4 ; Clean up stack from push esp
|
||||
pop gs
|
||||
pop fs
|
||||
pop es
|
||||
pop ds
|
||||
|
||||
call _pop_regs ; restore all general-purpose registers
|
||||
|
||||
add esp, 8 ; Remove int_no and err_code
|
||||
sti
|
||||
iret
|
Reference in New Issue
Block a user