The Interrupt Descriptor Table (IDT) is a data structure used by the x86 architecture to implement an interrupt vector table. The IDT is used by the processor to determine the correct response to interrupts and exceptions.
The details in the description below apply specifically to the x86 architecture and the AMD64 architecture. Other architectures have similar data structures, but may behave differently.
Use of the IDT is triggered by three types of events: hardware interrupts, software interrupts, and processor exceptions, which together are referred to as "interrupts". The IDT consists of 256 interrupt vectors–the first 32 (0-31 or 00-1F) of which are reserved for processor exceptions.
In the 8086 processor, the interrupt table is called IVT (interrupt vector table). The IVT always resides at the same location in memory, ranging from 0x0000
to 0x03ff
, and consists of 256 four-byte real mode far pointers (256 × 4 = 1024 bytes of memory).
A real mode pointer is defined as a 16-bit segment and a 16-bit offset into that segment. The segment is expanded internally by the processor to 20 bits by shifting it 4 bits to the left, thus limiting real mode interrupt handlers to the first 1 megabyte of memory. The first 32 vectors are reserved for the processor's internal exceptions, and hardware interrupts may be mapped to any of the vectors by way of a programmable interrupt controller.
On the 80286 and later, the size and locations of the IVT can be changed in the same way as it is done with the IDT in protected mode, i.e. via the LIDT instruction, though it does not change the format of it. The 80286 also introduced the high memory area, which raises the address limit in real mode by 65520 bytes.
A commonly used x86 real mode interrupt is INT 10
, the Video BIOS code to handle primitive screen drawing functions such as pixel drawing and changing the screen resolution.