1 / 55

Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle

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.

rowa
Download Presentation

Heute: - ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Heute:- ARM Befehlssätze - ARM Instruction Pipeline - Branches & Bedingte Befehle

  2. 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

  3. 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

  4. Cortex-M3 Betriebszustände OperationModes PrivilegeLevels Wechseln der Betriebszustände: MSR CONTROL, R0

  5. Ü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 ?

  6. Ü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

  7. ARM Befehlssätze

  8. 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)

  9. 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

  10. Thumb vs. ARM Befehlssatz

  11. 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

  12. Thumb: Umschalten ARM und Thumb Mode THUMB Exception ARM End ofException THUMB

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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…

  18. Thumb: Eingeschränkter Zugriff auf R8 – R12

  19. ARM Instruction Pipeline

  20. ARM7 Instruction Pipeline Instruction 1 2 5 6 3 4 Fetch Decode Execute

  21. R0 0x22222222 Was ist der Wert von R0? LDR R0, [R1,#4] 0x11111111 0x5000 0x5004 0x22222222 0x5008 0x33333333 R1 = 0x5000

  22. 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

  23. D D D Q Q Q Instruction Pipeline Execute Decode

  24. D D D Q Q Q Instruction Pipeline 0x400c Execute Decode

  25. Übung 2 • An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers • (es handelt sich hier nicht um einen NXP LPC) ?

  26. Ü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

  27. Branches (Context Switch)

  28. 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

  29. Umschalten zwischen ARM u. Thumb • 2 Möglichkeiten: • BLX,BX Instruction • Exception

  30. Einfacher Branch B = Branch zu Adresse 0x8000 LDR R2, # 10 Bei einem Branch wird die gesamte Pipeline gespült (geflusht)

  31. Branch Link BL = Branch Link - Lädt Adresse in PC und speichert die Return Adresse 0x400 +4 in Link Register (R14) LDR R2, # 10

  32. Branch Link BL = Branch Link - Lädt Adresse in PC und speichert die Return Adresse 0x400 +4 in Link Register (R14) LDR R2, # 10

  33. Data Processing Instructions

  34. Multiply Accumulate Unit (MAC) MACUnit

  35. Load and Store Architektur

  36. 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

  37. 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

  38. Grundstruktur einer Data Processing Instruction ADDEQS R1,R2,R3,LSL #2 Entspricht: If (Z ==1) R1 = R2+(R3 x 4)

  39. Data Transfer Instructions

  40. 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}

  41. Load/Store to/from Special-Register

  42. Bedingte Befehle Können zum Teil Branches ersetzen

  43. 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

  44. 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

  45. 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

  46. Condition Codes

  47. 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++ • }

  48. 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

  49. 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

  50. Ü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?

More Related