General purpose registers hold data and addresses that the processor uses to perform tasks quickly. They help the CPU work efficiently by storing temporary information.
General purpose registers (R0-R12) in ARM Architecture
R0, R1, R2, ..., R12
Registers R0 to R12 are used for general tasks and can hold any data the program needs.
They are 32-bit wide in ARM architecture, meaning they can store 32-bit numbers.
MOV R0, #5ADD R1, R0, R2
STR R3, [R4]
This program puts 10 into R0, 20 into R1, then adds them and stores the result in R2.
MOV R0, #10 MOV R1, #20 ADD R2, R0, R1
Registers R0 to R12 are volatile, meaning their values can change during function calls unless saved.
R13, R14, and R15 have special uses (stack pointer, link register, program counter) and are not general purpose.
R0 to R12 are general purpose registers used to hold data and addresses.
They help the CPU perform calculations and manage data quickly.
Understanding how to use these registers is key to programming in ARM assembly.
Practice
Solution
Step 1: Identify general purpose registers in ARM
Registers R0 through R12 are used for general data storage and manipulation.Step 2: Differentiate special registers
Registers R13 to R15 and others like Program Counter are special purpose, not general.Final Answer:
R0 to R12 -> Option AQuick Check:
General purpose registers = R0-R12 [OK]
- Confusing R13-R15 as general purpose
- Including special registers like Program Counter
- Thinking floating point registers are general purpose
Solution
Step 1: Understand register numbering
Registers start at R0, so the 1st is R0, 2nd is R1, and so on.Step 2: Count to the 5th register
Counting from R0: R0(1), R1(2), R2(3), R3(4), R4(5). So the 5th register is R4.Step 3: Verify options
R5 is R5, which is actually the 6th register, so the correct is R4 (R4).Final Answer:
R4 -> Option CQuick Check:
5th register = R4 [OK]
- Starting count from R1 instead of R0
- Mixing register numbers with their positions
- Choosing R5 thinking it is the 5th register
MOV R0, #10
ADD R1, R0, #5
SUB R2, R1, R0What is the final value stored in register R2?
Solution
Step 1: Execute MOV and ADD instructions
MOV R0, #10 sets R0 = 10. ADD R1, R0, #5 sets R1 = 10 + 5 = 15.Step 2: Execute SUB instruction
SUB R2, R1, R0 sets R2 = 15 - 10 = 5.Final Answer:
5 -> Option AQuick Check:
R2 = R1 - R0 = 15 - 10 = 5 [OK]
- Mixing up source and destination registers
- Forgetting immediate values in ADD
- Assuming R2 equals R1 or R0 directly
MOV R13, #20
ADD R0, R13, #5What is the issue?
Solution
Step 1: Check register usage
R13 is the stack pointer, a special purpose register, not general purpose.Step 2: Validate instruction correctness
Using R13 like a general purpose register is incorrect; MOV and ADD with immediate values are valid.Final Answer:
R13 is not a general purpose register and should not be used like this -> Option DQuick Check:
R13 is special purpose, not general [OK]
- Assuming R13 is general purpose
- Thinking immediate values are invalid
- Believing ADD can't use immediate values
Solution
Step 1: Save R2 value temporarily
MOV R0, R2 stores R2's value in R0 to keep it safe.Step 2: Move R3 value to R2
MOV R2, R3 copies R3's value into R2, overwriting original R2.Step 3: Restore original R2 value to R3
MOV R3, R0 moves saved R2 value from R0 into R3, completing the swap.Final Answer:
MOV R0, R2; MOV R2, R3; MOV R3, R0 -> Option BQuick Check:
Use temp register R0 to swap R2 and R3 [OK]
- Overwriting R2 before saving it
- Swapping without a temporary register
- Mixing source and destination registers
Ready to prove it?
Pass the test and this pattern moves unknown
