beautypg.com

Intel 253666-024US User Manual

Page 140

background image

3-94 Vol. 2A

CALL—Call Procedure

INSTRUCTION SET REFERENCE, A-M

THEN

tempRIP ← DEST; (* DEST is r/m64 *)

IF stack not large enough for a 8-byte return address

THEN #SS(0); FI;

Push(RIP);
RIP ← tempRIP;

FI;
IF OperandSize

=

32

THEN

tempEIP ← DEST; (* DEST is r/m32 *)

IF tempEIP is not within code segment limit THEN #GP(0); FI;
IF stack not large enough for a 4-byte return address

THEN #SS(0); FI;

Push(EIP);
EIP ← tempEIP;

FI;
IF OperandSize

=

16

THEN

tempEIP ← DEST AND 0000FFFFH; (* DEST is r/m16 *)

IF tempEIP is not within code segment limit THEN #GP(0); FI;
IF stack not large enough for a 2-byte return address

THEN #SS(0); FI;

Push(IP);
EIP ← tempEIP;

FI;

FI;rel/abs

FI; near

IF far call and (PE

=

0 or (PE

=

1 and VM

=

1)) (* Real-address or virtual-8086 mode *)

THEN

IF OperandSize

=

32

THEN

IF stack not large enough for a 6-byte return address

THEN #SS(0); FI;

IF DEST[31:16] is not zero THEN #GP(0); FI;
Push(CS); (* Padded with 16 high-order bits *)
Push(EIP);
CS ← DEST[47:32]; (* DEST is ptr16:32 or [m16:32] *)

EIP ← DEST[31:0]; (* DEST is ptr16:32 or [m16:32] *)

ELSE (* OperandSize

=

16 *)

IF stack not large enough for a 4-byte return address

THEN #SS(0); FI;

Push(CS);