li
Load Immediate - 38 00 00 00
li
Instruction Syntax
Mnemonic | Format | Flags |
li | rD,SIMM | None |
Instruction Encoding
0
0
1
1
1
0
D
D
D
D
D
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Field | Bits | Description |
Primary Opcode | 0-5 | 001110 (0x0E) |
rD | 6-10 | Destination register |
SIMM | 16-31 | Signed immediate value (16-bit) |
Operation
rD ← EXTS(SIMM)
Simple explanation: LI loads a 16-bit signed immediate value into a register, sign-extending it to 32 bits.
What it does:
- Takes a 16-bit signed immediate value
- Sign-extends it to 32 bits (copies the sign bit to upper 16 bits)
- Stores the result in the destination register
Note: The immediate value range is -32,768 to +32,767 (16-bit signed). For larger values, use lis followed by ori.
Affected Registers
General Purpose Registers (GPRs)
- rD (Destination register) - Loaded with sign-extended immediate value
Examples
Basic Load Immediate
# Load small positive values li r3, 42 # r3 = 42 li r4, 100 # r4 = 100 li r5, 0 # r5 = 0
Load Negative Values
# Load negative values li r3, -1 # r3 = -1 li r4, -100 # r4 = -100 li r5, -32768 # r5 = -32768 (minimum value)
Common Constants
# Load commonly used constants li r3, 1 # r3 = 1 li r4, -1 # r4 = -1 li r5, 0 # r5 = 0 li r6, 255 # r6 = 255 (byte mask)
Array Indexing
# Load array indices li r3, 0 # First element li r4, 1 # Second element li r5, 10 # Tenth element li r6, -1 # Last element (negative index)
Loop Counters
# Initialize loop counters li r3, 10 # Loop 10 times li r4, 0 # Start from 0 loop: # ... loop body ... addi r4, r4, 1 # Increment counter cmpw r4, r3 # Compare with limit blt loop # Branch if less than
Related Instructions
lis (Load Immediate Shifted), addi (Add Immediate), ori (OR Immediate), andi (AND Immediate)