3 ARM Processor
3 ARM Processor
ARM Ltd
• Founded in November 1990
– Spun out of Acorn Computers
cpsr
spsr spsr spsr spsr spsr spsr
User
Register Organization Summary
FIQ IRQ SVC Undef Abort
r0
r1
User
r2 mode
r3 r0-r7,
r4 r15, User User User User
r5 and mode mode mode mode Thumb state
cpsr r0-r12, r0-r12, r0-r12, r0-r12,
r6
r15, r15, r15, r15,
Low registers
r7 and and and and
r8 r8 cpsr cpsr cpsr cpsr
r9 r9
r10 r10 Thumb state
r11 r11 High registers
r12 r12
r13 (sp) r13 (sp) r13 (sp) r13 (sp) r13 (sp) r13 (sp)
r14 (lr) r14 (lr) r14 (lr) r14 (lr) r14 (lr) r14 (lr)
r15 (pc)
cpsr
spsr spsr spsr spsr spsr
NZCVQ J U n d e f i n e d I F T mode
f s x c
• Condition code flags • Interrupt Disable bits.
– N = Negative result from ALU – I = 1: Disables the IRQ.
– Z = Zero result from ALU – F = 1: Disables the FIQ.
– C = ALU operation Carried out
– V = ALU operation oVerflowed • T Bit
– Architecture xT only
• Sticky Overflow flag - Q flag – T = 0: Processor in ARM state
– Architecture 5TE/J only – T = 1: Processor in Thumb state
– Indicates if saturation has occurred
• Mode bits
• J bit – Specify the processor mode
– Architecture 5TEJ only
– J = 1: Processor in Jazelle state
Program Counter (r15)
• When the processor is executing in ARM state:
– All instructions are 32 bits wide
– All instructions must be word aligned
– Therefore the pc value is stored in bits [31:2] with bits [1:0] undefined (as
instruction cannot be halfword or byte aligned).
• The possible
Suffix condition
Description codes Flags
are tested
listed below:
EQ Equal Z=1
• Note ALNE is the default
Not equal and does not
Z=0need to be
specified
CS/HS Unsigned higher or same
C=1
CC/LO Unsigned lower C=0
MI Minus N=1
PL Positive or Zero N=0
VS Overflow V=1
VC No overflow V=0
HI Unsigned higher C=1 & Z=0
LS Unsigned lower or sameC=0 or Z=1
GE Greater or equal N=V
LT Less than N!=V
GT Greater than Z=0 & N=V
LE Less than or equal Z=1 or N=!V
AL Always
Examples of conditional execution
• Use a sequence of several conditional instructions
if (a==0) func(1);
CMP r0,#0
MOVEQ r0,#1
BLEQ func
31 28 27 25 24 23 0
Cond 1 0 1 L Offset
• The processor core shifts the offset field left by 2 positions, sign-
extends it and adds it to the PC
– ± 32 Mbyte range
– How to perform longer branches?
Data processing Instructions
• Consist of :
– Arithmetic: ADD ADC SUB SBC RSB RSC
– Logical: AND ORR EOR BIC
– Comparisons: CMP CMN TST TEQ
– Data movement: MOV MVN
• Syntax:
CF Destination 0 Destination CF
Destination CF
Result
Immediate constants (1)
• No ARM instruction can contain a 32 bit immediate constant
– All ARM instructions are fixed as 32 bits long
• The data processing instruction format has 12 bits available for
operand2
11 8 7 0
rot immed_8
Quick Quiz:
x2
Shifter 0xe3a004ff
ROR MOV r0, #???
• 4 bit rotate value (0-15) is multiplied by two to give range 0-30 in steps
of 2
• Rule to remember is “8-bits shifted by an even number of bit positions”.
Immediate constants (2)
• 31
Examples:
ror #0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
range 0-0x000000ff step 0x00000001
• Cycle time
– Basic MUL instruction
• 2-5 cycles on ARM7TDMI
• 1-3 cycles on StrongARM/XScale
• 2 cycles on ARM9E/ARM102xE
– +1 cycle for ARM9TDMI (over ARM7TDMI)
– +1 cycle for accumulate (not on 9E though result delay is one cycle longer)
– +1 cycle for “long”
• Above are “general rules” - refer to the TRM for the core you are using for
the exact details
Single register data transfer
LDR STR Word
LDRB STRB Byte
LDRH STRH Halfword
LDRSB Signed byte load
LDRSH Signed halfword load
• Syntax:
– LDR{<cond>}{<size>} Rd, <address>
– STR{<cond>}{<size>} Rd, <address>
e.g. LDREQB
Address accessed
• Address accessed by LDR/STR is specified by a base register
plus an offset
• For word and unsigned byte accesses, offset can be
– An unsigned 12-bit immediate value (ie 0 - 4095 bytes).
LDR r0,[r1,#8]
Condition Field
• Causes an exception trap to the SWI hardware
vector
• The SWI handler can examine the SWI number to
decide what operation has been requested.
• By using the SWI mechanism, an operating system
can implement a set of privileged operations which
applications running in user mode can request.
• Syntax:
– SWI{<cond>} <SWI number>
31
PSR Transfer Instructions
28 27 24 23 16 15 8 7 6 5 4 0
NZCVQ J U n d e f i n e d I F T mode
f s x c
• MRS and MSR allow contents of CPSR / SPSR to be
transferred to / from a general purpose register.
• Syntax:
– MRS{<cond>} Rd,<psr> ; Rd = <psr>
where
– <psr> = CPSR or SPSR
– [_fields] = any combination of ‘fsxc’
• In User Mode, all bits can be read but only the condition flags
(_f) can be written.
ARM Branches and Subroutines
• B <label>
– PC relative. ±32 Mbyte range.
• BL <subroutine>
– Stores return address in LR
– Returning implemented by restoring the PC from LR
– For non-leaf functions, LR will have to be stacked
func1 func2
STMFD :
: sp!,{regs,lr}
:
: :
:
BL func1 BL func2
:
: :
:
: LDMFD
sp!,{regs,pc} MOV pc, lr
•
Thumb
Thumb is a 16-bit instruction set
– Optimised for code density from C code (~65% of ARM code size)
– Improved performance from narrow memory
– Subset of the functionality of the ARM instruction set
• Core has additional execution state - Thumb
– Switch between ARM and Thumb using BX instruction
31 0
ADDS r2,r2,#1
32-bit ARM Instruction
For most instructions generated by compiler:
Conditional execution is not used
Source and destination registers identical
Only Low registers used
Constants are of limited size
15 0 Inline barrel shifter not used
ADD r2,#1
16-bit Thumb Instruction
Example ARM-based System
Interrupt
Controller
Peripherals I/O
nIRQ nFIQ
ARM
Core
8 bit ROM