arm.ppt [modo de compatibilidad]homepage.cem.itesm.mx/carbajal/embeddedsystems/slides/arm...¾a...

164
ARM Architecture Cuauhtémoc Carbajal 29/01/2013

Upload: others

Post on 24-May-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

ARM Architecture

Cuauhtémoc Carbajal29/01/2013

Page 2: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

2

OutlineIntroduction

Programmers model

Instruction set

System design

Development tools

Page 3: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

3

OutlineIntroductionProgrammers model

Instruction set

System design

Development tools

Page 4: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

4

IntroductionThe first ARM processor was developed at AcornIn 1990, ARM stood for Acorn RISC MachineLater, ARM stood for Advanced RISC Machine

Perf

orm

ance

BBC

ARM

8-bit6052

32-bit

1982

CISC

1983

16-bit

1983 ~ present

Page 5: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

5

ARM Ltd (1)Founded in November 1990

Advanced RISC Machine LimitedSpun out of Acorn Computers12 employees in Cambridge, UK

The leading intellectual property (IP) providerhigh-performancelow-costpower-efficient RISC processorsPeripheralssystem-on-chip (SoC) designs.

Page 6: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

6

ARM Ltd (2)License IP to leading international electronics companies

semiconductor providersoriginal equipment manufacturers (OEM)

Develop technologies to assist with the design-in of the ARM architecture

Software toolsBoardsdebug hardwareapplication softwarebus architectures, peripherals etc

Page 7: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

7

ARM Ltd (3)Year 1999

182 million unit of ARM-based products were shipped

58% of all RISC shipment for the entire year

Year 2000414 million units of ARM-based products were shipped

77% of all RISC shipments for the entire year

Reference: Andrew Allison, Inside the New Computer Industry

Page 8: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

8

ARM Partnership Model

reference: http://www.intel.com/education/highered/modelcurriculum.htm

Global Partner Network provides a complete system and processor design

Page 9: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

9

Successful Story of ARMContinue to develop new technologies

Low power

High performance for embedded system

Market is readyEmbedded systems grow up dramatically

Ex: cell phone, PDA, portable multimedia player, …

Page 10: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

10

OutlineIntroduction

Programmers modelInstruction set

System design

Development tools

Page 11: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Development of the ARM Architecture

11

Page 12: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

12

Data Sizes and Instruction Sets

The ARM is a 32-bit architecture

When used in relation to the ARM:

Byte means 8 bits

Halfword means 16 bits (two bytes)

Word means 32 bits (four bytes)

Most ARM’s implement two instruction sets

32-bit ARM Instruction Set

16-bit Thumb Instruction Set

Jazelle cores: execute Java bytecode in hardware

Page 13: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

13

Processor Modes

The ARM has seven basic operating modes:User : unprivileged mode under which most tasks run

FIQ : entered when a high priority (fast) interrupt is raised

IRQ : entered when a low priority (normal) interrupt is raised

Supervisor : entered on reset and when a Software Interrupt instruction is executed

Abort : used to handle memory access violations

Undef : used to handle undefined instructions

System : privileged mode using the same registers as user mode

Page 14: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

14

ARM Registers (1)

r13_und r14_und r14_irq

r13_irq

SPSR_und

r14_abt r14_svc

user mode fiqmode

svcmode

abortmode

irqmode

undefinedmode

usable in user mode

privileged modes only

r13_abt r13_svc

r8_fiqr9_fiq

r10_fiqr11_fiq

SPSR_irq SPSR_abt SPSR_svc SPSR_fiqCPSR

r14_fiqr13_fiqr12_fiq

r0r1r2r3r4r5r6r7r8r9r10r11r12r13r14r15 (PC)

Page 15: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

15

ARM Registers (2)ARM has 37 registers all of which are 32-bits long

1 dedicated program counter

1 dedicated current program status register

5 dedicated saved program status registers

30 general purpose registers

The current processor mode governs which of several banks is accessibleEach mode can access

a particular set of r0-r12 registers

a particular r13 (the stack pointer, sp) and r14 (the link register, lr)

the program counter, r15 (pc)

the current program status register, cpsr

Privileged modes (except System) can also accessa particular spsr (saved program status register)

Page 16: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

16

Current Program Status Registers (CPSR)

• Hold information about the most recently performed ALU operation• Control the enabling and disabling of interrupts• Set the processor operating mode

Page 17: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Current Program Status Registers (CPSR)

17

Page 18: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

18

Program Counter (r15)

When the processor is executing in ARM state:

All instructions are 32 bits wideAll instructions must be word alignedThe PC value is stored in bits [31:2] with bits [1:0] undefined

Instructions cannot be halfword or byte aligned

Page 19: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

19

ARM Memory Organization

half-word4

word16

0123

4567

891011

byte0byte

12131415

16171819

20212223

byte1byte2

half-word14

byte3

byte6

address

bit 31 bit 0

half-word12

word8

Page 20: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

20

Big Endian and Little EndianBig endian

Little endian

Page 21: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

21

Exceptions

Exceptions are usually used to handle unexpected events which arise during the execution of a program

Page 22: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

22

Exception GroupsDirect effect of executing an instruction

SWIUndefined instructionsPrefetch aborts (memory fault occurring during fetch)

A side-effect of an instructionData abort (a memory fault during a load or store data access)

Exceptions generated externallyResetIRQFIQ

Page 23: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

23

Exception EntryChange to the corresponding mode

Save the address of the instruction following the exception instruction in r14 of the new mode (lr)Save the old value of CPSR in the SPSR of the new modeDisable IRQ

If the exception is a FIQ, disables further FIQ

Force PC to execute at the relevant vector address

Page 24: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

24

Exception ReturnAny modified user registers must be restored

Restore CPSR

Resume PC in the correct instruction stream

Page 25: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

ARM exceptions overview

25

Exception Priority 1 Return address Status Vector 2 Preferred return instruction

Reset 1 Not available Not available Base+0 Not available

Data Access Memory Abort (Data Abort)

