Bird
Raised Fist0
ARM Architectureknowledge~30 mins

Load and store instructions (LDR, STR) in ARM Architecture - Mini Project: Build & Apply

Choose your learning style10 modes available
Load and Store Instructions (LDR, STR) in ARM Assembly
📖 Scenario: You are learning how ARM processors move data between registers and memory using load and store instructions. This is like putting books on a shelf (store) or taking them off the shelf (load) in a library.
🎯 Goal: Build a simple ARM assembly program that stores a value from a register into memory and then loads it back into another register.
📋 What You'll Learn
Create a memory label called data with an initial value of 0x12345678
Create a register r0 and load the address of data into it
Store the value 0x9ABCDEF0 from register r1 into the memory location pointed by r0
Load the value from memory pointed by r0 back into register r2
💡 Why This Matters
🌍 Real World
Load and store instructions are fundamental in ARM assembly programming for moving data between registers and memory, essential for any embedded system or low-level software.
💼 Career
Understanding LDR and STR is critical for roles in embedded systems development, firmware engineering, and performance-critical software development on ARM-based devices.
Progress0 / 4 steps
1
Set up the data label with initial value
Create a memory label called data and initialize it with the value 0x12345678 using the .word directive.
ARM Architecture
Hint

Use the .data section and define data with .word followed by the hex value.

2
Load the address of data into register r0
In the .text section, create a label start. Use the ldr instruction with the pseudo-instruction =data to load the address of data into register r0.
ARM Architecture
Hint

Use ldr r0, =data to load the address of data into r0.

3
Store a value from r1 into memory at address in r0
Set register r1 to the value 0x9ABCDEF0. Then use the str instruction to store the value from r1 into the memory location pointed to by r0.
ARM Architecture
Hint

Use ldr r1, =0x9ABCDEF0 to load the value into r1. Then use str r1, [r0] to store it.

4
Load the stored value back into register r2
Use the ldr instruction to load the value from the memory address pointed to by r0 into register r2. This completes the load and store demonstration.
ARM Architecture
Hint

Use ldr r2, [r0] to load the value from memory into r2.

Practice

(1/5)
1. What does the LDR instruction do in ARM architecture?
easy
A. Stores data from a register into memory
B. Loads data from memory into a register
C. Performs arithmetic operations on registers
D. Jumps to a different instruction address

Solution

  1. Step 1: Understand the purpose of LDR

    The LDR instruction is used to read or load data from a memory address into a CPU register.
  2. Step 2: Differentiate from STR

    STR is the opposite; it stores data from a register back into memory.
  3. Final Answer:

    Loads data from memory into a register -> Option B
  4. Quick Check:

    LDR = Load from memory [OK]
Hint: LDR loads from memory, STR stores to memory [OK]
Common Mistakes:
  • Confusing LDR with STR
  • Thinking LDR performs arithmetic
  • Assuming LDR changes program flow
2. Which of the following is the correct syntax to store the value of register R1 into the memory address pointed by R0?
easy
A. STR R0, [R1]
B. LDR R1, [R0]
C. STR R1, [R0]
D. LDR R0, [R1]

Solution

  1. Step 1: Identify the store instruction

    STR is used to store data from a register into memory.
  2. Step 2: Match registers to syntax

    STR R1, [R0] means store the value in R1 into the memory address held in R0.
  3. Final Answer:

    STR R1, [R0] -> Option C
  4. Quick Check:

    STR stores register to memory [OK]
Hint: STR stores register to memory address in brackets [OK]
Common Mistakes:
  • Swapping register and address in syntax
  • Using LDR instead of STR for storing
  • Confusing source and destination registers
3. Given the following ARM instructions:
STR R2, [R3]
LDR R4, [R3]

What will be the value in register R4 after execution if R2 = 10 and the memory at address in R3 initially contains 5?
medium
A. 10
B. 5
C. Undefined
D. 0

Solution

  1. Step 1: Execute STR instruction

    STR R2, [R3] stores the value 10 (from R2) into the memory address pointed by R3, replacing the initial 5.
  2. Step 2: Execute LDR instruction

    LDR R4, [R3] loads the updated memory value (now 10) into R4.
  3. Final Answer:

    10 -> Option A
  4. Quick Check:

    Store then load updates R4 to 10 [OK]
Hint: Store first, then load from same address updates register [OK]
Common Mistakes:
  • Assuming memory value stays 5 after STR
  • Confusing source and destination registers
  • Ignoring instruction order
4. Identify the error in the following ARM assembly snippet:
LDR R1, R2
STR R3, [R4]
medium
A. LDR syntax is incorrect; missing brackets around R2
B. STR syntax is incorrect; missing brackets around R3
C. Both instructions are correct
D. LDR should use STR instead

Solution

  1. Step 1: Check LDR syntax

    LDR loads from memory address, so the source must be in brackets like [R2]. Here, R2 is missing brackets, so syntax is wrong.
  2. Step 2: Check STR syntax

    STR R3, [R4] is correct because it stores R3's value into memory at address in R4.
  3. Final Answer:

    LDR syntax is incorrect; missing brackets around R2 -> Option A
  4. Quick Check:

    LDR needs brackets for memory address [OK]
Hint: LDR and STR need brackets for memory addresses [OK]
Common Mistakes:
  • Omitting brackets for memory operands
  • Confusing register direct with memory access
  • Thinking STR needs brackets on source register
5. You want to copy a block of 4 words from memory starting at address in R5 to another location starting at address in R6 using ARM instructions. Which sequence correctly uses LDR and STR to achieve this?
hard
A. Use LDR R0, [R5, #4]; STR R0, [R6, #4] once
B. Use LDR R0, [R5]; STR R0, [R6] once only
C. Use STR R0, [R5]; LDR R0, [R6] repeated 4 times
D. Use a loop: LDR R0, [R5], #4; STR R0, [R6], #4 repeated 4 times

Solution

  1. Step 1: Understand block copy requirement

    Copying 4 words means loading each word from source and storing it to destination, advancing addresses each time.
  2. Step 2: Analyze Use a loop: LDR R0, [R5], #4; STR R0, [R6], #4 repeated 4 times

    Use a loop: LDR R0, [R5], #4; STR R0, [R6], #4 repeated 4 times uses LDR and STR with post-increment addressing ([R5], #4 and [R6], #4) inside a loop repeated 4 times, correctly copying each word and moving pointers.
  3. Step 3: Analyze other options

    Use LDR R0, [R5]; STR R0, [R6] once only copies only one word. Use STR R0, [R5]; LDR R0, [R6] repeated 4 times reverses load/store roles. Use LDR R0, [R5, #4]; STR R0, [R6, #4] once copies only one word with offset but no loop.
  4. Final Answer:

    Use a loop: LDR R0, [R5], #4; STR R0, [R6], #4 repeated 4 times -> Option D
  5. Quick Check:

    Loop with LDR/STR and address increment copies block [OK]
Hint: Use loop with LDR/STR and post-increment for block copy [OK]
Common Mistakes:
  • Copying only one word instead of all 4
  • Mixing load and store instructions
  • Not incrementing addresses after each word
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard