Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B, Instruction Set Reference, N-Z
Vol. 2B 4-261
INSTRUCTION SET REFERENCE, N-Z
information also loaded *)
CS(RPL) ← CPL;
ESP ← ESP + SRC; (* Release parameters from called procedure’s stack *)
tempESP ← Pop();
tempSS ← Pop(); (* 32-bit pop, high-order 16 bits discarded, segment descriptor
information also loaded *)
ESP ← tempESP;
SS ← tempSS;
ELSE
IF OperandSize = 16
THEN
EIP ← Pop();
EIP ← EIP AND 0000FFFFH;
CS ← Pop(); (* 16-bit pop; segment descriptor information also loaded *)
CS(RPL) ← CPL;
ESP ← ESP + SRC; (* release parameters from called
procedure’s stack *)
tempESP ← Pop();
tempSS ← Pop(); (* 16-bit pop; segment descriptor information loaded *)
ESP ← tempESP;
SS ← tempSS;
ELSE (* OperandSize
= 64 *)
RIP ← Pop();
CS ← Pop(); (* 64-bit pop; high-order 48 bits discarded; segment
descriptor information loaded *)
CS(RPL) ← CPL;
ESP ← ESP + SRC; (* Release parameters from called procedure’s
stack *)
tempESP ← Pop();
tempSS ← Pop(); (* 64-bit pop; high-order 48 bits discarded; segment
descriptor information also loaded *)
ESP ← tempESP;
SS ← tempSS;
FI;
FI;
FOR each of segment register (ES, FS, GS, and DS)
DO
IF segment register points to data or non-conforming code segment
and CPL > segment descriptor DPL; (* DPL in hidden part of segment register *)
THEN SegmentSelector ← 0; (* SegmentSelector invalid *)
FI;
OD;