Code | Mnemonic | Description |
---|---|---|
CC | INT 3 | Interrupt 3 — trap to debugger |
CD ib | INT imm8 | Interrupt vector number specified by immediate byte |
CE | INTO | Interrupt 4 — if overflow flag is 1 |
The INT n instruction generates a call to the interrupt or exception handler specified with the destination operand (see the section titled "Interrupts and Exceptions" in Chapter 4 of the Intel Architecture Software Developer's Manual, Volume 1). The destination operand specifies an interrupt vector number from 0 to 255, encoded as an 8-bit unsigned intermediate value. Each interrupt vector number provides an index to a gate descriptor in the IDT. The first 32 interrupt vector numbers are reserved by Intel for system use. Some of these interrupts are used for internally generated exceptions.
The INT n instruction is the general mnemonic for executing a software-generated call to an interrupt handler. The INTO instruction is a special mnemonic for calling overflow exception (#OF), interrupt vector number 4. The overflow interrupt checks the OF flag in the EFLAGS register and calls the overflow interrupt handler if the OF flag is set to 1.
The INT 3 instruction generates a special one byte opcode (CC) that is intended for calling the debug exception handler. (This one byte form is valuable because it can be used to replace the first byte of any instruction with a breakpoint, including other one byte instructions, without over-writing other code). To further support its function as a debug breakpoint, the interrupt generated with the CC opcode also differs from the regular software interrupts as follows:
Note that the "normal" 2-byte opcode for INT 3 (CD03) does not have these special features. Intel and Microsoft assemblers will not generate the CD03 opcode from any mnemonic, but this opcode can be created by direct numeric code definition or by self-modifying code.
The action of the INT n instruction (including the INTO and INT 3 instructions) is similar to that of a far call made with the CALL instruction. The primary difference is that with the INT n instruction, the EFLAGS register is pushed onto the stack before the return address. (The return address is a far address consisting of the current values of the CS and EIP registers.) Returns from interrupt procedures are handled with the IRET instruction, which pops the EFLAGS information and return address from the stack.
The interrupt vector number specifies an interrupt descriptor in the interrupt descriptor table (IDT); that is, it provides index into the IDT. The selected interrupt descriptor in turn contains a pointer to an interrupt or exception handler procedure. In protected mode, the IDT contains an array of 8-byte descriptors, each of which is an interrupt gate, trap gate, or task gate. In real-address mode, the IDT is an array of 4-byte far pointers (2-byte code segment selector and a 2-byte instruction pointer), each of which point directly to a procedure in the selected segment. (Note that in real-address mode, the IDT is called the interrupt vector table, and it's pointers are called interrupt vectors.)
When the processor is executing in virtual-8086 mode, the IOPL determines the action of the INT n instruction. If the IOPL is less than 3, the processor generates a general protection exception (#GP); if the IOPL is 3, the processor executes a protected mode interrupt to privilege level 0. The interrupt gate's DPL must be set to three and the target CPL of the interrupt handler procedure must be 0 to execute the protected mode interrupt to privilege level 0.
The interrupt descriptor table register (IDTR) specifies the base linear address and limit of the IDT. The initial base address value of the IDTR after the processor is powered up or reset is 0.
Operands | Bytes | Clocks | |
---|---|---|---|
3 (const) | 1 | 13 | NP |
imm8 | 2 | 16 | NP |
Operands | Bytes | Clocks | |
---|---|---|---|
1 | 27 - 82 | NP |
The EFLAGS register is pushed onto the stack.
ID | unaffected | DF | unaffected |
---|---|---|---|
VIP | unaffected | IF | may be cleared, depending on the mode of operation of the processor when the INT instruction is executed |
VIF | unaffected | TF | may be cleared, depending on the mode of operation of the processor when the INT instruction is executed |
AC | may be cleared, depending on the mode of operation of the processor when the INT instruction is executed | SF | unaffected |
VM | may be cleared, depending on the mode of operation of the processor when the INT instruction is executed | ZF | unaffected |
RF | may be cleared, depending on the mode of operation of the processor when the INT instruction is executed | AF | unaffected |
NT | may be cleared, depending on the mode of operation of the processor when the INT instruction is executed | PF | unaffected |
IOPL | unaffected | CF | unaffected |
OF | unaffected |
If the interrupt uses a task gate, any flags may be set or cleared, controlled by the EFLAGS image in the new task's TSS.