2 R14_abt=PC+8 4 SPSR_abt=CPSR Base+16 SUBS PC,R14_abt,#8 8

Fast Interrupt (FIQ) 3 R14_fiq=PC+4 5 SPSR_fiq=CPSR Base+28 7 SUBS PC,R14_fiq,#4

Normal Interrupt (IRQ) 4 R14_irq=PC+4 5 SPSR_irq=CPSR Base+24 SUBS PC,R14_irq,#4

Instruction Fetch Memory Abort

(Prefetch Abort)5 R14_abt=PC+4 6 SPSR_abt=CPSR Base+12 SUBS PC,R14_abt,#4

Software Interrupt (SWI) 6

ARM state: R14_svc=PC+4

Thumb state: R14_svc=PC+2 6

SPSR_svc=CPSR Base+8 MOVS PC,R14_svc

Undefined Instruction 6

ARM state: R14_und=PC+4

Thumb state: R14_und=PC+2 6

SPSR_und=CPSR Base+4 MOVS PC,R14_und

Note 2: The normal vector base address is 0x00000000.

Page 26: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

26

Some Problem in Exception Return

“Restore CPSR” and “Resume PC” cannot be carried out independentlyRestore CPSR first

The r14 holding the return address is no longer accesable

Resume PC firstThe exception handler loses control of the instruction stream and cannot cause “Restore CPSR” to take place

Page 27: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

27

Solution IThe return address is in r14The “S” modifier after the opcode signifies the special form of the instruction

To return from a SWI or undefined instruction trap

MOVS pc, r14To return from an IRQ, FIQ or prefetch abort

SUBS pc, r14, #4Return one instruction early in order to execute the instruction that was usurped for the exception entry

To return from a data abort to retry the data access

SUBS pc, r14, #8

Page 28: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

28

Solution IIThe return address has been saved onto a stack

LDMFD r13!, {r0-r3,pc}^“^” indicates that this is a special form of the instruction

Page 29: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

29

Naming Rule of ARMARM {x} {y} {z} {T} {D} {M} {I} {E} {J} {F} {-S}

x: seriesy: memory management / protection unitz: cacheT: Thumb decoderD: JTAG debuggerM: fast multiplierI: support hardware debugE: enhance instructions (based on TDMI)J: JazelleF: vector floating point unitS: synthesiable, suitable for EDA tools

Page 30: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Development of the ARM Architecture

SA-110

ARM7TDMI

4T

1Halfword and signed halfword / byte support

System mode

Thumb instruction set

2

4

ARM9TDMI

SA-1110

ARM720T ARM940T

Improved ARM/Thumb Interworking

CLZ

5TE

Saturated maths

DSP multiply-accumulate instructions

XScale

ARM1020E

ARM9E-S

ARM966E-S

3

Early ARM architectures

ARM9EJ-S

5TEJ

ARM7EJ-S

ARM926EJ-S

Jazelle

Java bytecodeexecution

6

ARM1136EJ-S

ARM1026EJ-S

SIMD Instructions

Multi-processing

V6 Memory architecture (VMSA)

Unaligned data support

reference: http://www.intel.com/education/highered/modelcurriculum.htm

Page 31: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

31

OutlineIntroduction

Programmers model

Instruction setSystem design

Development tools

Page 32: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

32

Instruction SetThe ARM processor is very easy to program at the assembly level

In this part, we will

Look at ARM instruction set and assembly language programming at the user level

Page 33: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

33

Notable Features of ARM Instruction Set

The load-store architecture

3-address data processing instructions

Conditional execution of every instructionThe inclusion of every powerful load and store multiple register instructions

Single-cycle execution of all instruction

Open coprocessor instruction set extension

Page 34: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

34

Conditional Execution (1)One of the ARM's most interesting features is that each instruction is conditionally executedIn order to indicate the ARM's conditional mode to the assembler, all you have to do is to append the appropriate condition to a mnemonic

CMP r0, #5BEQ BYPASSADD r1, r1, r0SUB r1, r1, r2

BYPASS…

CMP r0, #5ADDNE r1, r1, r0SUBNE r1, r1, r2

Page 35: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

35

Conditional Execution (2)The conditional execution code is faster and smaller; if ((a==b) && (c==d)) e++;;; a is in register r0; b is in register r1; c is in register r2; d is in register r3; e is in register r4

CMP r0, r1CMPEQ r2, r3ADDEQ r4, r4, #1

Page 36: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

36

The ARM Condition Code Field

cond31 28 27 0

Every instruction is conditionally executed

Each of the 16 values of the condition field causes the instruction to be executed or skipped according to the values of the N, Z, C and V flags in the CPSR

N: Negative Z: Zero C: Carry V: oVerflow

Page 37: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

37

ARM Condition CodesOpco de[3 1 :2 8 ]

Mnemo ni cex tens i o n

Interpretat i o n Status f l ag s tate fo rex ecut i o n

0000 EQ Equal / equals zero Z set0001 NE Not equal Z clear0010 CS/HS Carry set / unsigned higher or same C set0011 CC/LO Carry clear / unsigned lower C clear0100 MI Minus / negative N set0101 PL Plus / positive or zero N clear0110 VS Overflow V set0111 VC No overflow V clear1000 HI Unsigned higher C set and Z clear1001 LS Unsigned lower or same C clear or Z set1010 GE Signed greater than or equal N equals V1011 LT Signed less than N is not equal to V1100 GT Signed greater than Z clear and N equals V1101 LE Signed less than or equal Z set or N is not equal to V1110 AL Always any1111 NV Never (do not use!) none

Page 38: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

38

Condition FieldIn ARM state, all instructions are conditionally executed according to the CPSR condition codes and the instruction’s condition field

Fifteen different conditions may be used

“Always” conditionDefault condition

May be omitted

“Never” conditionThe sixteen (1111) is reserved, and must not be used

May use this area for other purposes in the future

Page 39: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

39

ARM Instruction Set

Data processing instructions

Data transfer instructions

Control flow instructions

Writing simple assembly language programs

Page 40: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

40

ARM Instruction Set

Data processing instructionsData transfer instructions

