Program Status Register (PSR) in ARM Architecture - Time & Space Complexity
We want to understand how the time to access or update the Program Status Register (PSR) changes as the program runs.
Specifically, how does the cost of reading or modifying the PSR grow with program instructions?
Analyze the time complexity of reading and updating the PSR in ARM assembly.
MRS R0, CPSR // Move current PSR to register R0
ORR R0, R0, #0x80 // Set interrupt disable bit
MSR CPSR_c, R0 // Write back to PSR control field
This code reads the current PSR, modifies a bit, and writes it back.
Look for instructions that repeat or dominate execution time.
- Primary operation: Single read-modify-write sequence on PSR.
- How many times: Each instruction runs once per execution.
The time to read and update the PSR does not depend on input size but on instruction count.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 3 instructions |
| 100 | 3 instructions |
| 1000 | 3 instructions |
Pattern observation: The number of operations stays the same regardless of input size.
Time Complexity: O(1)
This means reading or updating the PSR takes a constant amount of time no matter how big the program or input is.
[X] Wrong: "Updating the PSR takes longer if the program has more instructions or data."
[OK] Correct: The PSR is a special register accessed by fixed instructions that always take the same time, independent of program size.
Understanding constant-time operations like PSR access shows you know how hardware-level instructions behave, which is useful for low-level programming and optimization.
"What if we had to update the PSR inside a loop that runs n times? How would the time complexity change?"
Practice
Program Status Register (PSR) in ARM architecture?Solution
Step 1: Understand the role of PSR
The PSR contains flags like zero, carry, negative, and overflow that reflect the outcome of arithmetic or logical operations.Step 2: Identify PSR's control function
It also controls processor modes such as user mode or interrupt mode, affecting how the processor behaves.Final Answer:
To hold flags that indicate the results of operations and control processor modes -> Option AQuick Check:
PSR = Flags + Mode Control [OK]
- Confusing PSR with program counter
- Thinking PSR manages memory
- Assuming PSR handles I/O directly
Solution
Step 1: Identify condition flags in PSR
The condition flags in PSR are Negative (N), Zero (Z), Carry (C), and Overflow (V).Step 2: Eliminate unrelated registers and modes
PC, LR, SP are registers, not flags; IRQ, FIQ, SVC are interrupt modes; R0-R2 are general-purpose registers.Final Answer:
N, Z, C, V -> Option DQuick Check:
Flags = N, Z, C, V [OK]
- Mixing registers with flags
- Confusing interrupt modes with flags
- Using general-purpose registers as flags
ADD R0, R1, R2 CMP R0, #0
What will the Zero (Z) flag in the PSR be if the result in R0 is zero?
Solution
Step 1: Understand the CMP instruction effect
CMP compares R0 with zero and sets the Zero flag if R0 equals zero.Step 2: Analyze the Zero flag behavior
If R0 is zero, the Zero flag (Z) is set to 1 to indicate equality.Final Answer:
Set to 1 -> Option CQuick Check:
R0 == 0 -> Z = 1 [OK]
- Assuming Z flag clears on zero result
- Confusing CMP with ADD effect on flags
- Thinking flags remain unchanged
ADD R0, R1, R2
but the flags are not updated. What is the likely cause?
Solution
Step 1: Check instruction syntax for flag update
In ARM, to update PSR flags after arithmetic, the instruction must include the 'S' suffix (e.g., ADDS) to set flags.Step 2: Understand default behavior without 'S'
Without 'S', the instruction performs addition but does not update the condition flags in PSR.Final Answer:
The instruction should beADD{S} R0, R1, R2to update flags -> Option BQuick Check:
Use ADDS to update PSR flags [OK]
- Thinking PSR is read-only
- Assuming all ADD update flags by default
- Blaming invalid registers
error_handler only if the Negative (N) flag in the PSR is set after a subtraction. Which instruction correctly checks this condition?Solution
Step 1: Understand the meaning of condition codes
BNE branches if Zero flag is clear; BEQ if Zero flag is set; BVS if Overflow flag is set; BMI if Negative flag is set.Step 2: Match Negative flag condition to branch
Since we want to branch when Negative flag (N) is set, the correct instruction is BMI (Branch if Minus).Final Answer:
BMI error_handler -> Option AQuick Check:
Negative flag set -> use BMI [OK]
- Using BNE or BEQ which check Zero flag
- Confusing Overflow flag with Negative flag
- Choosing BVS which checks Overflow
Ready to prove it?
Pass the test and this pattern moves unknown
