Bird
Raised Fist0
ARM Architectureknowledge~20 mins

Link register (R14/LR) in ARM Architecture - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
ARM Link Register Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Purpose of the Link Register (R14/LR) in ARM Architecture

What is the primary role of the Link Register (R14/LR) in ARM processors?

AIt stores the processor status flags.
BIt acts as the main stack pointer for function calls.
CIt stores the return address when a subroutine is called.
DIt holds the current instruction being executed.
Attempts:
2 left
💡 Hint

Think about what happens when a function or subroutine is called and how the processor knows where to return.

📋 Factual
intermediate
1:30remaining
Register Number of the Link Register in ARM

Which register number corresponds to the Link Register (LR) in ARM architecture?

AR13
BR12
CR15
DR14
Attempts:
2 left
💡 Hint

Registers R13, R14, and R15 have special roles in ARM. LR is one of them.

🔍 Analysis
advanced
2:30remaining
Effect of Overwriting the Link Register During a Function Call

What happens if a function overwrites the Link Register (LR) without saving it first before returning?

AThe return address is lost, causing the program to jump to an incorrect location or crash.
BThe processor automatically restores LR from the stack, so no problem occurs.
CThe program will return to the correct caller address without issues.
DThe function will execute twice before returning.
Attempts:
2 left
💡 Hint

Consider what the LR holds and what happens if its value changes unexpectedly.

❓ Comparison
advanced
2:00remaining
Difference Between Link Register (LR) and Program Counter (PC) in ARM

Which statement correctly distinguishes the Link Register (LR) from the Program Counter (PC) in ARM processors?

ALR is used as the main stack pointer; PC is used to store processor flags.
BLR stores the return address after a function call; PC holds the address of the current instruction being executed.
CLR holds the address of the next instruction to execute; PC stores the return address after a function call.
DLR and PC are the same registers with different names.
Attempts:
2 left
💡 Hint

Think about what each register is used for during program execution and function calls.

❓ Reasoning
expert
3:00remaining
Using the Link Register (LR) in Nested Function Calls

In ARM assembly, when a function A calls function B, which then calls function C, what must be done with the Link Register (LR) to ensure all functions return correctly?

AEach function must save LR to the stack before calling another function and restore it before returning.
BOnly the first function needs to save LR; the others can overwrite it freely.
CLR is automatically saved and restored by the processor during nested calls.
DFunctions should avoid calling other functions to prevent LR conflicts.
Attempts:
2 left
💡 Hint

Consider what happens to LR when a function calls another function and how return addresses are preserved.

Practice

(1/5)
1. What is the primary purpose of the link register (R14/LR) in ARM architecture?
easy
A. To manage stack pointer operations
B. To hold the current instruction being executed
C. To store general-purpose data temporarily
D. To store the return address during function calls

Solution

  1. Step 1: Understand the role of the link register

    The link register (R14/LR) is specifically designed to hold the return address when a function call is made.
  2. Step 2: Differentiate from other registers

    Other registers like the program counter hold the current instruction, and the stack pointer manages the stack, but LR stores the return address.
  3. Final Answer:

    To store the return address during function calls -> Option D
  4. Quick Check:

    Link register = return address storage [OK]
Hint: LR always holds return address after a function call [OK]
Common Mistakes:
  • Confusing LR with the program counter
  • Thinking LR stores general data
  • Mixing LR with stack pointer
2. Which ARM instruction saves the return address into the link register (LR)?
easy
A. BL
B. ADD
C. MOV
D. STR

Solution

  1. Step 1: Identify the instruction for function calls

    The BL (Branch with Link) instruction branches to a function and saves the return address in LR.
  2. Step 2: Understand other instructions

    MOV moves data, ADD adds values, and STR stores data to memory; none save return addresses.
  3. Final Answer:

    BL -> Option A
  4. Quick Check:

    BL saves return address in LR [OK]
Hint: BL means branch and link (save return) [OK]
Common Mistakes:
  • Choosing MOV as it moves data
  • Confusing STR with saving return address
  • Thinking ADD saves addresses
3. Consider this ARM code snippet:
BL function
...
function:
MOV R0, #5
BX LR

What happens when the instruction BX LR executes?
medium
A. The program jumps back to the instruction after BL
B. The program jumps to the start of function
C. The program halts execution
D. The program jumps to an undefined address

Solution

  1. Step 1: Understand what BL does

    BL saves the return address (next instruction after BL) into LR and jumps to 'function'.
  2. Step 2: Analyze BX LR instruction

    BX LR branches to the address stored in LR, which is the return address after BL.
  3. Final Answer:

    The program jumps back to the instruction after BL -> Option A
  4. Quick Check:

    BX LR returns to caller address [OK]
Hint: BX LR returns to saved return address [OK]
Common Mistakes:
  • Thinking BX LR jumps to function start
  • Assuming program halts on BX LR
  • Believing BX LR jumps to random address
4. In this ARM code, what is the error?
BL function
...
function:
MOV R0, #10
MOV PC, R0
medium
A. BL instruction is invalid
B. MOV PC, R0 does not return to caller correctly
C. MOV R0, #10 is not allowed
D. Function label is missing

Solution

  1. Step 1: Check the return method

    To return from a function, the program must jump to the address in LR, not to a fixed value in R0.
  2. Step 2: Identify the problem with MOV PC, R0

    MOV PC, R0 sets the program counter to 10, which is not a valid return address, causing incorrect behavior.
  3. Final Answer:

    MOV PC, R0 does not return to caller correctly -> Option B
  4. Quick Check:

    Return must use LR, not arbitrary register [OK]
Hint: Return by jumping to LR, not arbitrary register [OK]
Common Mistakes:
  • Thinking BL is invalid
  • Assuming MOV R0, #10 is wrong
  • Ignoring the need to use LR for return
5. You want to write a function in ARM that calls another function and then returns correctly. Which sequence correctly uses the link register (LR)?
hard
A. Use B to call the function, then return with BX R14
B. Use B to call the function, then return with MOV PC, LR
C. Use BL to call the function, then return with BX LR
D. Use BL to call the function, then return with MOV PC, R0

Solution

  1. Step 1: Understand function call with BL

    BL saves the return address in LR and branches to the called function.
  2. Step 2: Understand correct return instruction

    Returning is done by branching to LR using BX LR, which jumps back to the saved return address.
  3. Step 3: Evaluate other options

    B does not save return address in LR; MOV PC, R0 returns to wrong place; BX R14 is equivalent to BX LR but using B (not BL) means LR is not saved.
  4. Final Answer:

    Use BL to call the function, then return with BX LR -> Option C
  5. Quick Check:

    BL + BX LR = correct call and return [OK]
Hint: Call with BL, return with BX LR always [OK]
Common Mistakes:
  • Using B instead of BL for calls
  • Returning with MOV PC, R0 instead of BX LR
  • Confusing BX R14 and BX LR usage
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