global int_syscall_handler [extern example_syscall] [extern example_syscall_2] [extern syscall_write] [extern syscall_read] [extern syscall_readdir] [bits 32] int_syscall_handler: cli push ebx push ecx push edx cmp eax, 10 je call_example_syscall cmp eax, 20 je call_example_syscall_2 cmp eax, 61 je call_write cmp eax, 62 je call_read cmp eax, 63 je call_readdir done: mov ebx,eax mov al, 0x20 ;Port number AND command number to Acknowledge IRQ out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts mov eax,ebx nop done_blocking: pop ebx pop ecx pop edx mov ebx,eax sti iret ;Interrupt-Return call_example_syscall: call example_syscall jmp done call_example_syscall_2: call example_syscall_2 jmp done call_write: call syscall_write jmp done call_readdir: call syscall_readdir jmp done call_read: mov al, 0x20 ;Port number AND command number to Acknowledge IRQ out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts sti call syscall_read jmp done_blocking