heute: - arm befehlssätze - arm instruction pipeline - branches & bedingte befehle
DESCRIPTION
Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle. ARM7 Exception Vectors. Exception. Mode. Address. Reset. Supervisor. 0x00000000. Undefined instruction. Undefined. 0x00000004. Software interrupt (SWI). Supervisor. 0x00000008. - PowerPoint PPT PresentationTRANSCRIPT
School ofEngineering
Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle
School ofEngineering
ARM7 Exception Vectors
Prefetch Abort (instruction fetch memory abort)
Supervisor
0x0000001C
Exception Mode Address
Reset
Undefined instruction
Software interrupt (SWI)
Data Abort (data access memory abort)
IRQ (interrupt)
FIQ (fast interrupt)
Undefined
Supervisor
Abort
Abort
IRQ
FIQ
0x00000018
0x00000010
0x0000000C
0x00000008
0x00000004
0x00000000
School ofEngineering
System & User
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
R14
R15 (PC)
CPSR
FIQ
R0
R1
R2
R3
R4
R5
R6
R7_fiq
R8_fiq
R9_fiq
R10_fiq
R11_fiq
R12_fiq
R13_fiq
R14_fiq
R15 (PC)
CPSR
SPSR_fiq
Supervisor
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13_svc
R14_svc
R15 (PC)
CPSR
SPSR_svc
Abort
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13_abt
R14_abt
R15 (PC)
CPSR
SPSR_abt
IRQ
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13_irq
R14_irq
R15 (PC)
CPSR
SPSR_irq
Undefined
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13_und
R14_und
R15 (PC)
CPSR
SPSR_und
ARM7 Register & Betriebszustände
School ofEngineering
Cortex-M3 Betriebszustände
Privileged User
When running an Exception Handle Mode
When Running Main Program Thread Mode Thread Mode
OperationModes
PrivilegeLevels
Wechseln der Betriebszustände:MSR CONTROL, R0
School ofEngineering
Übung 1
• Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenenAssemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ?
• An welcher Adresse befindet sich die erste Assembleranweisung der Fast InterruptRoutine ?
• An welcher Adresse befindet sich die erste Assembleranweisung des UndefinedInstruktion Handlers ?
School ofEngineering
Übung 1 - Lösung
• Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenenAssemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ? 0x00000100
• An welcher Adresse befindet sich die erste Assembleranweisung der Fast InterruptRoutine ? 0x00007000
• An welcher Adresse befindet sich die erste Assembleranweisung des UndefinedInstruktion Handlers ? 0x00002000
School ofEngineering
ARM Befehlssätze
School ofEngineering
● Befehlssätze○ 32-bit „ARM“ Befehlssatz○ 16-bit „Thumb“ Befehlssatz○ 16/32-bit „Thumb-2“ Befehlssatz
(Thumb-2 Superset von Thumb Befehlssatz)● ARM7
○ Unterstützt ARM und Thumb Befehlssatz○ Notwendiges hin- und herschalten zwischen ARM und
Thumb Befehlssatz● Cortex-M
○ Nur Thumb-2 Befehlssatz○ Auch alle Thumb Befehle werden unterstützt○ Cortex M nicht Binärkompatibel mit ARM7
● Cortex-R-A Serie ○ ARM Befehlssatz & Thumb2 Befehlssatz
● Literatur: ○ ARMv7-M Architecture Application Level Reference Manual (Link
auf WWW)
Die Befehlssätze
School ofEngineering
Thumb vs. ARM Befehlssatz
ARM Anweisung:ADD R0, R0,R1
Thumb Anweisung:ADD R0, R1
R0 ist gleichzeitigZiel und Operand1
Ziel-register Operand1 Operand2
R1 ist Operand2
R0 = R0 + R1
School ofEngineering
Thumb vs. ARM Befehlssatz
16-bitThumb
32-bitARM
Vorteil Braucht ~30% weniger Speicherplatz
Läuft ~40% schneller
Nachteil Eingeschränkte Funktionalität
Speicherplatz
Es braucht spezielle Funktion zwischen ARM und Thumb umzuschalten
School ofEngineering
ARM
THUMB
ARM
Reset
BLX
BX
Thumb: Umschalten ARM und Thumb Mode
• Spezielle Branch Anweisungen schalten zwischen ARM und ThumbMode hin und her.• Zusätzlich wird bei jeder Exception in den ARM Mode geschaltet
School ofEngineering
ARM
THUMB
THUMB
Exception
End ofException
Thumb: Umschalten ARM und Thumb Mode
School ofEngineering
Neuer: Thumb-2 Befehlssatz
● Enthält 32-bit Befehle und 16-bit Befehle● Kein Umschalten zwischen 32-bit und 16-bit
Befehlen● Superset des Thumb Befehlssatzes● Erlaubt komplexere Operationen als Thumb
○ Hardware Divide und Multiply
● Enthält auch alle Thumb Befehle
School ofEngineeringVorteile von Thumb-2 gegenüber
Thumb
● Verfügt auch über einige 32-bit Befehle● Zusätzliche Befehle gegenüber Thumb
○ Compare Zero Branch○ Coprozessor Instructions○ IT- if then○ Bit reversal
● Laut ARM kann ARM Code kann ohne grosse Leistungsverluste mit Thumb-2 Code ersetzt werden und spart zusätzlich Speicherplatz
School ofEngineering
Thumb-2: Unified Assembler Language
Gleich lautende Befehle für 16-bit und 32-bitVorher: Thumb: AND R0, R1
ARM: AND R0, R0, R1
Jetzt nur noch: AND R0, R0, R1
School ofEngineering
Cond 00 I OpCode S Rn Rd Operand2
20 15 1112 0162631 25 1921242728
0100 = ADD0010 = SUB1101 = MOV…
DestinationRegister
Operand1Register
0000 = EQ0001 = NE0010 = >=…1110 = Immer
Beispiel:ADDEQ R2,R4,R5 ;If Z flag set R2:= R4 + R5
Beispiel: 32-bit Befehl
School ofEngineering
Beispiel: 16-bit Befehl
0 1 0 0 0 0 Op Rs Rd
8 5 34 261215 10 79111314
0101 = ADC0110 = SBC0000 = AND…
Source/DestinationRegister
SourceRegister 2
1 0
• Thumb hat keineConditional Instruction• Thumb-2 hat IT (If Then Instruction und CZB (compare zero branch)
School ofEngineeringThumb: Eingeschränkter Zugriff auf R8 –
R12
School ofEngineering
ARM Instruction Pipeline
School ofEngineering
ARM7 Instruction Pipeline
1 2 3 4 5 6 Instruction
Fetch
Decode
Execute
School ofEngineering
LDR R0, [R1,#4]
Was ist der Wert von R0?
R1 = 0x5000
0x5000
0x5004
0x5008
0x11111111
0x22222222
0x33333333
0x22222222
R0
School ofEngineering
Welche Adresse steht danach im PC?
0x4000
0x4004
0x4008
0x400C
0x4000 LDR PC, [PC,#4]
PC
LDR PC,[PC,#4]
0x22222222
0x44444444
0x33333333
PC
0x0000400c
School ofEngineering
Fetch
Decode
Execute
QD QD QDDecode Execute
Instruction Pipeline
School ofEngineering
PC 0x4000 0x4004 0x4008
Fetch LDR PC, [PC,#4]
Decode LDR PC, [PC,#4]
Execute LDR PC, [PC,#4]
QD QD QDDecode Execute
0x400c
Instruction Pipeline
School ofEngineering
Übung 2
• An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers(es handelt sich hier nicht um einen NXP LPC) ?
School ofEngineering
Übung 2 - Lösung
• An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers(es handelt sich hier nicht um einen NXP LPC) ?
0x18 + 2 x 4 Byte – 0x1000 = 0xFFFF F020
School ofEngineering
Branches (Context Switch)
School ofEngineering
Main
Subroutine
Main
Reset
B = branch to target +/- 1 MBBL = Branch Link +/- 16MBBX = Branch optionaly exchange instruction setBLX = Branch link optionaly exchange instruction set
B LR
Branch Befehle
Branch zu Link Register
School ofEngineering
Umschalten zwischen ARM u. Thumb
2 Möglichkeiten:• BLX,BX Instruction• Exception
School ofEngineering
Einfacher Branch
B = Branch zu Adresse 0x8000
LDR R2, # 10
Bei einem Branch wird die gesamte Pipeline gespült (geflusht)
School ofEngineering
BL = Branch Link - Lädt Adresse in PC und speichertdie Return Adresse 0x400 +4 in Link Register (R14)
LDR R2, # 10
Branch Link
School ofEngineering
BL = Branch Link - Lädt Adresse in PC und speichertdie Return Adresse 0x400 +4 in Link Register (R14)
LDR R2, # 10
Branch Link
School ofEngineering
Data Processing Instructions
School ofEngineering
Multiply Accumulate Unit (MAC)
MACUnit
School ofEngineering
Load and Store Architektur
School ofEngineering
Multiply Accumulate Unit (MAC)
Mnemonic Meaning ResolutionMUL Multiply 32 bit resultMULA Multiply accumulate 32 bit resultUMUL Unsigned multiply 64 bit resultUMLAL Unsigned multiply accumulate 64 bit resultSMULL Signed multiply 64 bit resultSMLAL Signed multiply accumulate 64 bit result
School ofEngineering
Data Prozessing OP Codes
Kürzel BedeutungAND Logical bitwise ANDEOR Logical bitwise exclusive ORSUB SubtractRSB Reverse SubtractADD AddADC Add with carrySBC Subtract with carryRSC Reverse Subtract with carryTST TestTEQ Test EquivalenceCMP CompareCMN Compare negatedORR Logical bitwise ORMOV MoveBIC Bit clearMVN Move negated
School ofEngineering
ADDEQS R1,R2,R3,LSL #2
Entspricht:
If (Z ==1) R1 = R2+(R3 x 4)
Grundstruktur einer Data Processing Instruction
School ofEngineering
Data Transfer Instructions
School ofEngineeringKopieren von mehreren Registern mit
einem Befehl
Abspeichern von mehreren Registern auf den StackSTMFD R13!, {[registers], R14}
Zurückholen der Register vom Stack:LDMFD R13!, {[registers], PC}
School ofEngineering
Load/Store to/from Special-Register
School ofEngineering
Bedingte Befehle
Können zum Teil Branches ersetzen
School ofEngineering
Bei traditionellen Prozessoren, ist dies nur bei der Branch Anweisung möglich
Vorteil der bedingten Anweisungen : Pipeline wird dabei nicht gelöscht und muss somit nach dem Branch nicht wieder Neu aufgefüllt werden
Oberen 4 bits jeder Anweisung sindmit dem CPSR logisch verknüpft.Wenn keine Übereinstimmung wird Befehl wie NOP behandelt
Bedingte Befehle
School ofEngineering
Cond 00 I OpCode S Rn Rd Operand2
20 15 1112 0162631 25 1921242728
0100 = ADD0010 = SUB1101 = MOV…
DestinationRegister
Operand1Register
0000 = EQ0001 = NE0010 = >=…1110 = Immer
Beispiel:ADDEQ R2,R4,R5 ;If Z flag set R2:= R4 + R5
Beispiel einer Instruktion mit Condition
School ofEngineering
Betriebszustand:FIQIRQSupervisorUserUndefined
F = 1 FIQ disableI = 1 IRQ disable T = 1 Thumb mode
Condition Code Flags:N = NegativeZ = ZeroC = Carry Over V = Overflow (Ergebnis grösser als Platz im Register)
ARM7 Current Processor Status Register (CPSR)
School ofEngineering
AssemblerKürzel
Negativ
N
Zero
Z
Carry Over
C
Overflow
V
Bedeutung
EQ x 1 x x Equal
NE x 0 x x Not Equal
CS x x 1 x Carry bit set
CC x x 0 x Carry bit cloear
MI 1 x x x Minus (Negativ)
PL 0 x x x Plus (Positiv)
VS x x x 1 Overflow bit set
VC x x x 0 Overflow bit clear
HI x 0 1 x Higher Than (unsigned)
LS x 1 0 x Lower Same (signed)
GE 01
Xx
Xx
01
Greater or equal
LT 10
Xx
Xx
01
Less than
GT Z = 0 UND (N = V) Greater than
LE Z = 1 OR (N != V) Less than or equal
AL x x x x Allways
Condition Codes
School ofEngineering
Beispiel Conditional Move
CMP R1, R2 ; Compare R1 and R2 update Flags
MOVEQ R3, R0 ; Schiebe Inhalt von R0 in R3 wenn R1 und R2 gleich
MOVEQ …
• Überspringen von Befehlen hat den Vorteil, dass die Pipeline nicht gespültwerden muss.• Der Kompiler setzt Conditional Moves nur bei kurzen Branches ein, da sonst zu viele NOPs ausgeführt werden müssten.
Beispiel:If (x<100){X++}
Werden bei nicht eintreten der Bedingung durch NOP ersetzt
School ofEngineering
Nur Cortex-M: If-Then Befehl
C-Code Assembly Code
IF (R1 < R2) then CMP R1, R2
ITTEE LT
R2 = R2 - R1 SUB R2, R1 1. Befehl
R2 = R2/2 LSR R2, #1 2. Befehl (T)
else
R1 = R1 - R2 SUB R1, R2 3. Befehl (E)
R1 = R1/2 LSR R1, #1 4. Befehl (E)
• Der IF-THEN Befehl erlaubt bis zu 4 Folgebefehle auszuführen• Falls die Bedingung nicht wahr ist, werden die nicht asugeführte Befehle durch ein NOP ersetzt
Bei nicht eintreten derBedingung durch NOP ersetzt
ITTEE
2. Befehl
3. Befehl
4. Befehl
School ofEngineering
MOVS R0, R1
S Suffix
S-Suffix Aktualisiert Flags nach Ausfführung des Befehlsz.B. wird Z-Flag gesetzt wenn das Zielregister R0 nach Ausführen des Befehls 0 ist
MOVEQS R0, R2
S Sufix und Bedingte Ausführung können Kombiniert wrden
School ofEngineering
Beispiel1 :
MOVS R0, R1
MOVEQS R0, R2
MOVEQ R0, R3
Übung3: Conditional MOVE
R0 = 0R1 = 0R2 = 0R3 = 4
Was ist der Wert von R0 nach den drei MOV Befehlen?
Vor Ausführung der drei Befehle sind die 3 Register wie folgt geladen:
School ofEngineering
Beispiel1 :
MOVS R0, R1
MOVEQS R0, R2
MOVEQ R0, R3
-- R1 wird in R0 geschoben und Z flag wird 1 da R0 = 0
-- Da Z Flag = 1 wird R2 wird in R0 geschoben und Z flag wird 1 da R2 = 0
-- Da Z Flag = 1 wird R3 in R0 geschoben
Übung3 - Lösung: Conditional MOVE
R0 = 0R1 = 0R2 = 0R3 = 4
Was ist der Wert von R0 nach den drei MOV Befehlen? R0 ist 4
Vor Ausführung der drei Befehle sind die 3 Register wie folgt geladen:
School ofEngineering
Übung4: Conditional Move
School ofEngineering
Übung4 - Lösung: Conditional Move
School ofEngineeringÜbung5: Conditional Move
School ofEngineeringÜbung5 - Lösung: Conditional Move