Bird
Raised Fist0
ARM Architectureknowledge~5 mins

Program counter (R15/PC) in ARM Architecture - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Program Counter (PC) in ARM architecture?
The Program Counter (PC), also known as R15, is a special register that holds the address of the next instruction to be executed in the program.
Click to reveal answer
beginner
Why is the Program Counter called R15 in ARM?
In ARM architecture, registers are named R0 to R15. The Program Counter is assigned the number 15, so it is called R15.
Click to reveal answer
beginner
How does the Program Counter (PC) change during program execution?
The PC automatically updates to point to the next instruction after each instruction is executed, usually by increasing its value to the next memory address.
Click to reveal answer
intermediate
Can the Program Counter (R15) be used like a general-purpose register in ARM?
No, the Program Counter is special and controls program flow. Although it can be read or written in some instructions, it mainly manages which instruction runs next.
Click to reveal answer
intermediate
What happens if the Program Counter (PC) is changed manually during execution?
Changing the PC manually causes the program to jump to a different instruction address, which is how branches and jumps are implemented in ARM.
Click to reveal answer
What does the Program Counter (R15) hold in ARM architecture?
AStack pointer address
BCurrent instruction data
CAddress of the next instruction
DGeneral-purpose data
Which register number corresponds to the Program Counter in ARM?
AR15
BR7
CR13
DR0
What happens when the Program Counter is manually changed during execution?
ARegisters reset to zero
BProgram continues sequentially
CProgram halts immediately
DProgram jumps to a new instruction address
Is the Program Counter used as a general-purpose register in ARM?
AYes, always
BNo, it is special for program flow
COnly in ARMv7
DOnly during interrupts
How does the Program Counter update after executing an instruction?
AIt increases to the next instruction address
BIt stays the same
CIt decreases by 4
DIt resets to zero
Explain the role of the Program Counter (R15) in ARM architecture.
Think about how the CPU knows which instruction to run next.
You got /4 concepts.
    Describe what happens when the Program Counter is changed manually during program execution.
    Consider how programs make decisions or loops.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the primary role of the Program Counter (PC) in ARM architecture?
      easy
      A. It holds the address of the next instruction to execute.
      B. It stores the result of arithmetic operations.
      C. It manages input/output operations.
      D. It controls the power management of the processor.

      Solution

      1. Step 1: Understand the function of PC

        The Program Counter (PC) is a special register that keeps track of the address of the next instruction to be executed in the program.
      2. Step 2: Compare with other options

        Other options describe functions of different registers or components, not the PC.
      3. Final Answer:

        It holds the address of the next instruction to execute. -> Option A
      4. Quick Check:

        PC = Next instruction address [OK]
      Hint: PC always points to the next instruction address [OK]
      Common Mistakes:
      • Confusing PC with general-purpose registers
      • Thinking PC stores data instead of addresses
      • Mixing PC role with I/O or power control
      2. Which register number corresponds to the Program Counter (PC) in ARM processors?
      easy
      A. R14
      B. R13
      C. R15
      D. R12

      Solution

      1. Step 1: Recall ARM register naming

        In ARM architecture, the Program Counter is known as register R15.
      2. Step 2: Verify other register roles

        R14 is the Link Register, R13 is the Stack Pointer, and R12 is a general-purpose register.
      3. Final Answer:

        R15 -> Option C
      4. Quick Check:

        PC = R15 [OK]
      Hint: PC is always R15 in ARM [OK]
      Common Mistakes:
      • Confusing PC with Link Register (R14)
      • Mixing up Stack Pointer (R13) with PC
      • Assuming PC is a general-purpose register
      3. Consider this ARM assembly snippet:
      ADD R0, R0, #4
      MOV PC, R0

      What happens when the MOV PC, R0 instruction executes?
      medium
      A. The program jumps to the address stored in R0.
      B. The value in R0 is added to the PC without changing flow.
      C. The PC is set to zero, causing a reset.
      D. The instruction causes a syntax error.

      Solution

      1. Step 1: Understand MOV PC, R0

        Moving a value into PC changes the program flow to the address in R0, causing a jump.
      2. Step 2: Analyze the ADD instruction

        ADD R0, R0, #4 increments R0 by 4, so PC will jump to this new address.
      3. Final Answer:

        The program jumps to the address stored in R0. -> Option A
      4. Quick Check:

        Setting PC = R0 causes jump [OK]
      Hint: MOV to PC changes program flow to that address [OK]
      Common Mistakes:
      • Thinking MOV PC,R0 just copies value without jump
      • Assuming PC increments automatically ignoring MOV
      • Believing MOV PC,R0 causes error
      4. Identify the error in this ARM assembly code snippet:
      MOV PC, #1000

      What is wrong with this instruction?
      medium
      A. The immediate value #1000 is too large for MOV instruction.
      B. You cannot move an immediate value directly into PC.
      C. PC cannot be used as a destination register.
      D. MOV instruction requires two registers, not immediate values.

      Solution

      1. Step 1: Understand MOV limitations with PC

        In ARM, you cannot move an immediate value directly into PC; it must come from a register.
      2. Step 2: Check other options

        PC can be destination, MOV can use immediate but not directly to PC, and #1000 size is not the main issue here.
      3. Final Answer:

        You cannot move an immediate value directly into PC. -> Option B
      4. Quick Check:

        Immediate to PC invalid [OK]
      Hint: MOV immediate to PC is invalid; use register first [OK]
      Common Mistakes:
      • Trying to load PC directly with immediate values
      • Confusing PC with general-purpose registers
      • Assuming MOV always accepts immediate to any register
      5. In ARM assembly, how can you implement a conditional jump to address stored in R4 only if R1 equals zero, using the Program Counter (PC)?
      hard
      A. Use JMP R4 if R1 equals zero.
      B. Use BEQ R4 to jump if R1 is zero.
      C. Use MOV PC, R4 unconditionally after checking R1.
      D. Use CMP R1, #0 followed by MOVEQ PC, R4.

      Solution

      1. Step 1: Compare R1 with zero

        The CMP R1, #0 instruction sets condition flags based on R1's value.
      2. Step 2: Use conditional move to PC

        MOVEQ PC, R4 moves R4 into PC only if the zero flag is set (R1 == 0), causing a conditional jump.
      3. Final Answer:

        Use CMP R1, #0 followed by MOVEQ PC, R4. -> Option D
      4. Quick Check:

        Conditional MOV to PC enables jump [OK]
      Hint: Use CMP then conditional MOV to PC for jumps [OK]
      Common Mistakes:
      • Using BEQ with a register operand (invalid syntax)
      • Unconditionally moving PC ignoring condition
      • Using JMP which is not an ARM instruction
      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