global int_syscall_handler [extern example_syscall] [extern example_syscall_2] [extern syscall_write] [extern syscall_read] [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 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 sti done_blocking: pop ebx pop ecx pop edx mov ebx,eax 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_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