Addressing Modes in Computer Architecture: Purpose, Why They Exist, and Two Modes Without Address Fields
Addressing Modes in Computer Architecture: Purpose, Why They Exist, and Two Modes Without Address Fields
An addressing mode describes how the CPU interprets an instruction’s operand information—i.e., whether the operand is in a register, is a literal constant, is at a computed memory address, etc. The key idea is that the same instruction format (e.g., an opcode plus some operand bits) can support multiple ways to locate operands by using an addressing mode interpretation mechanism (often encoded via an “addressing mode field” in the instruction, or implied by instruction type).
Computers use addressing modes because they improve:
- Code flexibility: instructions can refer to operands stored in different places (registers, memory, constants, stacks) without changing the entire instruction set design.
- Code density and efficiency: many common operations can use compact encodings (e.g., immediate or register-based forms) rather than forcing memory accesses.
- Performance and memory locality: selecting register/immediate modes can reduce memory traffic and latency.
- Support for different programming constructs: arrays, pointers, procedure calls, and control-flow targets naturally map to indirect/base/relative addressing forms.
Below, we formalize two addressing modes that do not use an address field (because they don’t need to name a memory address).
Note: Exact instruction-encoding details vary across ISAs (x86, ARM, RISC-V, etc.), but the conceptual model of addressing modes is consistent: it’s a contract between instruction encoding and operand location/value selection.
Addressing Modes (Immediate vs Register) — Computer Organization Overview
Core terms (quick reference)
- operand
- effective address
- immediate operand
- register operand
Why “addressing mode” exists
In a typical architecture, the CPU must decide one of several operand retrieval strategies for each instruction execution:
- Use a literal directly (immediate)
- Use a register value directly (register)
- Compute a memory address (direct/indirect/base-relative/indexed/PC-relative) and then read/write memory
This is why addressing modes are “techniques”: they let the ISA define multiple operand-location rules without forcing every instruction to always carry a full memory address.
How a CPU uses addressing modes at execution time
- 1Step 1
The instruction bits are split into opcode and operand-specifying parts (which may include register specifiers and/or an addressing-mode selector).
- 2Step 2
The CPU uses the addressing mode semantics to determine whether the operand is a constant, a register value, or something requiring an effective address computation.
- 3Step 3
If immediate: use the literal. If register: read the register. If memory-based: compute effective address and perform a memory read/write.
- 4Step 4
The ALU performs the operation using the retrieved operand(s), and stores the result according to the destination rules.
- 5Step 5
Registers/memory/status flags are updated as required by the instruction semantics.
Two addressing modes without address fields
Mode 1: Immediate addressing (immediate mode)
Meaning: The operand value is contained directly in the instruction as a literal constant. No memory location needs to be specified, so there is no “address field” pointing to memory.
- immediate
- immediate addressing
Example (conceptual assembly):
- Instruction:
ADD R1, #5 - Interpretation:
#5is an immediate literal- The CPU adds the literal
5toR1(register value), producing the result in the destination register.
Why it needs no address field: the operand is already the constant 5—there is no memory dereference, so there is no effective address computation.
Mode 2: Register addressing (register mode)
Meaning: The operand is taken from a CPU register specified by the instruction. Again, no memory address is required.
- register addressing
- register operand
Example (conceptual assembly):
- Instruction:
MOV R2, R3 - Interpretation:
- The source operand is the value currently stored in register
R3 - The destination
R2receives that value
- The source operand is the value currently stored in register
Why it needs no address field: registers are not addressed like memory locations in a dereference step for this mode; the instruction directly names the register (typically using register specifier bits).
Quick mental model
If the operand is literally written in the instruction (immediate) or already sits in a named CPU register (register mode), then you don’t need an address field to fetch it from memory.
Don’t confuse “no address field” with “no operand bits”
Even when there’s no memory address, instructions still contain bits that specify what the operand is (e.g., the immediate literal, or the register ID). The “address field” concept refers to fields used to locate memory (effective address), not to all operand-specifying bits.
Addressing Mode Coverage (from simplest to most address-computation-heavy)
No memory access
ImmediateOperand is a constant embedded in the instruction."
No memory dereference
RegisterOperand is taken from a specified CPU register."
Requires effective address
Memory-based (for context)Operand is loaded/stored using a computed or specified memory address."
Address Field Necessity (Conceptual)
Immediate and register modes do not require a memory address to retrieve the operand.
Common pitfalls and clarifications
Addressing Mode Quick Check
Knowledge Check
In immediate addressing mode, the operand comes from: