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:

  1. Takes a 16-bit signed immediate value
  2. Sign-extends it to 32 bits (copies the sign bit to upper 16 bits)
  3. 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)

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)

Back to Index