LCALL
Operation
Pushes a long return frame and atomically transfers control to a new CS:PC pair.
Assembler Syntax
LCALL Rn(r), <ea>(e)
LCALL Rn(s), Rn(d)
Privilege
Unprivileged
Long Call is a segment-changing control transfer. It first constructs the long return frame on SS:SP, then commits the new CS and PC together. The two-operand encoding takes the new CS image from an Rn register. Its target EA has Q interpretation width: a memory operand reads a 64-bit offset and a register or immediate operand supplies its value directly.
-
Require LPA.A to be zero, then evaluate the target operand completely in the old architectural context.
-
Validate the complete new CS image.
-
Validate the target offset against the new CS and probe executable translation at the resulting linear address.
-
Probe both 8-byte long-return-frame stores through the old SS context.
-
Commit the two frame stores, decremented SP, new CS, and new PC as one successful control-transfer operation.
Fault atomicity. No frame word, SP, CS, or PC update is visible when any prior step faults.
An active resident link raises INVALID_CONTROL_TRANSITION before target or stack access.
The long return frame is 16 bytes in the old SS context: the continuation PC occupies offset 0 and the return CS image occupies offset 8. An invalid new CS image raises INVALID_CONTROL_IMAGE; target translation or either frame-store translation failure raises the applicable ADDRESS_TRANSLATION family event.
2.75in
Encodings
LCALL Rn(r), <ea>(e)
Format: Instruction format for LCALL Rn(r), <ea>(e)
2.75in LCALL Rn(s), Rn(d)
Format: Instruction format for LCALL Rn(s), Rn(d)