Skip to content

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.

  1. Require LPA.A to be zero, then evaluate the target operand completely in the old architectural context.

  2. Validate the complete new CS image.

  3. Validate the target offset against the new CS and probe executable translation at the resulting linear address.

  4. Probe both 8-byte long-return-frame stores through the old SS context.

  5. 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)

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)

Format: Instruction format for LCALL Rn(s), Rn(d)