ARM Befehlssätze

Download Report

Transcript ARM Befehlssätze

School of
Engineering
Heute:
- ARM Befehlssätze
- ARM Instruction Pipeline
- Branches & Bedingte Befehle
School of
Engineering
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
School of
Engineering
ARM7 Register & Betriebszustände
System & User
FIQ
Supervisor
Abort
IRQ
Undefined
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
R7_fiq
R7
R7
R7
R7
R8
R8_fiq
R8
R8
R8
R8
R9
R9_fiq
R9
R9
R9
R9
R10
R10_fiq
R10
R10
R10
R10
R11
R11_fiq
R11
R11
R11
R11
R12
R12_fiq
R12
R12
R12
R12
R13
R13_fiq
R13_svc
R13_abt
R13_irq
R13_und
R14
R14_fiq
R14_svc
R14_abt
R14_irq
R14_und
R15 (PC)
R15 (PC)
R15 (PC)
R15 (PC)
R15 (PC)
R15 (PC)
CPSR
CPSR
CPSR
CPSR
CPSR
CPSR
SPSR_fiq
SPSR_svc
SPSR_abt
SPSR_irq
SPSR_und
School of
Engineering
Cortex-M3 Betriebszustände
Privileged
Operation
Modes
When running an Exception
Handle Mode
When Running Main Program
Thread Mode
User
Thread Mode
Privilege
Levels
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 ?
School of
Engineering
Ü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
School of
Engineering
School of
Engineering
ARM Befehlssätze
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)
School of
Engineering
School of
Engineering
Thumb vs. ARM Befehlssatz
R0 = R0 + R1
ARM Anweisung:
ADD R0, R0,R1
Zielregister
Thumb Anweisung:
ADD R0, R1
R1 ist Operand2
Operand1 Operand2
R0 ist gleichzeitig
Ziel und Operand1
School of
Engineering
Thumb vs. ARM Befehlssatz
Vorteil
Nachteil
16-bit
Thumb
Braucht ~30%
weniger
Speicherplatz
Eingeschränkte
Funktionalität
32-bit
ARM
Läuft ~40%
schneller
Speicherplatz
Es braucht spezielle Funktion
zwischen ARM und Thumb
umzuschalten
Thumb: Umschalten ARM und Thumb Mode
Reset
ARM
BLX
THUMB
BX
ARM
• Spezielle Branch Anweisungen schalten zwischen ARM und Thumb
Mode hin und her.
• Zusätzlich wird bei jeder Exception in den ARM Mode geschaltet
School of
Engineering
Thumb: Umschalten ARM und Thumb Mode
THUMB
Exception
ARM
End of
Exception
THUMB
School of
Engineering
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 of
Engineering
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
School of
Engineering
Thumb-2: Unified Assembler Language
Gleich lautende Befehle für 16-bit und 32-bit
Vorher: Thumb:
AND R0, R1
ARM:
AND R0, R0, R1
Jetzt nur noch:
AND R0, R0, R1
School of
Engineering
School of
Engineering
Beispiel: 32-bit Befehl
31
28 27 2625 24
Cond
00
0000 = EQ
0001 = NE
0010 = >=
…
1110 = Immer
I
21 20 19
OpCode
S
0100 = ADD
0010 = SUB
1101 = MOV
…
16 15
Rn
12 11
Rd
0
Operand2
Destination
Register
Operand1
Register
Beispiel:
ADDEQ R2,R4,R5 ;If Z flag set R2:= R4 + R5
School of
Engineering
Beispiel: 16-bit Befehl
15 14
0
1
13 12 11 10
0
0
0
0
9 8
7
Op
6
5
4 3 2 1 0
Rs
Rd
Source/Destination
Register
• Thumb hat keine
Conditional Instruction
• Thumb-2 hat IT (If Then
Instruction und CZB (compare
zero branch)
Source
Register 2
0101 = ADC
0110 = SBC
0000 = AND
…
Thumb: Eingeschränkter Zugriff auf R8 –
R12
School of
Engineering
School of
Engineering
ARM Instruction Pipeline
School of
Engineering
ARM7 Instruction Pipeline
1
Fetch
Decode
Execute
2
3
4
5
6
Instruction
School of
Engineering
Was ist der Wert von R0?
0x11111111
0x5000
R0
0x22222222
0x5004
0x22222222
0x33333333
0x5008
R1 = 0x5000
LDR R0, [R1,#4]
Welche Adresse steht danach im PC?
0x4000 LDR PC, [PC,#4]
PC
PC
0x0000400c
LDR PC,[PC,#4]
0x4000
0x22222222
0x4004
0x33333333
0x4008
0x44444444
0x400C
School of
Engineering
School of
Engineering
Instruction Pipeline
Fetch
Decode
Execute
D Q
Decode
D Q
Execute
D Q
School of
Engineering
Instruction Pipeline
PC
Fetch
Decode
Execute
D Q
0x4000
0x4004
0x4008
0x400c
LDR PC, [PC,#4]
LDR PC, [PC,#4]
LDR PC, [PC,#4]
Decode
D Q
Execute
D Q
Übung 2
• An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers
(es handelt sich hier nicht um einen NXP LPC) ?
School of
Engineering
Ü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 of
Engineering
School of
Engineering
Branches (Context Switch)
School of
Engineering
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
School of
Engineering
School of
Engineering
Einfacher Branch
B = Branch zu Adresse 0x8000
LDR R2, # 10
Bei einem Branch wird die gesamte Pipeline gespült (geflusht)
School of
Engineering
Branch Link
BL = Branch Link - Lädt Adresse in PC und speichert
die Return Adresse 0x400 +4 in Link Register (R14)
LDR R2, # 10
School of
Engineering
Branch Link
BL = Branch Link - Lädt Adresse in PC und speichert
die Return Adresse 0x400 +4 in Link Register (R14)
LDR R2, # 10
School of
Engineering
Data Processing Instructions
School of
Engineering
Multiply Accumulate Unit (MAC)
MAC
Unit
Load and Store Architektur
School of
Engineering
School of
Engineering
Multiply Accumulate Unit (MAC)
Mnemonic
MUL
MULA
UMUL
UMLAL
SMULL
SMLAL
Meaning
Multiply
Multiply accumulate
Unsigned multiply
Unsigned multiply accumulate
Signed multiply
Signed multiply accumulate
Resolution
32 bit result
32 bit result
64 bit result
64 bit result
64 bit result
64 bit result
Data Prozessing OP Codes
Kürzel
AND
EOR
SUB
RSB
ADD
ADC
SBC
RSC
TST
TEQ
CMP
CMN
ORR
MOV
BIC
MVN
Bedeutung
Logical bitwise AND
Logical bitwise exclusive OR
Subtract
Reverse Subtract
Add
Add with carry
Subtract with carry
Reverse Subtract with carry
Test
Test Equivalence
Compare
Compare negated
Logical bitwise OR
Move
Bit clear
Move negated
School of
Engineering
Grundstruktur einer Data
Processing Instruction
ADDEQS R1,R2,R3,LSL #2
Entspricht:
If (Z ==1) R1 = R2+(R3 x 4)
School of
Engineering
School of
Engineering
Data Transfer Instructions
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}
School of
Engineering
Load/Store to/from Special-Register
School of
Engineering
School of
Engineering
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 sind
mit dem CPSR logisch verknüpft.
Wenn keine Übereinstimmung wird Befehl
wie NOP behandelt
School of
Engineering
School of
Engineering
Beispiel einer Instruktion mit Condition
31
28 27 2625 24
Cond
00
0000 = EQ
0001 = NE
0010 = >=
…
1110 = Immer
I
21 20 19
OpCode
S
0100 = ADD
0010 = SUB
1101 = MOV
…
16 15
Rn
12 11
Rd
0
Operand2
Destination
Register
Operand1
Register
Beispiel:
ADDEQ R2,R4,R5 ;If Z flag set R2:= R4 + R5
School of
Engineering
ARM7 Current Processor Status
Register (CPSR)
Condition Code Flags:
F = 1 FIQ disable
N = Negative
I = 1 IRQ disable
Z = Zero
T = 1 Thumb mode
C = Carry Over
V = Overflow (Ergebnis grösser als Platz
im Register)
Betriebszustand:
FIQ
IRQ
Supervisor
User
Undefined
School of
Engineering
Condition Codes
Assembler
Kürzel
Negativ
Zero
N
Z
Carry
Over
C
Over
flow
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
0
1
X
x
X
x
0
1
Greater or equal
LT
1
0
X
x
X
x
0
1
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
Beispiel Conditional Move
School of
Engineering
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ült
werden 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++
}
School of
Engineering
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
C-Code
Assembly
Code
3. Befehl
4. Befehl
IF (R1 < R2) then CMP R1, R2
ITTEE LT
ITTEE
R2 = R2 - R1
SUB R2, R1
1. Befehl
R2 = R2/2
LSR R2, #1
2. Befehl (T)
R1 = R1 - R2
SUB R1, R2
3. Befehl (E)
R1 = R1/2
LSR R1, #1
4. Befehl (E)
else
Bei nicht
eintreten der
Bedingung
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
School of
Engineering
Ü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?
School of
Engineering
Übung3 - Lösung: Conditional MOVE
Beispiel1 :
MOVS R0, R1
School of
Engineering
-- R1 wird in R0 geschoben und Z flag wird 1 da R0 = 0
MOVEQS R0, R2 -- Da Z Flag = 1 wird R2 wird in R0 geschoben und Z flag wird 1 da
R2 = 0
MOVEQ R0, R3
-- Da Z Flag = 1 wird R3 in R0 geschoben
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? R0 ist 4
Übung4: Conditional Move
School of
Engineering
Übung4 - Lösung: Conditional Move
School of
Engineering
Übung5: Conditional Move
School of
Engineering
Übung5 - Lösung: Conditional Move
School of
Engineering