Control flow instructions

Writing simple assembly language programs

Page 41: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

41

Data processing instructionsEnable the programmer to perform arithmetic and logical operations on data values in registersThe applied rules

All operands are 32 bits wide and come from registers or are specified as literals in the instruction itself

The result, if there is one, is 32 bits wide and is placed in a register

(An exception: long multiply instructions produce a 64 bits result)

Each of the operand registers and the result register are independently specified in the instruction

(This is, the ARM uses a ‘3-address’ format for these instruction)

Page 42: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

42

ADD r0, r1, r2 ; r0 := r1 + r2

Simple Register Operands

The semicolon here indicates that everything to the right of it is a comment and should be ignored by the assembler

The values in the register may be considered to be unsigned integer or signed 2’s-complement values

Page 43: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

43

Arithmetic OperationsThese instructions perform binary arithmetic on two 32-bit operands

The carry-in, when used, is the current value of the C bit in the CPSR

ADD r0, r1, r2 r0 := r1 + r2ADC r0, r1, r2 r0 := r1 + r2 + CSUB r0, r1, r2 r0 := r1 – r2SBC r0, r1, r2 r0 := r1 – r2 + C – 1RSB r0, r1, r2 r0 := r2 – r1RSC r0, r1, r2 r0 := r2 – r1 + C – 1

Page 44: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

44

Bit-Wise Logical OperationsThese instructions perform the specified boolean logic operation on each bit pair of the input operands

AND r0, r1, r2 r0 := r1 AND r2ORR r0, r1, r2 r0 := r1 OR r2EOR r0, r1, r2 r0 := r1 XOR r2BIC r0, r1, r2 r0 := r1 AND (NOT r2)

r0[i] := r1[i] OPlogic r2[i] for i in [0..31]

• BIC stands for ‘bit clear’• Every ‘1’ in the second operand clears the corresponding bit in the first operand

Page 45: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

45

Example: BIC Instruction

r1 = 0x11111111

r2 = 0x01100101

BIC r0, r1, r2r0 = 0x10011010

Page 46: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

46

Register Movement OperationsThese instructions ignore the first operand, which is omitted from the assembly language format, and simply move the second operand to the destination

MOV r0, r2 r0 := r2MVN r0, r2 r0 := NOT r2

The ‘MVN’ mnemonic stands for ‘move negated’

Page 47: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

47

Comparison OperationsThese instructions do not produce a result, but just set the condition code bits (N, Z, C, and V) in the CPSR according to the selected operation

CMP r1, r2 compare set cc on r1 – r2CMN r1, r2 compare negated set cc on r1 + r2TST r1, r2 bit test set cc on r1 AND r2TEQ r1, r2 test equal set cc on r1 XOR r2

Page 48: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

48

Immediate OperandsIf we wish to add a constant to a register, we can replace the second source operand with an immediate value

ADD r3, r3, #1 ; r3 := r3 + 1AND r8, r7, #0xff ; r8 := r7[7:0]

A constant preceded by ‘#’

A hexadecimal by putting “0x” after the ‘#’ (GNU Assembler)

Page 49: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

49

Shifted Register Operands (1)These instructions allows the second register operand to be subject to a shift operation before it is combined with the first operand

They are still single ARM instructions, executed in a single clock cycle

Most processors offer shift operations as separate instructions, but the ARM combines them with a general ALU operation in a single instruction

ADD r3, r2, r1, LSL #3 ; r3 := r2 + 8 * r1

Page 50: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

50

Shifted Register Operands (2)

LSL logical shift left by 0 to 31 Fill the vacated bits at the LSB of the word with zeros

ASL arithmetic shift left A synonym for LSL

XXXXX

00000

031

LSL #5

Page 51: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

51

Shifted Register Operands (3)

LSR logical shift right by 0 to 32 Fill the vacated bits at the MSB of the word with zeros

XXXXX

00000

031

LSR #5

Page 52: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

52

Shifted Register Operands (4)

ASR arithmetic shift right by 0 to 32 Fill the vacated bits at the MSB of the word with zero (source operand is positive)

0

00000 0

031

ASR #5 ;positive operand

Page 53: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

53

Shifted Register Operands (5)

ASR arithmetic shift right by 0 to 32 Fill the vacated bits at the MSB of the word with one (source operand is negative)

1

11111 1

031

ASR #5 ;negative operand

Page 54: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

54

Shifted Register Operands (6)

ROR Rotate right by 0 to 32 The bits which fall off the LSB of the word are used to fill the vacated bits at the MSB of the word

031

ROR #5

Page 55: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

55

Shifted Register Operands (7)

RRX Rotate right extended by 1 place

The vacated bit (bit 31) is filled with the old value of the C flag and the operand is shifted one place to the right

C

031

RRX

C

C

Page 56: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

56

Shifted Register Operands (8)It is possible to use a register value to specify the number of bits the second operand should be shifted byEx:

Only the bottom 8 bits of r2 are significant

ADD r5, r5, r3, LSL r2 ; r5:=r5+r3*2^r2

Page 57: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

57

Setting the Condition CodesAny data processing instruction can set the condition codes ( N, Z, C, and V) if the programmer wishes it toEx: 64-bit addition

r0r1

r2r3+

r2r3

ADDS r2, r2, r0 ; 32-bit carry out->CADC r3, r3, r1 ; C is added into

; high word

Adding ‘S’ to the opcode, standing for ‘Set condition codes’

Page 58: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

58

Multiplies (1)A special form of the data processing instruction supports multiplication

Some important differencesImmediate second operands are not supported

The result register must not be the same as the first source register

If the ‘S’ bit is set, the C flag is meaningless

MUL r4, r3, r2 ; r4 := (r3 x r2)[31:0]

Page 59: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

59

Multiplies (2)The multiply-accumulate instruction

In some cases, it is usually more efficient to use a short series of data processing instructionsEx: multiply r0 by 35

MLA r4, r3, r2, r1 ; r4 := (r3 x r2 + r1)[31:0]

