Addressing modes tell the processor how to find the data it needs. They make instructions flexible and efficient by specifying where the data is located.
When you want to use a fixed number directly in an instruction.
When you want to use the value stored in a CPU register.
When you want to access data stored at a memory location calculated by adding an offset to a register.
Immediate mode uses a constant value directly in the instruction.
Register mode uses values stored in CPU registers.
Offset mode accesses memory at an address computed by adding an offset to a base register.
Key Points
This moves the number 10 directly into register R0 using immediate mode.
ARM Architecture
MOV R0, #10
This adds the values in registers R2 and R3, then stores the result in R1 using register mode.
ARM Architecture
ADD R1, R2, R3
This loads a value from memory at the address found by adding 12 to the value in R5, using offset mode.
ARM Architecture
LDR R4, [R5, #12]
Detailed Explanation
This program shows all three addressing modes: immediate values loaded into registers, adding register values, and storing a result into memory using an offset address.
ARM Architecture
MOV R0, #7 ; Load immediate value 7 into R0
MOV R1, #3 ; Load immediate value 3 into R1
ADD R2, R0, R1 ; Add R0 and R1, store in R2
STR R2, [R3, #4] ; Store R2 into memory at address R3 + 4
OutputSuccess
Important Notes
Immediate values are limited in size depending on the instruction encoding.
Register mode is fast because it uses data already inside the CPU.
Offset mode is useful for accessing arrays or structures in memory.
Summary
Addressing modes define how instructions find their data.
Offset mode calculates memory addresses by adding an offset to a register.
Practice
(1/5)
1. Which addressing mode uses a fixed number directly inside the instruction to provide data?
easy
A. Immediate addressing mode
B. Register addressing mode
C. Offset addressing mode
D. Indirect addressing mode
Solution
Step 1: Understand immediate addressing mode
Immediate mode means the instruction contains the actual number (constant) to use.
Step 2: Compare with other modes
Register mode uses CPU registers, offset mode calculates address by adding offset to a register, indirect mode uses memory address stored in a register.
Final Answer:
Immediate addressing mode -> Option A
Quick Check:
Fixed number inside instruction = Immediate mode [OK]
Hint: Immediate mode has the number right inside the instruction [OK]
Common Mistakes:
Confusing immediate with register mode
Thinking offset mode uses fixed numbers directly
Mixing indirect addressing with immediate
2. Which of the following is the correct syntax for using register addressing mode in ARM assembly to move data from register R1 to R0?
easy
A. MOV R0, [R1]
B. MOV R0, #R1
C. MOV R0, R1
D. MOV [R0], R1
Solution
Step 1: Understand register addressing syntax
Register addressing uses register names directly without # or brackets.
Step 2: Analyze options
MOV R0, R1 uses MOV R0, R1 which copies data from R1 to R0 correctly. MOV R0, #R1 wrongly uses # which means immediate. MOV R0, [R1] uses brackets which means memory access. MOV [R0], R1 tries to move to memory location incorrectly.
Final Answer:
MOV R0, R1 -> Option C
Quick Check:
Register names without # or [] = Register mode [OK]
Hint: Register mode uses register names directly, no # or brackets [OK]
Common Mistakes:
Using # before register name
Using brackets [] for register mode
Confusing immediate and register syntax
3. Given the ARM instruction LDR R2, [R3, #4], what does this instruction do?
medium
A. Loads the immediate value 4 into R2
B. Loads the value from memory address in R3 plus 4 into R2
C. Moves the value from R3 to R2
D. Stores the value of R2 into memory address R3 plus 4
Solution
Step 1: Identify addressing mode in LDR instruction
The syntax [R3, #4] means offset addressing mode: base register R3 plus immediate offset 4.
Step 2: Understand LDR operation
LDR loads data from memory address calculated by R3 + 4 into register R2.
Final Answer:
Loads the value from memory address in R3 plus 4 into R2 -> Option B
Quick Check:
Offset mode loads from (R3 + 4) into R2 [OK]
Hint: Brackets with # offset means load from memory address plus offset [OK]
Common Mistakes:
Thinking #4 is immediate load into R2
Confusing load with store instruction
Ignoring the offset in brackets
4. Identify the error in this ARM instruction using addressing modes: ADD R1, R2, #R3
medium
A. Incorrect use of # before register R3
B. Missing brackets around R3
C. Wrong destination register
D. Immediate value cannot be used with ADD
Solution
Step 1: Analyze the use of # in ARM instructions
The # symbol is used only before immediate (constant) values, not registers.
Step 2: Check the instruction syntax
Here #R3 is invalid because R3 is a register, not an immediate value. Correct syntax is ADD R1, R2, R3 without #.
Final Answer:
Incorrect use of # before register R3 -> Option A
Quick Check:
# only for constants, not registers [OK]
Hint: # is only for numbers, never before register names [OK]
Common Mistakes:
Using # before register names
Adding brackets unnecessarily
Confusing immediate and register operands
5. You want to load a value from memory address calculated by adding 8 to the value in register R4, then add an immediate value 5 to it and store in R0. Which sequence of ARM instructions correctly uses addressing modes?
hard
A. LDR R1, [R4, R5]
ADD R0, R1, #8
B. LDR R0, [R4, #5]
ADD R0, R0, #8
C. LDR R0, [R4]
ADD R0, R0, R5
D. LDR R1, [R4, #8]
ADD R0, R1, #5
Solution
Step 1: Load from memory address R4 + 8
Use offset addressing mode: LDR R1, [R4, #8] loads from address R4 + 8 into R1.
Step 2: Add immediate 5 to loaded value
ADD R0, R1, #5 adds immediate 5 to R1 and stores result in R0.