%macro IRQ 2

global irq%1
irq%1:
    cli
    push byte 0     ; push a dummy error code
    push byte %2    ; push the IRQ number
    jmp  irq_common_stub

%endmacro

extern irq_handler

irq_common_stub:

pusha           ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax
mov ax, ds      ; Lower 16-bits of eax = ds.
push eax        ; save the data segment descriptor
mov ax, 0x10    ; load the kernel data segment descriptor
mov edx, eax
call irq_handler

%assign i 0 %rep 8 ISR_NOERRCODE i %assign i i+1 %endrep

ISR_NOERRCODE 9