Figure 4 -- Calculating the address of an interrupt routine _________________________________________________________________ +-----------------------------------------------+ | | | +---+ | | |INT| | | +---+ | | | | | | +---------+ BS:0000h | | | | SEGMENT | | | | + ------- | | | | | OFFSET | | | +->+---------+ BS:0004h | | | SEGMENT +-->----->----->----+ | | + ------- | | | | | OFFSET +-->----->----->----+ | | +---------+ BS:0008h | | | | SEGMENT | +-----------+ | | + ------- | | INTERRUPT | | | | OFFSET | | SERVICE | | | +---------+ BS:000Ch | ROUTINE | | | ....... +-----------+ | | ....... | | ....... | | +---------+ BS:03FCh | | | SEGMENT | | | + ------- | | | | OFFSET | | | +---------+ BS:0400h | | | | BS = interrupt table Base Segment: | | 80286 = Always 0 | | 80386 = Relocatable via IDTR | | | | (a) Interrupt service addressing in real-mode | | | +-----------------------------------------------+ | | | +---+ | | |INT| | | +---+ | | | | | | | | 4 3 3 2 2 | 0 | | 7 2 1 4 3 | 0 | | +---------------------+---+----------------+ | | |(8x# of interrupts)-1| 0 |24-bit base addr| | | +---------------------+---+----------------+ | | Interrupt base register (descriptor cache) | | | | | | | | +-<-----<-----<-----<----+ | | | | | | Interrupt Descriptor | | | Table | | | +----------------+ | | | |Segment selector| | | | |--------------- | | | | | Offset | | | +->----->----->--+----------------+ | | +---<-----<-----<-----<--|Segment selector| | | | |--------------- | | | +---<-----<-----<-----<--| Offset | | | | +----------------+ | | | |Segment selector| | | | |--------------- | | | | | Offset | | | | +----------------+ | | | . . . . . . | | | Global (or Local) . . . . . . | | | Descriptor table . . . . . . | | | +----------------+ +----------------+ | | | | Base address | |Segment selector| | | | |--------------- | |--------------- | | | | | Offset | | Offset | | | | +----------------+ +----------------+ | | | | Base address | # of interrupts | | | |--------------- | | | | | Offset | | | | +----------------+ | | | | Base address |-->----->----+ | | +->|--------------- | | | | | Offset |-->----->----+ | | +----------------+ | | | . . . . . . | | | . . . . . . +-----------------+ | | . . . . . . |Interrupt Service| | | +----------------+ | Routine | | | | Base address | +-----------------+ | | |--------------- | | | | Offset | | | +----------------+ | | | | b) Interrupt service addressing in Prot. Mode | | | +-----------------------------------------------+ _________________________________________________________________ Back to Protected Mode Basics article