What does the BL instruction do in ARM architecture?
The BL (Branch and Link) instruction jumps to a subroutine address and saves the return address in the link register (LR) so the program can return after the subroutine finishes.
Click to reveal answer
beginner
Why is the link register (LR) important when using BL?
LR stores the address to return to after the subroutine completes, allowing the program to continue from where it left off.
Click to reveal answer
beginner
How does BL differ from a simple branch (B) instruction?
BL saves the return address in LR before jumping, while B just jumps without saving the return point.
Click to reveal answer
intermediate
What happens if you forget to use BL and use B instead for a subroutine call?
The program will jump to the subroutine but won’t save the return address, so it cannot return properly, causing errors or crashes.
Click to reveal answer
beginner
How do you return from a subroutine called with BL in ARM?
You return by branching to the address stored in the link register (LR), usually with the instruction 'BX LR' or 'MOV PC, LR'.
Click to reveal answer
What does the BL instruction do in ARM?
APerforms arithmetic addition
BOnly jumps to a new address without saving return
CJumps to a subroutine and saves return address
DLoads a value into a register
✗ Incorrect
BL jumps to a subroutine and saves the return address in the link register.
Where is the return address stored after a BL instruction?
ALink Register (LR)
BStack Pointer (SP)
CProgram Counter (PC)
DGeneral Purpose Register R0
✗ Incorrect
The return address is saved in the Link Register (LR) after BL.
Which instruction is used to return from a subroutine called by BL?
AB LR
BBX LR
CBL LR
DMOV PC, LR
✗ Incorrect
BX LR branches to the address in LR, returning from the subroutine.
What happens if you use B instead of BL to call a subroutine?
ASubroutine runs and returns correctly
BProgram crashes immediately
CNothing happens
DSubroutine runs but return address is lost
✗ Incorrect
Using B jumps without saving return address, so the program cannot return properly.
BL instruction is mainly used for:
ACalling subroutines
BLooping
CData transfer
DArithmetic operations
✗ Incorrect
BL is used to call subroutines by branching and saving return address.
Explain how the BL instruction works and why the link register is important.
Think about how the program remembers where to come back after a subroutine.
You got /3 concepts.
Describe what could go wrong if you use a branch (B) instruction instead of BL for calling a subroutine.
Consider what happens when the program tries to return without knowing where to go.
You got /3 concepts.
Practice
(1/5)
1. What does the BL instruction do in ARM architecture?
easy
A. It jumps to a subroutine and saves the return address in the link register.
B. It loads a value into a register.
C. It performs a bitwise AND operation.
D. It returns from a subroutine without saving the return address.
Solution
Step 1: Understand the purpose of BL
The BL instruction is used to jump to a subroutine while saving the return address.
Step 2: Identify where the return address is saved
The return address is saved in the link register (LR) to allow returning after the subroutine finishes.
Final Answer:
It jumps to a subroutine and saves the return address in the link register. -> Option A
Quick Check:
BL saves return address in LR [OK]
Hint: BL jumps and saves return address in LR [OK]
Common Mistakes:
Confusing BL with simple jump instructions
Thinking BL does not save return address
Mixing BL with data load instructions
2. Which of the following is the correct syntax to return from a subroutine in ARM assembly?
easy
A. BX PC
B. MOV PC, LR
C. BX LR
D. BL LR
Solution
Step 1: Identify the instruction to return from subroutine
Returning from a subroutine requires branching to the address stored in the link register (LR).
Step 2: Choose the correct instruction
The instruction BX LR branches to the address in LR, effectively returning control.
Final Answer:
BX LR -> Option C
Quick Check:
Return uses BX LR [OK]
Hint: Return with BX LR to jump back [OK]
Common Mistakes:
Using BX PC instead of BX LR
Confusing BL with return instruction
Using MOV PC, LR which is valid but less common
3. Consider this ARM assembly snippet:
BL subroutine
MOV R0, #0
B end
subroutine:
MOV R0, #1
BX LR
end:
What value will register R0 hold after execution?
medium
A. 1
B. 0
C. Undefined
D. The program will crash
Solution
Step 1: Follow the BL instruction
The BL instruction jumps to subroutine and saves the return address (address of MOV R0, #0) in LR.
Step 2: Execute subroutine and return
Inside subroutine, MOV R0, #1 sets R0 to 1, then BX LR returns to MOV R0, #0.
Step 3: Continue after BL
MOV R0, #0 overwrites R0 to 0, followed by B end.
Final Answer:
0 -> Option B
Quick Check:
Post-return MOV R0, #0 overwrites subroutine value [OK]
Hint: BL returns to next instr MOV R0, #0 overwriting subroutine's R0=1 [OK]
Common Mistakes:
Assuming R0 remains 1 after subroutine return
Misidentifying the BL return address
Thinking instructions after BL are skipped
4. Identify the error in this ARM assembly code snippet:
BL subroutine
MOV R0, #5
B end
subroutine:
MOV R0, #10
BX PC
end:
medium
A. No error; code is correct.
B. BL instruction is missing a label.
C. MOV R0, #5 should be before BL.
D. Using BX PC instead of BX LR to return causes incorrect return.
Solution
Step 1: Check return instruction in subroutine
The subroutine uses BX PC to return, which branches to the current PC, not the saved return address.
Step 2: Understand correct return usage
Correct return uses BX LR to jump back to the caller address saved by BL.
Final Answer:
Using BX PC instead of BX LR to return causes incorrect return. -> Option D
Quick Check:
Return must use BX LR, not BX PC [OK]
Hint: Return with BX LR, not BX PC [OK]
Common Mistakes:
Using BX PC to return from subroutine
Ignoring the link register usage
Assuming BL needs no label
5. You want to call two subroutines in sequence using BL instructions. Which sequence correctly preserves the return addresses so both subroutines return properly?
hard
A. Use BL to first subroutine, then BL to second subroutine inside the first subroutine before returning.
B. Use BL to first subroutine, then BL to second subroutine without returning from the first.
C. Use two BL instructions one after another without returning in between.
D. Use BX LR to call subroutines instead of BL.
Solution
Step 1: Understand BL saves return address in LR
Each BL saves the return address in LR, so calling BL twice in a row overwrites LR.
Step 2: Preserve return addresses by nesting calls
Calling the second BL inside the first subroutine preserves the first return address until both return.
Step 3: Avoid overwriting LR by sequential BL calls without return
Calling BL twice in sequence without returning overwrites LR, losing the first return address.
Final Answer:
Use BL to first subroutine, then BL to second subroutine inside the first subroutine before returning. -> Option A
Quick Check:
Nest BL calls to preserve return addresses [OK]
Hint: Nest BL calls to keep return addresses safe [OK]
Common Mistakes:
Calling BL twice in a row without nesting
Using BX LR to call subroutines
Ignoring LR overwrite on multiple BL calls
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.