.set IRQ_BASE, 0x20 .section .text .extern handle_interrput .global irqign .macro gen_irq_handler num .global irqhdl\num\() irqhdl\num\(): movb $\num + IRQ_BASE, (intrptno) jmp _bot .endm gen_irq_handler 0x00 gen_irq_handler 0x01 _bot: /* store current data */ push %ebp push %edi push %esi push %edx push %ecx push %ebx push %eax /* call interrupt handler */ push %esp push (intrptno) call kernel_handle_interrupt movl %eax, %esp /* restore previous data */ pop %eax pop %ebx pop %ecx pop %edx pop %esi pop %edi pop %ebp irqign: /* continue */ iret .data intrptno: .byte 0