![Page 1: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/1.jpg)
School ofEngineering
Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle
![Page 2: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/2.jpg)
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
![Page 3: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/3.jpg)
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
![Page 4: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/4.jpg)
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
![Page 5: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/5.jpg)
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 ?
![Page 6: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/6.jpg)
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
![Page 7: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/7.jpg)
School ofEngineering
ARM Befehlssätze
![Page 8: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/8.jpg)
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
![Page 9: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/9.jpg)
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
![Page 10: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/10.jpg)
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
![Page 11: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/11.jpg)
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
![Page 12: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/12.jpg)
School ofEngineering
ARM
THUMB
THUMB
Exception
End ofException
Thumb: Umschalten ARM und Thumb Mode
![Page 13: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/13.jpg)
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
![Page 14: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/14.jpg)
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
![Page 15: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/15.jpg)
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
![Page 16: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/16.jpg)
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
![Page 17: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/17.jpg)
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)
![Page 18: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/18.jpg)
School ofEngineeringThumb: Eingeschränkter Zugriff auf R8 –
R12
![Page 19: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/19.jpg)
School ofEngineering
ARM Instruction Pipeline
![Page 20: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/20.jpg)
School ofEngineering
ARM7 Instruction Pipeline
1 2 3 4 5 6 Instruction
Fetch
Decode
Execute
![Page 21: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/21.jpg)
School ofEngineering
LDR R0, [R1,#4]
Was ist der Wert von R0?
R1 = 0x5000
0x5000
0x5004
0x5008
0x11111111
0x22222222
0x33333333
0x22222222
R0
![Page 22: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/22.jpg)
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
![Page 23: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/23.jpg)
School ofEngineering
Fetch
Decode
Execute
QD QD QDDecode Execute
Instruction Pipeline
![Page 24: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/24.jpg)
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
![Page 25: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/25.jpg)
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) ?
![Page 26: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/26.jpg)
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
![Page 27: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/27.jpg)
School ofEngineering
Branches (Context Switch)
![Page 28: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/28.jpg)
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
![Page 29: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/29.jpg)
School ofEngineering
Umschalten zwischen ARM u. Thumb
2 Möglichkeiten:• BLX,BX Instruction• Exception
![Page 30: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/30.jpg)
School ofEngineering
Einfacher Branch
B = Branch zu Adresse 0x8000
LDR R2, # 10
Bei einem Branch wird die gesamte Pipeline gespült (geflusht)
![Page 31: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/31.jpg)
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
![Page 32: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/32.jpg)
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
![Page 33: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/33.jpg)
School ofEngineering
Data Processing Instructions
![Page 34: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/34.jpg)
School ofEngineering
Multiply Accumulate Unit (MAC)
MACUnit
![Page 35: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/35.jpg)
School ofEngineering
Load and Store Architektur
![Page 36: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/36.jpg)
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
![Page 37: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/37.jpg)
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
![Page 38: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/38.jpg)
School ofEngineering
ADDEQS R1,R2,R3,LSL #2
Entspricht:
If (Z ==1) R1 = R2+(R3 x 4)
Grundstruktur einer Data Processing Instruction
![Page 39: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/39.jpg)
School ofEngineering
Data Transfer Instructions
![Page 40: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/40.jpg)
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}
![Page 41: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/41.jpg)
School ofEngineering
Load/Store to/from Special-Register
![Page 42: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/42.jpg)
School ofEngineering
Bedingte Befehle
Können zum Teil Branches ersetzen
![Page 43: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/43.jpg)
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
![Page 44: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/44.jpg)
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
![Page 45: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/45.jpg)
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)
![Page 46: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/46.jpg)
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
![Page 47: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/47.jpg)
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
![Page 48: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/48.jpg)
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
![Page 49: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/49.jpg)
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
![Page 50: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/50.jpg)
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:
![Page 51: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/51.jpg)
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:
![Page 52: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/52.jpg)
School ofEngineering
Übung4: Conditional Move
![Page 53: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/53.jpg)
School ofEngineering
Übung4 - Lösung: Conditional Move
![Page 54: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/54.jpg)
School ofEngineeringÜbung5: Conditional Move
![Page 55: School of Engineering Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle](https://reader036.vdocuments.us/reader036/viewer/2022081514/55204d7249795902118c5eba/html5/thumbnails/55.jpg)
School ofEngineeringÜbung5 - Lösung: Conditional Move