ADD r0, r0, r0, LSL #2 ; r0’ := 5 x r0RSB r0, r0, r0, LSL #3 ; r0’’:= 7 x r0’

; move 35 to r1MUL r3, r0, r1 ; r3 := r0 x 35

OR

Page 60: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

60

ARM Instruction Set

Data processing instructionsData transfer instructionsControl flow instructionsWriting simple assembly language programs

Page 61: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

61

Addressing modeThe ARM data transfer instructions are all based around register-indirect addressing

Base-plus-offset addressingBase-plus-index addressing

LDR r0, [r1] ; r0 := mem32[r1]STR r0, [r1] ; mem32[r1] := r0

Register-indirect addressing

Page 62: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

62

Data Transfer InstructionsMove data between ARM registers and memory

Three basic forms of data transfer instruction

Single register load and store instructions

Multiple register load and store instructions

Single register swap instructions

Page 63: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

63

Single Register Load / Store Instructions (1)

These instructions provide the most flexible way to transfer single data items between an ARM register and memory

The data item may be a byte, a 32-bit word, 16-bit half-word

LDR r0, [r1] ; r0 := mem32[r1]STR r0, [r1] ; mem32[r1] := r0

Register-indirect addressing

Page 64: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

64

Single Register Load / Store Instructions (2)

LDR Load a word into register Rd ←mem32[address]

STR Store a word in register into memory Mem32[address] ←Rd

LDRB Load a byte into register Rd ←mem8[address]

STRB Store a byte in register into memory Mem8[address] ←Rd

LDRH Load a half-word into register Rd ←mem16[address]

STRH Store a half-word in register into memory Mem16[address] ←Rd

LDRSB Load a signed byte into register Rd ←signExtend(mem8[address])

LDRSH Load a signed half-word into register Rd ←signExtend(mem16[address])

Page 65: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

65

Base-plus-offset Addressing (1)Pre-indexed addressing mode

It allows one base register to be used to access a number of memory locations which are in the same area of memory

