What happens in an interrupt service routine?

前端 未结 4 740
庸人自扰
庸人自扰 2021-01-31 10:17

Can someone please explain to me what happens inside an interrupt service routine (although it depends upon specific routine, a general explanation is enough)? This always used

4条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-31 10:51

    Minimal 16-bit example

    The best way to understand is to make some minimal examples yourself.

    First learn how to create a minimal bootloader OS and run it on QEMU and real hardware as I've explained here: https://stackoverflow.com/a/32483545/895245

    Now you can run in 16-bit real mode:

        movw $handler0, 0x00
        mov %cs, 0x02
        movw $handler1, 0x04
        mov %cs, 0x06
        int $0
        int $1
        hlt
    handler0:
        /* Do 0. */
        iret
    handler1:
        /* Do 1. */
        iret
    

    This would do in order:

    • Do 0.
    • Do 1.
    • hlt: stop executing

    Note how the processor looks for the first handler at address 0, and the second one at 4: that is a table of handlers called the IVT, and each entry has 4 bytes.

    Minimal example that does some IO to make handlers visible.

    Protected mode

    Modern operating systems run in the so called protected mode.

    The handling has more options in this mode, so it is more complex, but the spirit is the same.

    Minimal example

    See also

    Related question: What does "int 0x80" mean in assembly code?

提交回复
热议问题