![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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/58.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/59.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/60.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/61.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/62.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/63.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/64.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/65.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/66.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/67.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/68.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/69.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/70.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/71.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/72.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/73.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/74.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/75.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/76.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/77.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/78.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/79.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/80.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/81.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/82.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/83.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/84.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/85.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/86.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/87.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/88.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/89.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/90.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/91.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/92.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/93.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/94.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/95.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/96.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/97.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/98.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/99.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/100.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/101.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/102.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/103.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/104.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/105.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/106.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/107.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/108.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/109.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/110.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/111.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/112.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/113.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/114.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/115.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/116.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/117.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/118.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/119.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/120.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/121.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/122.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/123.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/124.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/125.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/126.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/127.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/128.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/129.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/130.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/131.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/132.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/133.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/134.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/135.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/136.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/137.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/138.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/139.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/140.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/141.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/142.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/143.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/144.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/145.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/146.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/147.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/148.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/149.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/150.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/151.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/152.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/153.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/154.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/155.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/156.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/157.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/158.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/159.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/160.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/161.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/162.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/163.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042301/5ecc43d2e2e77955c85a582c/html5/thumbnails/164.jpg)
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