background image

INT n/INTO/INT 3—Call to Interrupt Procedure

INSTRUCTION SET REFERENCE, A-L

3-456 Vol. 2A

INT n/INTO/INT 3—Call to Interrupt Procedure

Instruction Operand Encoding

Description

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 6 of the Intel® 64 and IA-32 Architectures Software 
Developer’s Manual, Volume 1
). The destination operand specifies a vector from 0 to 255, encoded as an 8-bit 
unsigned intermediate value. Each vector provides an index to a gate descriptor in the IDT. The first 32 vectors are 
reserved by Intel for system use. Some of these vectors 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), exception 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 
INTO instruction cannot be used in 64-bit mode.)
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: 

Interrupt redirection does not happen when in VME mode; the interrupt is handled by a protected-mode 
handler.

The virtual-8086 mode IOPL checks do not occur. The interrupt is taken without faulting at any IOPL level.

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 vector 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 its pointers are called interrupt vectors.) 
The following decision table indicates which action in the lower portion of the table is taken given the conditions in 
the upper portion of the table. Each Y in the lower section of the decision table represents a procedure defined in 
the “Operation” section for this instruction (except #GP).

Opcode

Instruction

Op/ 

En

64-Bit 

Mode

Compat/

Leg Mode

Description

CC

INT 3

NP

Valid

Valid

Interrupt 3—trap to debugger.

CD ib

INT imm8

I

Valid

Valid

Interrupt vector specified by immediate byte.

CE

INTO

NP

Invalid

Valid

Interrupt 4—if overflow flag is 1.

Op/En

Operand 1

Operand 2

Operand 3

Operand 4

NP

NA

NA

NA

NA

I

imm8

NA

NA

NA