.file "irq_pit.S" .text .extern switchKthread .globl pit_handler .type pit_handler, @function pit_handler: // already got eflags, cs and eip on stack thanks to CPU pushl $0 // err_code esp+12+8*4=44 pushal // (general reg) esp+12 subl $2, %esp // (alignment) esp+10 pushw %ss // esp+8 pushw %ds // esp+6 pushw %es // esp+4 pushw %fs // esp+2 pushw %gs // esp /* Send EOI to PIC */ movb $0x20, %al outb %al, $0x20 pushl %esp call pitIrqHandler movl %eax,%esp /* Restore the CPU context */ popw %gs popw %fs popw %es popw %ds popw %ss addl $2,%esp popal addl $4, %esp /* Ignore "error code" */ /* This restores the eflags, the cs and the eip registers */ iret /* equivalent to: popfl ; ret */