Bird
Raised Fist0
ARM Architectureknowledge~20 mins

Branch instruction (B) in ARM Architecture - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
ARM Branch Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding the basic function of the B instruction
What is the primary purpose of the ARM B (Branch) instruction?
ATo perform an arithmetic operation
BTo load data from memory into a register
CTo store data from a register into memory
DTo jump to a different address unconditionally
Attempts:
2 left
💡 Hint
Think about what 'branch' means in programming.
📋 Factual
intermediate
2:00remaining
Range of the Branch instruction offset
What is the maximum range (in bytes) that the ARM B instruction can branch to using its 24-bit signed offset?
A±32 MB
B±16 MB
C±8 MB
D±4 MB
Attempts:
2 left
💡 Hint
Consider that the offset is 24 bits and is shifted left by 2 bits.
🔍 Analysis
advanced
2:00remaining
Effect of B instruction on the program counter
Given the ARM instruction B label, what happens to the program counter (PC) after this instruction executes?
APC is set to the address of <code>label</code>, and execution continues from there
BPC increments by 4 and continues sequentially
CPC is set to the address of <code>label</code> plus 4 bytes
DPC remains unchanged
Attempts:
2 left
💡 Hint
The branch instruction changes where the CPU fetches the next instruction.
❓ Comparison
advanced
2:00remaining
Difference between B and BL instructions
Which statement correctly describes the difference between the ARM B and BL instructions?
AB branches unconditionally; BL branches conditionally
BB branches and saves return address; BL only branches
CB branches unconditionally; BL branches and saves return address in LR
DB branches conditionally; BL branches unconditionally
Attempts:
2 left
💡 Hint
Consider what 'BL' stands for and what it does with the link register.
❓ Reasoning
expert
2:00remaining
Predicting the outcome of a branch with an invalid offset
If an ARM B instruction is encoded with an offset that exceeds its 24-bit signed range, what will happen when the CPU executes it?
AThe CPU will raise a hardware exception immediately
BThe CPU will branch to an incorrect address causing unpredictable behavior
CThe instruction will be ignored and execution continues sequentially
DThe CPU will branch to the nearest valid address within range
Attempts:
2 left
💡 Hint
Think about how the CPU interprets the offset bits in the instruction.

Practice

(1/5)
1. What does the ARM B instruction do in a program?
easy
A. It adds two numbers and stores the result.
B. It jumps to a specified label to change the flow of execution.
C. It loads data from memory into a register.
D. It compares two values and sets flags.

Solution

  1. Step 1: Understand the purpose of the B instruction

    The B instruction is used to jump to a different part of the program, identified by a label.
  2. Step 2: Compare with other instructions

    Other instructions like add, load, or compare do not change program flow by jumping.
  3. Final Answer:

    It jumps to a specified label to change the flow of execution. -> Option B
  4. Quick Check:

    Branch (B) = Jump to label [OK]
Hint: B means Branch: jump to a label in code [OK]
Common Mistakes:
  • Confusing B with arithmetic instructions
  • Thinking B loads or stores data
  • Assuming B compares values
2. Which of the following is the correct syntax for a branch instruction in ARM assembly?
easy
A. B label
B. branch to label
C. jmp label
D. goto label

Solution

  1. Step 1: Recall ARM branch syntax

    ARM uses the instruction B followed by the label name to branch.
  2. Step 2: Eliminate incorrect syntax

    Instructions like 'branch to', 'jmp', or 'goto' are not valid ARM syntax.
  3. Final Answer:

    B label -> Option A
  4. Quick Check:

    Correct syntax = B label [OK]
Hint: Branch uses 'B' followed by label name [OK]
Common Mistakes:
  • Using non-ARM keywords like 'jmp' or 'goto'
  • Writing full words instead of 'B'
  • Omitting the label after B
3. Given the following ARM assembly code snippet, what will be the value in register r0 after execution?
B skip
MOV r0, #1
skip:
MOV r0, #5
medium
A. 5
B. 1
C. 0
D. Undefined

Solution

  1. Step 1: Analyze the branch instruction

    The instruction B skip jumps over the MOV r0, #1 line directly to the label skip.
  2. Step 2: Determine which MOV executes

    Since the jump skips the first MOV, only MOV r0, #5 runs, setting r0 to 5.
  3. Final Answer:

    5 -> Option A
  4. Quick Check:

    Branch skips first MOV, r0 = 5 [OK]
Hint: Branch skips code, so last MOV sets r0 [OK]
Common Mistakes:
  • Ignoring the branch and thinking both MOV run
  • Assuming r0 stays 0 by default
  • Confusing label position
4. Identify the error in this ARM assembly code snippet:
B 100
MOV r0, #10
100:
MOV r1, #20
medium
A. MOV instructions cannot use immediate values.
B. The branch instruction must be 'BR' instead of 'B'.
C. There is no error; the code is correct.
D. Label '100' is invalid because it starts with a number.

Solution

  1. Step 1: Check label naming rules

    Labels in ARM assembly cannot start with a digit; '100' is invalid.
  2. Step 2: Verify branch and MOV syntax

    The branch instruction 'B' is correct, and MOV can use immediate values like #10.
  3. Final Answer:

    Label '100' is invalid because it starts with a number. -> Option D
  4. Quick Check:

    Labels cannot start with digits [OK]
Hint: Labels must start with a letter, not a number [OK]
Common Mistakes:
  • Thinking 'B' is wrong branch syntax
  • Believing MOV can't use immediate values
  • Assuming numeric labels are allowed
5. You want to create a loop in ARM assembly that repeats 3 times using the branch instruction B. Which approach correctly uses B to implement this loop?
hard
A. Use B with labels named as numbers only.
B. Use multiple unconditional branches without a counter.
C. Use a counter register, decrement it, and branch back if not zero.
D. Use B to jump forward only, no looping possible.

Solution

  1. Step 1: Understand loop control with branch

    Loops require a way to repeat code, usually by checking a counter and branching back if needed.
  2. Step 2: Evaluate options for looping

    Using a counter register and branching back when not zero is the standard method. Branching forward only or using invalid labels won't create a loop.
  3. Final Answer:

    Use a counter register, decrement it, and branch back if not zero. -> Option C
  4. Quick Check:

    Loop = counter + branch back [OK]
Hint: Loop needs counter and branch back to label [OK]
Common Mistakes:
  • Trying to loop without a counter
  • Using only forward branches
  • Using invalid label names for loops
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