%macro _PrologueDeSauvegarde_ 0 pushad ;Sauvegarde des registres generaux push ds push es push fs push gs push ebx mov bx,0x10 mov ds,bx pop ebx %endmacro %macro _EpilogueDeSauvegarde_ 0 pop gs pop fs pop es pop ds popad %endmacro extern _isrIntClavier extern _isrPageFault extern _isrIntAppelSysteme extern _isrGP segment .text global _traiteInterruptionHardwareParDefautCtrlM global _traiteInterruptionHardwareParDefautCtrlE global _traiteInterruptionClavier global _traiteInterruptionParDefaut global _traitePageFault global _traiteAppelSysteme global _traiteGP ;-------------HW---------------- ;IRQ1 -> controleur maitre _traiteInterruptionClavier: _PrologueDeSauvegarde_ call _isrIntClavier _EpilogueDeSauvegarde_ jmp _traiteInterruptionHardwareParDefautCtrlM _traiteInterruptionHardwareParDefautCtrlM: push eax mov al, 0x20 out 0x20, al pop eax iret _traiteInterruptionHardwareParDefautCtrlE: push eax mov al, 0x20 out 0xA0, al pop eax iret ;---------------Exception / int logiciel---------------- _traiteAppelSysteme _PrologueDeSauvegarde_ call _isrIntAppelSysteme jmp _traiteInterruptionParDefaut _traitePageFault: _PrologueDeSauvegarde_ call _isrPageFault _EpilogueDeSauvegarde_ add esp, 4 iret _traiteGP: _PrologueDeSauvegarde_ call _isrGP _EpilogueDeSauvegarde_ add esp, 4 iret _traiteInterruptionParDefaut: _EpilogueDeSauvegarde_ ;Retour d'interruption iret