ARM ISA Review
ARM ISA Review
039v12 1
Raspberry Pi
▪ Based on ARM11 (ARMv6) Broadcom BCM2835/BCM2836.
▪ Low Power ARM1176JZ-F Applications Processor
▪ ARM11 is the processor integrated in the first iPhone (also in
iPhone 3G).
039v12 2
Raspberry Pi 2
▪ ARM Cortex A7
▪ 900 MHZ quad-core
▪ 1GB RAM
▪ mid-range smartphones
▪ 4 USB ports
▪ 40 GPIO pins
▪ Full HDMI port
▪ Ethernet port
▪ Combined 3.5mm audio jack and composite video
▪ Camera interface (CSI)
▪ Display interface (DSI)
▪ Micro SD card slot
▪ VideoCore IV 3D graphics core
039v12 3
Raspberry Pi 3
039v12 4
Devices with Cortex-A53
Samsung
Galaxy Tab A Huawei
10.1 Nova
Plus
EgoIggo S95X smart TV set of
box
039v12 5
Data Sizes and Instruction Sets
▪ The ARM is a 32-bit, Load-Store RISC architecture.
6
Processor Modes
▪ The ARM has seven basic operating modes, used to run user tasks, an operating
system, and to efficiently handle exceptions such as interrupts:
7
The ARM Register Set
10000 10010 10001 11011 10111 10011
User mode IRQ FIQ Undef Abort SVC
r0
r1 ARM has 37 registers, all 32-bits long
r2
r3 - A subset of these registers is accessible in each
r4 mode and does not have to be preserved
r5 - Note: System mode uses the User mode
r6 register set.
r7
r8 r8
r9 r9
r10 r10
r11 r11
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
Current mode Banked out registers
8
Program Status Registers
31 28 27 24 23 16 15 8 7 6 5 4 0
N Z C V Q J U n d e f i n e d I F T mode
f s x c
039v12 9
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)
039v12 10
Conditional Execution (predicated inst.)
▪ ARM instructions can be made to execute conditionally by postfixing them with the
appropriate condition code field.
▪ This improves code density and performance by reducing the number of
forward branch instructions.
CMP r3,#0 CMP r3,#0
BEQ skip ADDNE r0,r1,r2
ADD r0,r1,r2
skip
▪ By default, data processing instructions do not affect the condition code flags but
the flags can be optionally set by using “S”. CMP does not need “S”.
loop
…
SUBS r1,r1,#1 decrement r1 and set flags
BNE loop if Z flag clear then branch
11
Condition Codes
Mnemonic Meaning
{cond}
EQ (equal) When Z is enabled (Z is 1)
NE (not equal). When Z is disabled. (Z is 0)
GE (greater or equal than, in two’s complement). When both V and N are
enabled or disabled (V is N)
LT (lower than, in two’s complement). This is the opposite of GE, so when V and
N are not both enabled or disabled (V is not N)
GT (greather than, in two’s complement). When Z is disabled and N and V are
both enabled or disabled (Z is 0, N is V)
LE (lower or equal than, in two’s complement). When Z is enabled or if not that,
N and V are both enabled or disabled (Z is 1. If Z is not 1 then N is V)
MI (minus/negative) When N is enabled (N is 1)
PL (plus/positive or zero) When N is disabled (N is 0)
VS (overflow set) When V is enabled (V is 1)
VC (overflow clear) When V is disabled (V is 0)
HI (higher) When C is enabled and Z is disabled (C is 1 and Z is 0)
LS (lower or same) When C is disabled or Z is enabled (C is 0 or Z is 1)
CS/HS (carry set/higher or same) When C is enabled (C is 1)
CS/HS (carry set/higher or same) When C is enabled (C is 1)
CC/LO (carry clear/lower) When C is disabled (C is 0)
cmp
Update status register
inst{s}: adds, subs, ands, …
Brach (b) cond. b{cond}: beq, bne, bgt, ble …
Instruction cond. inst{cond}: addeq, subne, ldrgt, …
12
Conditional execution examples
▪ 5 instructions ▪ 3 instructions
▪ 5 words ▪ 3 words
▪ 5 or 6 cycles ▪ 3 cycles
13
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:
Immediate value
▪ 8 bit number, with a range of 0-
255.
ALU
▪ Rotated right through even
number of positions
▪ Allows increased range of 32-bit
Result constants to be loaded directly into
registers
15
Immediate constants
19
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
20
Address accessed
21
Load/Store Exercise
Assume an array of 25 words. A compiler associates
y with r1. Assume that the base address for the
array is located in r2. Translate this C
statement/assignment using just three instructions:
array[10] = array[5] + y;
22
Load/Store Exercise Solution
array[10] = array[5] + y;
23
Load and Store Multiples
▪ Syntax:
▪ <LDM|STM>{<cond>}<addressing_mode> Rb{!}, <register list>
▪ 4 addressing modes:
▪ LDMIA / STMIA increment after
▪ LDMIB / STMIB increment before
▪ LDMDA / STMDA decrement after
▪ LDMDB / STMDB decrement before
IA IB DA DB
LDMxx r10, {r0,r1,r4} r4
STMxx r10, {r0,r1,r4}
r4 r1
r1 r0 Increasing
Base Register (Rb) r10 r0 r4 Address
r1 r4
r0 r1
r0
24
Multiply and Divide
▪ There are 2 classes of multiply - producing 32-bit and 64-bit results
▪ 32-bit versions on an ARM7TDMI will execute in 2 - 5 cycles
25
Branch instructions
▪ Branch : B{<cond>} label
▪ Branch with Link : BL{<cond>} subroutine_label
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?
26
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
push{regs,lr} push{regs}
:
: :
:
BL func2 :
BL func1
: :
:
pop{regs,lr} pop{regs}
:
BX lr BX lr
039v12 27
Register Usage
Register
Arguments into function The compiler has a set of rules known as a
r0 Procedure Call Standard that determine how to
Result(s) from function r1
otherwise corruptible pass parameters to a function (see AAPCS)
r2
(Additional parameters r3
passed on stack) CPSR flags may be corrupted by function call.
Assembler code which links with compiled code
r4 must follow the AAPCS at external interfaces
r5
r6 The AAPCS is part of the new ABI for the ARM
Register variables r7 Architecture
Must be preserved r8
r9/sb - Stack base
r10/sl - Stack limit if software stack checking selected
r11
28
PSR access
31 28 27 24 23 19 16 15 10 9 8 7 6 5 4 0
▪ In User Mode, all bits can be read but only the condition flags (_f) can be modified
29
Addressing modes
039v12 30
ARM assembly language
039v12 31
ARM vs MIPS
039v12 32
Examples: MIPS vs ARM
lw $1, dato($0) ldr r2, =dato // cargar dirección de dato en r2
ldr r1, [r2] // cargar dir de mem apuntada por r2 en r1
sll $1, $2, 4 mov r1, r2, LSL #4 // desplazamiento lógico a izq. 4 bits de r2 a r1
sra $1, $2, 2 mov r1, r2, ASR #2 // desplazamiento aritmético a drch.2 bits de r2 a r1
srl $1, $2, 2 mov r1, r2, LSR #2 // desplazamiento lógico a drch. 2 bits de r2 a r1
// r1 ← r1 + (r1 << 1) = 3*r1 (multiplicar por 3)
add r1, r1, r1,LSL #1
j dir b dir // salta a la dirección dir
jal fun bl fun // salta a fun y guarda dir. sig. instrc. en reg. lr
beq $1, $2, dir cmp r1, r2 // compara r1 y r2 (r1-r2) cargando flag Z.
(bne) beq dir // mira flag Z, si Z=1 salta
// (mira flag Z, si Z=0 salta)
(bne)
039v12 33
Other examples of ARM vs. MIPS
Stack management
addi $sp, $sp, -4 push {lr} // salvar contenido de un registro (lr) en pila. Se
sw $ra, 0($sp) pueden almacenar varios a la vez {r1, r2, r3, r4}
addi $8, $8, -1 adds r8, r8, #-1 // decrementa r8 y guarda estado en flags (Z)
beq $8, $0, exit beq exit // mira flag Z, si Z=1 salta (Z cargado en adds)
039v12 34
Summary
039v12 35