LDR r0, [r1, #4] ; r0 := mem32[r1 + 4]

Page 66: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

66

Base-plus-offset Addressing (2)Auto-indexing (Preindex with writeback)

No extra time

The time and code space cost of the extra instruction are avoided

LDR r0, [r1, #4]! ; r0 := mem32[r1 + 4]; r1 := r1 + 4

The exclamation mark ’!’ indicates that the instruction should update the base register after initiating the data transfer

Page 67: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

67

Base-plus-offset Addressing (3)Post-indexed addressing mode

The exclamation “!” is not needed

LDR r0, [r1], #4 ; r0 := mem32[r1]; r1 := r1 + 4

Page 68: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

68

Application

A[1]0x100

A[2]A[3]

ADR r1, tableLOOP LDR r0, [r1], #4 ; r0 := mem32[r1]

; r1 := r1 + 4;do some operation on r0…

ADR r1, tableLOOP LDR r0, [r1] ; r0 := mem32[r1]

ADD r1, r1, #4 ; r1 := r1 + 4;do some operation on r0…

ADR ARM pseudo-instructionLoad a program-relative or register-relative address into a register.

Examplestart MOV r0,#10

ADR r4,start ; => SUB r4,pc,#0xc

Page 69: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

69

Multiple Register Load / Store Instructions (1)

Enable large quantities of data to be transferred more efficiently

They are used for procedure entry and exit to save and restore workspace registers

Copy blocks of data around memory

LDMIA r1, {r0, r2, r5} ; r0 := mem32[r1]; r2 := mem32[r1 + 4]; r5 := mem32[r1 + 8]

The base register r1 should be word-aligned

Page 70: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

70

Multiple Register Load / Store Instructions (2)

LDM Load multiple registers

STM Store multiple registers

Addressing mode Description Starting address End address Rn!

IA Increment After Rn Rn+4*N-4 Rn+4*N

IB Increment Before Rn+4 Rn+4*N Rn+4*N

DA Decrement After Rn-4*Rn+4 Rn Rn-4*N

DB Decrement Before Rn-4*N Rn-4 Rn-4*N

Addressing mode for multiple register load and store instructions

Page 71: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

71

Example (1)

LDMIA r0, {r1, r2, r3}ORLDMIA r0, {r1-r3}

r1 := 10r2 := 20r3 := 30

r0 := 0x100

Page 72: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

72

Example (2)

LDMIA r0!, {r1, r2, r3}

r1 := 10r2 := 20r3 := 30

r0 := 0x10C

Page 73: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

73

Example (3)

LDMIB r0!, {r1, r2, r3}

r1 := 20r2 := 30r3 := 40

r0 := 0x10C

Page 74: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

74

Example (4)

LDMDA r0!, {r1, r2, r3}

r1 := 40r2 := 50r3 := 60

r0 := 0x108

Page 75: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

75

Example (5)

LDMDB r0!, {r1, r2, r3}

r1 := 30r2 := 40r3 := 50

r0 := 0x108

Page 76: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

76

Application

; r9 begin address of source data; r10 begin address of target; r11 end address of source data

LOOPLDMIA r9! , {r0-r7}STMIA r10!, {r0-r7}CMP r9 , r11BNE LOOP

Low address

High address

r10

r9

r11

Copy

Copy a block of memory

Page 77: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

77

Application: Stack OperationsARM use multiple load-store instructions to operate stack

POP: multiple load instructions

PUSH: multiple store instructions

Page 78: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

78

The Stack (1)Stack grows up or grows down

Ascending, ‘A’

Descending, ‘D’

Full stack, ‘F’: sp points to the last used address in the stack

Empty stack, ‘E’: sp points to the first unused address in the stack

Page 79: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

79

The Stack (2)

Addressing mode Meaning POP =LDM PUSH =STM

FAFull Ascending

LDMFA LFMFA STMFA STMIB

FDFull Descending

LDMFD LDMIA STMFD STMDB

EA Empty Ascending LDMEA LDMDB STMEA STMIA

ED Empty Descending LDMED LDMIB STMED STMDA

The mapping between the stack and block copy views of the multiple load and store instructions

Page 80: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

80

Single Register Swap Instructions (1)

Allow a value in a register to be exchanged with a value in memory

Effectively do both a load and a store operation in one instruction

They are little used in user-level programs

Atomic operation

Application

Implement semaphores (multi-threaded / multi-processor environment)

Page 81: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

81

Single Register Swap Instructions (2)

SWP WORD exchangetmp = mem32[Rn]mem32[Rn] = RmRd = tmp

SWPB Byte exchangetmp = mem8[Rn]mem8[Rn] = RmRd = tmp

SWP{B} Rd, Rm, [Rn]

Page 82: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

82

Example

SWP r0, r1, [r2]

Page 83: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

83

Load an Address into Register (1)The ADR (load address into register) instruction to load a register with a 32-bit address Example

ADR r0,tableLoad the contents of register r0 with the 32-bit address "table"

Page 84: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

84

Load an Address into Register (2)ADR is a pseudo instruction

Assembler will transfer pseudo instruction into a sequence of appropriate normal instructions

Assembler will transfer ADR into a single ADD, or SUB instruction to load the address into a register.

Page 85: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

85

Page 86: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

86

ARM Instruction Set

Data processing instructionsData transfer instructionsControl flow instructionsWriting simple assembly language programs

Page 87: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

87

Control Flow InstructionsDetermine which instructions get executed next

B LABEL……

LABEL …

MOV r0, #0 ; initialize counterLOOP …

ADD r0, r0, #1 ; increment loop counterCMP r0, #10 ; compare with limitBNE LOOP ; repeat if not equal… ; else fall through

Page 88: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

88

Branch ConditionsBranch Interpretat i o n No rmal us esBBAL

UnconditionalAlways

Always take this branchAlways take this branch

BEQ Equal Comparison equal or zero resultBNE Not equal Comparison not equal or non-zero resultBPL Plus Result positive or zeroBMI Minus Result minus or negativeBCCBLO

Carry clearLower

Arithmetic operation did not give carry-outUnsigned comparison gave lower

BCSBHS

Carry setHigher or same

Arithmetic operation gave carry-outUnsigned comparison gave higher or same

BVC Overflow clear Signed integer operation; no overflow occurredBVS Overflow set Signed integer operation; overflow occurredBGT Greater than Signed integer comparison gave greater thanBGE Greater or equal Signed integer comparison gave greater or equalBLT Less than Signed integer comparison gave less thanBLE Less or equal Signed integer comparison gave less than or equalBHI Higher Unsigned comparison gave higherBLS Lower or same Unsigned comparison gave lower or same

Page 89: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

89

Branch Instructions

B Branch PC=label

BL Branch with Link PC=labelLR=address of the next instructionafter the BL

BX Branch withExchange

PC=Rm & 0xfffffffe, T=Rm & 1

BLX Branch with Link and Exchange

PC=label, T=1PC=Rm & 0xfffffffe, T=Rm & 1LR=address of the next instruction after the BLX

Page 90: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

90

Branch and Link Instructions (1)BL instruction save the return address into r14 (lr)

BL subroutine ; branch to subroutineCMP r1, #5 ; return to hereMOVEQ r1, #0…

subroutine ; subroutine entry point…MOV pc, lr ; return

Page 91: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

91

Branch and Link Instructions (2)Problem

If a subroutine wants to call another subroutine, the original return address, r14, will be overwritten by the second BL instruction

SolutionPush r14 into a stack

The subroutine will often also require some work registers, the old values in these registers can be saved at the same time using a store multiple instruction

Page 92: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

92

Branch and Link Instructions (3)

BL SUB1 ; branch to subroutine SUB1…

SUB1STMFD r13!, {r0-r2,r14} ; save work & link registerBL SUB2…LDMFD r13!, {r0-r2, pc} ; restore work register and

; return

SUB2…MOV pc, r14 ; copy r14 into r15 to return

Page 93: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

93

Jump Tables (1)A programmer sometimes wants to call one of a set of subroutines, the choice depending on a value computed by the program

BL JUMPTAB..

JUMPTABCMP r0, #0BEQ SUB0CMP r0, #1BEQ SUB1CMP r0, #2BEQ SUB2..

Note: slow when the list is long, and all subroutines are equally frequent

Page 94: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

94

Jump Tables (2)• “DCD” directive instructs the assembler to reserve a

word of store and to initialize it to the value of the expression to the right

BL JUMPTAB..

JUMPTABADR r1, SUBTABCMP r0, #SUBMAXLDRLS pc, [r1, r0, LSL #2]B ERROR

SUBTABDCD SUB0DCD SUB1DCD SUB2..

Page 95: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

95

Supervisor CallsSWI: SoftWare Interrupt

The supervisor calls are implemented in system software

They are probably different from one ARM system to another

Most ARM systems implement a common subset of calls in addition to any specific calls required by the particular application

; This routine sends the character in the bottom; byte of r0 to the use display device

SWI SWI_WriteC ; output r0[7:0]

Page 96: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

96

Processor Actions for SWI (1)Save the address of the instruction after the SWI in r14_svcSave the CPSR in SPSR_svcEnter supervisor modeDisable IRQsSet the PC to 0x8

Page 97: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

97

Processor Actions for SWI (2)

...ADD r0, r1, r2SWI 0x6ADD r1, r2, r2...

ResetUndef instr.SWIPrefetch abortData abortReservedIRQFIQ

0x000x040x080x0c0x100x140x180x1c

SWI handler...

User Program Vector TableSWI handler

Page 98: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

98

Processor Actions for SWI (3)

...ADD r0, r1, r2SWI 0x6ADD r1, r2, r2...

ResetUndef instr.SWIPrefetch abortData abortReservedIRQFIQ

0x000x040x080x0c0x100x140x180x1c

switch (rn) {case 0x1: …case 0x6: ...}

User Program Vector Table SWI handler

Page 99: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

99

ARM Instruction Set

Data processing instructionsData transfer instructionsControl flow instructionsWriting simple assembly language programs

Page 100: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

100

Writing Simple Assembly Language Programs (ARM ADS)

AREA HelloW, CODE, READONLYSWI_WriteC EQU &0SWI_Exit EQU &11

ENTRYSTART ADR r1, TEXTLOOP LDRB r0, [r1], #1

CMP r0, #0SWINE SWI_WriteCBNE LOOPSWI SWI_Exit

TEXT = "Hello World",&0a,&0d,0END

AREA: chunks of data or code that are manipulated by the linker

ENTRY: The first instruction to be executed within an application is marked by the ENTRY directive. An application can contain only a single entry point.

EQU: give a symbolic name to a numeric constant (*)

DCB: allocate one or more bytes of memory and define initial runtime content of memory (=)

Page 101: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

101

General Assembly Form (ARM ADS)

The three sections are separated by at least one whitespace character (a space or a tab)Actual instructions never start in the first column, since they must be preceded by whitespace, even if there is no labelAll three sections are optional

label <whitespace> instruction <whitespace> ;comment

Page 102: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

102

GNU GAS Basic Format (1)

.section .text

.global main

.type main,%functionmain:

MOV r0, #100ADD r0, r0, r0.end

• Assemble the following code into a section• Similar to “AREA” in armasm

Filename: test.s

Page 103: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

103

GNU GAS Basic Format (2)

.section .text

.global main

.type main,%functionmain:

MOV r0, #100ADD r0, r0, r0.end

• “.global” makes the symbol visible to ld• Similar to “EXPORT” in armasm

Filename: test.s

Page 104: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

104

GNU ARM Basic Format (3)

.section .text

.global main

.type main,%functionmain:

MOV r0, #100ADD r0, r0, r0.end

• This sets the type of symbol name to be either a function symbol or an object symbol

• “.end” marks the end of the assembly file• Assembler does not process anything in the file past the “.end” directive

Filename: test.s

Page 105: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

105

GNU ARM Basic Format (4)

.section .text

.global main

.type main,%functionmain:

MOV r0, #100ADD r0, r0, r0.end

Filename: test.s

• Comments• /* …your comments... */• @ your comments (line comment)

Page 106: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

106

Thumb Instruction SetThumb addresses code density

A compressed form of a subset of the ARM instruction set

Thumb maps onto ARMsDynamic decompression in an ARM instruction pipelineInstructions execute as standard ARM instructions within the processor

Thumb is not a complete architectureThumb is fully supported by ARM development toolsDesign for processor / compiler, not for programmer

Page 107: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

107

Thumb-ARM Differences (1)All Thumb instructions are 16-bits long

ARM instructions are 32-bits long

Most Thumb instructions are executed unconditionally

All ARM instructions are executed conditionally

Page 108: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

108

Thumb-ARM Differences (2)Many Thumb data processing instructions use a 2-address format (the destination register is the same as one of the source registers)

ARM use 3-address format

Thumb instruction are less regular than ARM instruction formats, as a result of the dense encoding

Page 109: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

109

Thumb ApplicationsThumb properties

Thumb requires 70% space of the ARM code

Thumb uses 40% more instructions than the ARM code

With 32-bit memory, the ARM code is 40% faster than the Thumb code

With 16-bit memory, the Thumb code is 45%faster than the ARM code

Thumb uses 30% less external memory power than ARM code

Page 110: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

110

DSP Extensions

DSP Extensions “E”16bit Multiply and Multiply-Accumulate instructions

Saturated, signed arithmetic

Introduced in v5TE

Available in ARM9E, ARM10E and Jaguar families

Page 111: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

111

ARM Java Extensions - JazelleTM

Direct execution of Java ByteCode

8x Performance of Software JVM(Embedded CaffeineMark3.0)

Over 80% power reduction for Java Applications

Single Processor for Java and existing OS/applications

Supported by leading Java Run-time environments and operating systems

Available in ARM9, ARM10 & Jaguar families

Page 112: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

112

ARM Media Extensions (ARM v6)Applications

Audio processingMPEG4 encode/decodeSpeech RecognitionHandwriting RecognitionViterbi ProcessingFFT Processing

Includes8 & 16-bit SIMD operationsADD, SUB, MAC, Select

Up to 4x performance for no extra powerIntroduced in ARM v6 architecture, Available in Jaguar

Page 113: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

113

ARM Architectures

THUMBTM DSP JazelleTM Media

Enhance performance through innovationTHUMBTM: 30% code compression

DSP Extensions: Higher performance for fixed-point DSP

JazelleTM: up to 8x performance for java

Media Extensions up to 4x performance for audio & video

Preserve Software Investment through compatibility

Architecturev4T

v5TEv5TEJ

v6

Feature Set

Page 114: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

114

OutlineIntroduction

Programmers model

Instruction set

System designDevelopment tools

Page 115: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

115

Example ARM-based System

Page 116: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

AMBA

Brid

ge

Timer

On-chipRAM

ARM

InterruptController

Remap/Pause

TIC

Arbiter

Bus InterfaceExternalROM

ExternalRAM

Reset

System Bus Peripheral Bus

AMBAAdvanced Microcontroller Bus Architecture

ADKComplete AMBA Design Kit

ACTAMBA Compliance Testbench

PrimeCellARM’s AMBA compliant peripherals

AHB or ASB APB

ExternalBus

Interface

Decoder

reference: http://www.intel.com/education/highered/modelcurriculum.htm

Page 117: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

117

ARM Coprocessor InterfaceARM supports a general-purpose extension of its instructions set through the addition of hardware coprocessorCoprocessor architecture

Up to 16 logical coprocessors

Each coprocessor can have up to 16 private registers (any reasonable size)

Using load-store architecture and some instructions to communicate with ARM registers and memory.

Page 118: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

118

ARM7TDMI Coprocessor Interface Based on “bus watching” technique

The coprocessor is attached to a bus where the ARM instruction stream flows into the ARM

The coprocessor copies the instructions into an internal pipeline

A “hand-shake” between the ARM and the coprocessor confirms that they are both ready to execute coprocessor instructions

Page 119: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

119

OutlineIntroduction

Programmers model

Instruction set

System design

Development tools

Page 120: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

120

Development Tools (1)Commercial

ARM

IAR…

Open sourceGNU

Best code quality

Page 121: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

121

Development Tools (2)ARM ADS GNU

Compiler armcc gcc

Assembler armasm binutils

Linker armlink binutilsFormat converter fromelf binutils

C library C library newlib

Debugger Armsd, AXD GDB, Insight

Simulator ARMulator Simulator in GDB

Page 122: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

122

The Structure of ARM Cross-Development Toolkit

as semblerC compiler

C source asm source

.aof

C libraries

linker

.axf

ARMsd

debug

ARMulator development

system model

board

objectlibraries

Page 123: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

CONTROL STRUCTURESAPPENDIX A

123

Page 124: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Control structuresProgram is to implement algorithms to solve problems. Program decomposition and flow of control are important concepts to express algorithms.Flow of control:

Sequence.Decision: if-then-else, switchIteration: repeat-until, do-while, for

Decomposition: split a problem into several smaller and manageable ones and solve them independently. (subroutines/functions/procedures)

Page 125: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

DecisionIf-then-elseswitch

Page 126: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

If statementsif then else

BNE else

B endifelse:

endif:

C T E

C

T

E

// find maximumif (R0>R1) then R2:=R0 else R2:=R1

Page 127: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

If statementsif then else

BNE else

B endifelse:

endif:

C T E

C

T

E

// find maximumif (R0>R1) then R2:=R0 else R2:=R1

CMP R0, R1BLE elseMOV R2, R0B endif

else: MOV R2, R1endif:

Page 128: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

If statements

Two other options:

CMP R0, R1MOVGT R2, R0MOVLE R2, R1

MOV R2, R0CMP R0, R1MOVLE R2, R1

// find maximumif (R0>R1) then R2:=R0 else R2:=R1

CMP R0, R1BLE elseMOV R2, R0B endif

else: MOV R2, R1endif:

Page 129: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

If statementsif (R1==1 || R1==5 || R1==12) R0=1;

TEQ R1, #1 ...TEQNE R1, #5 ...TEQNE R1, #12 ...MOVEQ R0, #1 BNE fail

Page 130: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

If statementsif (R1==0) zeroelse if (R1>0) pluselse if (R1<0) neg

TEQ R1, #0BMI negBEQ zeroBPL plus

neg: ...B exit

Zero: ...B exit...

Page 131: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

If statementsR0=abs(R0)

TEQ R0, #0RSBMI R0, R0, #0

Page 132: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Multi-way branchesCMP R0, #`0’BCC other @ less than ‘0’CMP R0, #`9’BLS digit @ between ‘0’ and ‘9’CMP R0, #`A’BCC otherCMP R0, #`Z’BLS letter @ between ‘A’ and ‘Z’CMP R0, #`a’BCC otherCMP R0, #`z’BHI other @ not between ‘a’ and ‘z’

letter: ...

Page 133: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Switch statementsswitch (exp) {

case c1: S1; break;case c2: S2; break;...case cN: SN; break;default: SD;

}

e=exp;if (e==c1) {S1}else if (e==c2) {S2}else ...

Page 134: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Switch statementsswitch (R0) {

case 0: S0; break;case 1: S1; break;case 2: S2; break;case 3: S3; break;default: err;

}

CMP R0, #0BEQ S0CMP R0, #1BEQ S1CMP R0, #2BEQ S2CMP R0, #3BEQ S3

err: ...B exit

S0: ...B exit

The range is between 0 and N

Slow if N is large

Page 135: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Switch statementsADR R1, JMPTBLCMP R0, #3LDRLS PC, [R1, R0, LSL #2]

err:...B exit

S0: ...

JMPTBL:.word S0.word S1.word S2.word S3

S0

S1

S2

S3

JMPTBLR1

R0

For larger N and sparse values, we could use a hash function.

What if the range is betweenM and N?

Page 136: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Iterationrepeat-untildo-whilefor

Page 137: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

repeat loopsdo { } while ( )

loop:

BEQ loopendw:

CS

C

S

Page 138: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

while loopswhile ( ) { }

loop:

BNE endw

B loopendw:

C S

C

S

B testloop:

test:

BEQ loopendw:

C

S

Page 139: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

while loopswhile ( ) { }

B testloop:

test:

BEQ loopendw:

C

S

C S

BNE endwloop:

test:

BEQ loopendw:

C

S

C

Page 140: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

GCDint gcd (int i, int j){

while (i!=j){

if (i>j)i -= j;

elsej -= i;

}}

Page 141: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

GCDLoop: CMP R1, R2

SUBGT R1, R1, R2SUBLT R2, R2, R1BNE loop

Page 142: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

for loopsfor ( ; ; ) { }

loop:

BNE endfor

B loopendfor:

I C A S

C

S

A

I

for (i=0; i<10; i++) { a[i]:=0; }

Page 143: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

for loopsfor ( ; ; ) { }

loop:

BNE endfor

B loopendfor:

MOV R0, #0ADR R2, AMOV R1, #0

loop: CMP R1, #10BGE endforSTR R0,[R2,R1,LSL #2]ADD R1, R1, #1B loop

endfor:

I C A S

C

S

A

I

for (i=0; i<10; i++) { a[i]:=0; }

Page 144: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

for loops

MOV R1, #0loop: CMP R1, #10

BGE endfor@ do somethingADD R1, R1, #1B loop

endfor:

for (i=0; i<10; i++) { do something; }

MOV R1, #10loop:

@ do somethingSUBS R1, R1, #1BNE loop

endfor:

Execute a loop for a constant of times.

Page 145: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

PROCEDURESAPPENDIX B

145

Page 146: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

ProceduresArguments: expressions passed into a functionParameters: values received by the functionCaller and callee

void func(int a, int b){

...}int main(void){

func(100,200);...

}

arguments

parameters

callee

caller

Page 147: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Procedures

How to pass arguments? By registers? By stack? By memory? In what order?

main:...BL func...

.end

func:......

.end

Page 148: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Procedures

How to pass arguments? By registers? By stack? By memory? In what order?Who should save R5? Caller? Callee?

main:@ use R5BL func@ use R5.......end

func:...@ use R5.......end

caller callee

Page 149: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Procedures (caller save)

How to pass arguments? By registers? By stack? By memory? In what order?Who should save R5? Caller? Callee?

main:@ use R5@ save R5BL func@ restore R5@ use R5.end

func:...@ use R5

.end

caller callee

Page 150: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Procedures (callee save)

How to pass arguments? By registers? By stack? By memory? In what order?Who should save R5? Caller? Callee?

main:@ use R5BL func@ use R5

.end

func: @ save R5...@ use R5

@restore R5.end

caller callee

Page 151: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Procedures

How to pass arguments? By registers? By stack? By memory? In what order?Who should save R5? Caller? Callee?We need a protocol for these.

main:@ use R5BL func@ use R5.......end

func:...@ use R5.......end

caller callee

Page 152: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

ARM Procedure Call Standard (APCS)

ARM Ltd. defines a set of rules for procedure entry and exit so that

Object codes generated by different compilers can be linked togetherProcedures can be called between high-level languages and assembly

APCS definesUse of registersUse of stackFormat of stack-based data structureMechanism for argument passing

Page 153: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

APCS register usage conventionRegister APCS name APCS role0 a1 Argument 1 / integer result / scratch register1 a2 Argument 2 / scratch register2 a3 Argument 3 / scratch register3 a4 Argument 4 / scratch register4 v1 Register variable 15 v2 Register variable 2 6 v3 Register variable 3 7 v4 Register variable 4 8 v5 Register variable 5 9 sb/v6 Static base / register variable 610 sl/v7 Stack limit / register variable 711 fp Frame pointer12 ip Scratch reg. / new sb in inter-link-unit calls13 sp Lower end of current stack frame14 lr Link address / scratch register15 pc Program counter

Page 154: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

APCS register usage conventionRegister APCS name APCS role 0 a1 Argument 1 / integer result / scratch register 1 a2 Argument 2 / scratch register 2 a3 Argument 3 / scratch register 3 a4 Argument 4 / scratch register 4 v1 Register variable 1 5 v2 Register variable 2 6 v3 Register variable 3 7 v4 Register variable 4 8 v5 Register variable 5 9 sb/v6 Static base / register variable 6 10 sl/v7 Stack limit / register variable 7 11 fp Frame pointer 12 ip Scratch reg. / new sb in inter-link-unit calls 13 sp Lower end of current stack frame 14 lr Link address / scratch register 15 pc Program counter

• Used to pass the first 4 parameters

• Caller-saved if necessary

Page 155: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

APCS register usage conventionRegister APCS name APCS role 0 a1 Argument 1 / integer result / scratch register 1 a2 Argument 2 / scratch register 2 a3 Argument 3 / scratch register 3 a4 Argument 4 / scratch register 4 v1 Register variable 1 5 v2 Register variable 2 6 v3 Register variable 3 7 v4 Register variable 4 8 v5 Register variable 5 9 sb/v6 Static base / register variable 6 10 sl/v7 Stack limit / register variable 7 11 fp Frame pointer 12 ip Scratch reg. / new sb in inter-link-unit calls 13 sp Lower end of current stack frame 14 lr Link address / scratch register 15 pc Program counter

• Register variables, must return unchanged

• Callee-saved

Page 156: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

APCS register usage conventionRegister APCS name APCS role 0 a1 Argument 1 / integer result / scratch register 1 a2 Argument 2 / scratch register 2 a3 Argument 3 / scratch register 3 a4 Argument 4 / scratch register 4 v1 Register variable 1 5 v2 Register variable 2 6 v3 Register variable 3 7 v4 Register variable 4 8 v5 Register variable 5 9 sb/v6 Static base / register variable 6 10 sl/v7 Stack limit / register variable 7 11 fp Frame pointer 12 ip Scratch reg. / new sb in inter-link-unit calls 13 sp Lower end of current stack frame 14 lr Link address / scratch register 15 pc Program counter

• Registers for special purposes

• Could be used as temporary variables if saved properly.

Page 157: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Argument passingThe first four word arguments are passed through R0 to R3.Remaining parameters are pushed into stack in the reverse order.Procedures with less than four parameters are more effective.

Page 158: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Return valueOne word value in R0A value of length 2~4 words (R0-R1, R0-R2, R0-R3)

Page 159: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Function entry/exitA simple leaf function with less than four parameters has the minimal overhead. 50% of calls are to leaf functions

BL leaf1...

leaf1: ......MOV PC, LR @ return

main

leaf leaf

leaf

leaf

Page 160: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Function entry/exitSave a minimal set of temporary variables

BL leaf2...

leaf2: STMFD sp!, {regs, lr} @ save...LDMFD sp!, {regs, pc} @ restore and

@ return

Page 161: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Standard ARM C program address spacecode

static data

heap

stack

application load address

top of memory

application image

top of application

top of heap

stack pointer (sp)

stack limit (sl)

Page 162: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Accessing operandsA procedure often accesses operands in the following ways

An argument passed on a register: no further workAn argument passed on the stack: use stack pointer (R13) relative addressing with an immediate offset known at compiling timeA constant: PC-relative addressing, offset known at compiling timeA local variable: allocate on the stack and access through stack pointer relative addressingA global variable: allocated in the static area and can be accessed by the static base relative (R9) addressing

Page 163: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Proceduremain:

LDR R0, #0...BL func...

low

highstack

Page 164: arm.ppt [Modo de compatibilidad]homepage.cem.itesm.mx/carbajal/EmbeddedSystems/SLIDES/ARM...¾a particular r13 (the stack pointer, sp) and r14 (the link register,lr) ¾the program

Procedurefunc: STMFD SP!, {R4-R6, LR}

SUB SP, SP, #0xC...STR R0, [SP, #0] @ v1=a1

...ADD SP, SP, #0xCLDMFD SP!, {R4-R6, PC}

R4R5R6LR

v1v2v3

low

highstack