570 likes | 765 Views
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.
E N D
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 Prefetch Abort (instruction fetch memory abort) Abort 0x0000000C Data Abort (data access memory abort) Abort 0x00000010 IRQ (interrupt) IRQ 0x00000018 FIQ (fast interrupt) FIQ 0x0000001C
System & User FIQ Abort IRQ Undefined Supervisor R0 R0 R0 R0 R0 R0 R1 R1 R1 R1 R1 R1 R2 R2 R2 R2 R2 R2 R3 R3 R3 R3 R3 R3 R4 R4 R4 R4 R4 R4 R5 R5 R5 R5 R5 R5 R6 R6 R6 R6 R6 R6 R7_fiq R7 R7 R7 R7 R7 R8_fiq R8 R8 R8 R8 R8 R9_fiq R9 R9 R9 R9 R9 R10_fiq R10 R10 R10 R10 R10 R11_fiq R11 R11 R11 R11 R11 R12_fiq R12 R12 R12 R12 R12 R13_fiq R13_abt R13_irq R13_und R13 R13_svc R14_fiq R14_abt R14_irq R14_und R14 R14_svc R15 (PC) R15 (PC) R15 (PC) R15 (PC) R15 (PC) R15 (PC) CPSR CPSR CPSR CPSR CPSR CPSR SPSR_fiq SPSR_abt SPSR_irq SPSR_und SPSR_svc ARM7 Register & Betriebszustände
Cortex-M3 Betriebszustände OperationModes PrivilegeLevels Wechseln der Betriebszustände: MSR CONTROL, R0
Übung 1 • Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenen • Assemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ? • An welcher Adresse befindet sich die erste Assembleranweisung der Fast Interrupt • Routine ? • An welcher Adresse befindet sich die erste Assembleranweisung des Undefined • Instruktion Handlers ?
Übung 1 - Lösung • Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenen • Assemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ? 0x00000100 • An welcher Adresse befindet sich die erste Assembleranweisung der Fast Interrupt • Routine ? 0x00007000 • An welcher Adresse befindet sich die erste Assembleranweisung des Undefined • Instruktion Handlers ? 0x00002000
Die Befehlssätze • 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)
Thumb vs. ARM Befehlssatz R0 = R0 + R1 ARM Anweisung: ADD R0, R0,R1 Thumb Anweisung: ADD R0, R1 R1 ist Operand2 Ziel-register Operand1 Operand2 R0 ist gleichzeitigZiel und Operand1
Thumb: Umschalten ARM und Thumb Mode Reset ARM BLX THUMB BX ARM • Spezielle Branch Anweisungen schalten zwischen ARM und ThumbMode hin und her. • Zusätzlich wird bei jeder Exception in den ARM Mode geschaltet
Thumb: Umschalten ARM und Thumb Mode THUMB Exception ARM End ofException THUMB
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
Vorteile 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
Thumb-2: Unified Assembler Language Gleich lautende Befehle für 16-bit und 32-bitVorher: Thumb: AND R0, R1 ARM: AND R0, R0, R1Jetzt nur noch: AND R0, R0, R1
Beispiel: 32-bit Befehl 25 24 31 28 27 26 21 20 19 16 15 12 11 0 DestinationRegister 0000 = EQ0001 = NE0010 = >= … 1110 = Immer 0100 = ADD0010 = SUB1101 = MOV… Operand1Register Beispiel:ADDEQ R2,R4,R5 ;If Z flag set R2:= R4 + R5
Beispiel: 16-bit Befehl 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Source/DestinationRegister • Thumb hat keine • Conditional Instruction • Thumb-2 hat IT (If Then Instruction und CZB (compare zero branch) SourceRegister 2 0101 = ADC0110 = SBC0000 = AND…
ARM7 Instruction Pipeline Instruction 1 2 5 6 3 4 Fetch Decode Execute
R0 0x22222222 Was ist der Wert von R0? LDR R0, [R1,#4] 0x11111111 0x5000 0x5004 0x22222222 0x5008 0x33333333 R1 = 0x5000
PC Welche Adresse steht danach im PC? 0x4000 LDR PC, [PC,#4] 0x4000 LDR PC,[PC,#4] 0x4004 PC 0x22222222 0x4008 0x33333333 0x44444444 0x400C 0x0000400c
D D D Q Q Q Instruction Pipeline Execute Decode
D D D Q Q Q Instruction Pipeline 0x400c Execute Decode
Übung 2 • An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers • (es handelt sich hier nicht um einen NXP LPC) ?
Ü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
Branch Befehle Reset B = branch to target +/- 1 MB BL = Branch Link +/- 16MB BX = Branch optionaly exchange instruction set BLX = Branch link optionaly exchange instruction set Main Subroutine B LR Branch zu Link Register Main
Umschalten zwischen ARM u. Thumb • 2 Möglichkeiten: • BLX,BX Instruction • Exception
Einfacher Branch B = Branch zu Adresse 0x8000 LDR R2, # 10 Bei einem Branch wird die gesamte Pipeline gespült (geflusht)
Branch Link BL = Branch Link - Lädt Adresse in PC und speichert die Return Adresse 0x400 +4 in Link Register (R14) LDR R2, # 10
Branch Link BL = Branch Link - Lädt Adresse in PC und speichert die Return Adresse 0x400 +4 in Link Register (R14) LDR R2, # 10
Multiply Accumulate Unit (MAC) MACUnit
Multiply Accumulate Unit (MAC) Mnemonic Meaning Resolution MUL Multiply 32 bit result MULA Multiply accumulate 32 bit result UMUL Unsigned multiply 64 bit result UMLAL Unsigned multiply accumulate 64 bit result SMULL Signed multiply 64 bit result SMLAL Signed multiply accumulate 64 bit result
Data Prozessing OP Codes Kürzel Bedeutung AND Logical bitwise AND EOR Logical bitwise exclusive OR SUB Subtract RSB Reverse Subtract ADD Add ADC Add with carry SBC Subtract with carry RSC Reverse Subtract with carry TST Test TEQ Test Equivalence CMP Compare CMN Compare negated ORR Logical bitwise OR MOV Move BIC Bit clear MVN Move negated
Grundstruktur einer Data Processing Instruction ADDEQS R1,R2,R3,LSL #2 Entspricht: If (Z ==1) R1 = R2+(R3 x 4)
Kopieren von mehreren Registern mit einem Befehl Abspeichern von mehreren Registern auf den Stack STMFD R13!, {[registers], R14} Zurückholen der Register vom Stack: LDMFD R13!, {[registers], PC}
Bedingte Befehle Können zum Teil Branches ersetzen
Bedingte Befehle 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
Beispiel einer Instruktion mit Condition 25 24 31 28 27 26 21 20 19 16 15 12 11 0 DestinationRegister 0000 = EQ0001 = NE0010 = >= … 1110 = Immer 0100 = ADD0010 = SUB1101 = MOV… Operand1Register Beispiel:ADDEQ R2,R4,R5 ;If Z flag set R2:= R4 + R5
ARM7 Current Processor Status Register (CPSR) Condition Code Flags: N = NegativeZ = Zero C = Carry Over V = Overflow (Ergebnis grösser als Platz im Register) F = 1 FIQ disableI = 1 IRQ disable T = 1 Thumb mode Betriebszustand:FIQIRQ Supervisor UserUndefined
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 … Werden bei nicht eintreten der Bedingung durch NOP ersetzt • Ü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++ • }
Nur Cortex-M: If-Then Befehl • 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 2. Befehl 3. Befehl 4. Befehl ITTEE Bei nicht eintreten derBedingung durch NOP ersetzt
S Suffix MOVS R0, R1 S-Suffix Aktualisiert Flags nach Ausfführung des Befehls z.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
Übung3: Conditional MOVE Beispiel1 : MOVS R0, R1 MOVEQS R0, R2 MOVEQ R0, R3 Vor Ausführung der drei Befehle sind die 3 Register wie folgt geladen: R0 = 0 R1 = 0 R2 = 0 R3 = 4 Was ist der Wert von R0 nach den drei MOV Befehlen?