Vol. 2A 3-477
INSTRUCTION SET REFERENCE, A-M
INT n/INTO/INT 3—Call to Interrupt Procedure
or stack segment does not indicate writable data segment
THEN #TS(SS selector + EXT); FI;
IF stack segment not present
THEN #SS(SS selector + EXT); FI;
FI
IF 32-bit gate
THEN
IF new stack does not have room for 24 bytes (error code pushed)
or 20 bytes (no error code pushed)
THEN #SS(segment selector + EXT); FI;
FI
ELSE
IF 16-bit gate
THEN
IF new stack does not have room for 12 bytes (error code pushed)
or 10 bytes (no error code pushed);
THEN #SS(segment selector + EXT); FI;
ELSE (* 64-bit gate*)
IF StackAddress is non-canonical
THEN #SS(0);FI;
FI;
FI;
IF (IA32_EFER.LMA = 0) (* Not IA-32e mode *)
THEN
IF instruction pointer is not within code segment limits
THEN #GP(0); FI;
SS:ESP ← TSS(NewSS:NewESP);
(* Segment descriptor information also loaded *)
ELSE
IF instruction pointer points to non-canonical address
THEN #GP(0); FI:
FI;
IF 32-bit gate
THEN
CS:EIP ← Gate(CS:EIP); (* Segment descriptor information also loaded *)
ELSE
IF 16-bit gate
THEN
CS:IP ← Gate(CS:IP);
(* Segment descriptor information also loaded *)
ELSE (* 64-bit gate *)
CS:RIP ← Gate(CS:RIP);
(* Segment descriptor information also loaded *)
FI;