--- /dev/null
+.macro isr_template vector, no_error_code=1
+ .global _asm_isr\vector
+ .type _asm_isr\vector, @function
+ _asm_isr\vector:
+ .if \no_error_code
+ pushl $0x0
+ .endif
+ pushl $\vector
+ jmp interrupt_wrapper
+.endm
+
+.section .text
+ isr_template 0
+
+ interrupt_wrapper:
+
+ movl %esp, %eax
+ andl $0xfffffff0, %esp
+ subl $16, %esp
+ movl %eax, (%esp)
+
+ call interrupt_handler
+ pop %eax
+ movl %eax, %esp
+ addl $8, %esp
+
+ iret
\ No newline at end of file