360 Assembly/360 Instructions/LGFR
LGFR - Load Register And Sign-Extend - RRE Instruction - Opcode B914
Format[edit | edit source]
- LGFR 2,6 Copy the contents of register 6 into register 2, sign-extending from 32 to 64 bits.
The specific syntax is
- LGFR target register, source register.
Opcode[edit | edit source]
Example usage[edit | edit source]
The LGFR instruction is used to copy the contents of the second register argument (the source register) into the first register argument (the target register), replacing the contents of the target register with the contents of the source register, sign-extended from 32 to 64 bits. The following is an example of how the instruction would assemble in various forms from an assembly language listing:
B914 0026 LGFR 2,6 B914 0092 LGFR 9,2 B914 00FA LGFR 15,10
Typical Usage[edit | edit source]
When it is necessary to extend integer value as a signed one from 32 to 64 bits, having the source in a general register.
Availability[edit | edit source]
The LGFR instruction is 64-bit, and is only available on the 390 series and z/System. It will cause an opcode exception on the 360 and 370 series.
Operation[edit | edit source]
The LGFR instruction copies the 32-bit value from the register specified by the second argument to the register specified by the first argument.
Bits 0-31 (the high half) of the target 64-bit register are filled with copy of sign (most significant) bit of the source value.
Register 0 is valid for either register and is not ignored as in some other instructions.
Condition Codes[edit | edit source]
Condition codes are not changed.
Exceptions and Faults[edit | edit source]
- 360 and 370 Series: Opcode Exception
- 390 Series and zSystem: None.
The most closely-related instruction is Add Logical Register (ALR) and not Load Address (LA), as is sometimes assumed. Whereas L loads a value from memory, LA does not access memory; it only calculates a number, which can but does not have to be an address.
32-Bit Instructions[edit source]
- To load an 8-bit byte (character) value from memory, see IC.
- To load one or more 8-bit byte values into a register according to a mask, see ICM
- To load a 16-bit half-word value from memory, see LH.
- To load a 12-bit unsigned value into a register or add up to 4095 to the values in one or two 32-bit registers, see LA.
- To copy a 32-bit word value from one register to another register, see LR.
- To load a 32-bit word value from memory, see L.
- To store an 8-bit byte (character) value in memory, see STC.
- To store one or more 8-bit byte values into memory according to a mask, see STCM
- To store a 16-bit half-word value in memory, see STH.
- To store a 32-bit word value in memory, see ST.
64-Bit Instructions[edit source]
- To load a 20-bit signed value into a 32-bit or 64-bit register from an extended (20-bit) signed memory offset, see LAY.
- To load a 32-bit value into a 64-bit register from an extended (20-bit) signed memory offset, see LGF.
- To copy a 64-bit value from one 64-bit register to another 64-bit register, see LGR.
- To load a 64-bit value into a 64-bit register from memory, see LG.
- To store a 32-bit value from a register to an extended (20-bit) signed memory offset, see STY.
- To store a 64-bit value from a 64-bit register to an address in memory, see STG.
|360 Assembly Instructions
|360 Assembly Language|
|360 Family||Introduction · Basic FAQ · 360 Family · 360 Architecture|
|360 Instruction Set||360 Instructions · Branch Instructions · Data Transfer Instructions · Control Flow Instructions · Arithmetic Instructions · Logic Instructions · Shift and Rotate Instructions · Other Instructions|
|Syntaxes and Assemblers||360 Assemblers· Pseudo Instructions|
|Instruction Extensions||Floating Point · High-Level Languages|
| This page or section is an undeveloped draft or outline.
You can help to develop the work, or you can ask for assistance in the project room.