Download 2-ARMControlStructures 889KB Jan 24

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
ARM Control Structures
Branch
• B identifier
Branch (jump) to given identifier
Branch Instruction Format
• Branch instruction format:
– 24 bit immediate
110101110010001001101001
– Shifted left 2 bits to make 26 bit value
11010111001000100110100100
– Sign extended to 32 bits
11111111010111001000100110100100
Branch Instruction Format
• Branch instruction format:
– 24 bit immediate
110101110010001001101001
– Shifted left 2 bits to make 26 bit value
11010111001000100110100100
– Sign extended to 32 bits
11111111010111001000100110100100
– Signed 26 bit value to be added to PC
• +/- 32Mbytes
Status Register
• CPSR register
Tracks state of processor, recent instructions
Setting Status
• CMP : Compare
CMP rn, #___
CMP rn, rm
Set status register based on op1 – op2
Other Comparisons
• CMN : Compare Negative
CMN op1, op2
Set status register based on op1 + op2
• TST : Test bits
TST op1, op2
Set status register based on op1 AND op2
Does not set Carry or oVerflow bits
• TEQ : Test equal
TEQ op1, op2
Set status register based on op1 XOR op2
Does not set Carry or oVerflow bits
Conditional Branches
• BEQ identifier : Branch on equal
– Status register determines if branch taken
Conditional Branches
• Branch options
Most
Common
If
• Assembly if’s are “backwards”
High Level
Assembly
if(i == j) {
k = 1;
}
…
Branch to cont if r1 != r2
r3 = 1
cont: ….
If
• If implemented with branch:
– Skip ahead if NOT doing if body
If / Else
• If/Else implemented with branch:
– Branch to skip if body for else case
– If body ends with jump to skip else body
High Level
Assembly
if(i == j) {
k = 1;
}
else {
k = 2;
}
…
Branch to else if r1 != r2
r3 = 1
jump to endif
else:
r3 = 2
endif:
…
If / Else
• If/Else implemented with branch:
– Branch to skip if body for else case
– If body ends with jump to skip else body
Loop = jump backwards
Loop = jump backwards
int i = 0;
while(i < 10) {
//do stuff
i++;
}
Counting Loop
• Test jumps to end when done
• End branches back to test
Real Code Counting Loop
• Naïve loop implementation :
– 4 instructions / iteration
Real Code Counting Loop
• Compilers usually move test to end of loop
– Start by jumping to test
– 3 instructions / iteration
Sum
• Sum 0…10
ARM Specific Tricks:
Set Bits &
Conditional Execution
Condition Bits
ARM instructions feature 4 condition bits:
Condition Bits
• Lots of instructions
start with E
Condition Bits
• Specify condition to
execute instruction under
Condition Bits
• E = 1110
Always execute
Conditional Execution
• Apply conditions to most instructions
Condtional Without Branch
• Can implement if/else
as conditional instructions
Setting Flags
Fun Fact
• CMP, CMN, TST, TEQ set status register
Setting Flags
Fun Fact
• CMP, CMN, TST, TEQ set status register
• Data instructions can do so optionally
instructionS = Set status
Status Flag If
• If with CMP & conditional execution:
Fun Fact
Status Flag If
Fun Fact
• Setting status with subtraction instead:
Status Flag If
• Loop using set flags:
Fun Fact