Die Adressierungsarten müssen wir für die Klausur beherschen!
3.2.1 Statusregister
FLAGS - N,Z,C,V
Werden verwendet um Ergebnis einer logisch-arithmetisches Operation anzuzeigen
Condition Flags
position 16-19 sind 3 greater equal bits verwendet in audio/ video dateien
A und E sind bits für Fehlerzustände
7 und 6 zum perren von interrupts
5 : SAM Arhcitektur ?
FIQ / IRQ Interrupts
Abort : etwas schief gelaufen System : wenn das System startet
Flags
Das N-FLag ist ein Flip FLop
Z : NOR verknüpfung aller bits der arith-log 1 wenn ergebnis nicht 0 ist ?
V ( Overflow Flag ): Beispiel : wir rechnen 7 + 2 in binary, 4 bits, signed interpretation
Der Prozessor unterscheidet nicht zwischen signed und unsigned Warum ? : Aufgrund von der Architektur des mangelns
In der ALU haben wir ein Addierwerk aber kein Subtrahierwerk !
Ein subtraktions-befehl der ALU ist eigentlich ein Addierbefehl
Wir müssen als Programmierer wissen welche Interpretation wir wählen, signed oder unsigned !
In der Programmiersprache C wird nicht geprüft auf signed unsigned, der Prozessor geht davon asu dass es schon klappen wird
Bei Audiosignalen kann ein overflow sehr schlim msein, wir produzierne dabei sehr hochfrequenzige Signale, die Leistungsabgabe des Verstärkers und eines Lautsprechers fallen massiv
Um dies du reparieren haben Sättigungsbefehle, wie die Additionsättigung
Wenn wir über die Grenze der Bits kommen, gibt es keinen Overflow, sondern es stoppt beispielsweise bei 255
4k Fernseher mit 100Hz
Das Bild muss so oft aktualisiert werden, dass der Fernseher die Bilder selbst die Zwischenwerte berechnet
Wir benutzen eine Parabel zur Interpolation
Wenn das Bild hängt, gibt es Effekte zwischen Bildern und Interpolationsverfahren Interpolationsalgorithmen werden hierbei dafür angepasst
[!Overflow → Signed, Carry → unsigned ]
Wenn wir Befehle ohne S benutzen, setzt der Prozessor die Befehle nicht
Wichtig : S muss am ende des Befehls sein ! NIcht am Anfang, da dies Sättigungsbefehle wären
Wir können FLAGS setzen oder nicht
Fun with FLags : Wir können alle BEfehler Bedingt ausführen
Wenn eine bestimmte Bedingung nicht erfüllt ist, Befehl nicht ausführen : NOP - NO OPERATION
Früher : Bedingte ausführung von Befehlen nur auf Sprungbefehle begenzt
Logisch-Arithmetisceh Befehle wurden immer ausgeführt
Bei einer Pipeline gibt es Hazards ? (Kennen wir aus RAR??)
Data Hazard : Abhängigkeit innerhalb der Pipeline, erstes Ergebnis einer Addition wird bereitgestellt, aber ein anderer Befehl braucht ihn schon vorher
Control Hazard : Pipeline effektiv, wenn SIe voll ist.
Unsere Pipeline : 1 Befehl pro Zyklus, Superskalar : 2-3+ Befehle
Ein Sprungbefehl ist für eine Pipeline immer schwer, damit die pipeline für 10-13 Zyklen nicht leer läuft, Benutzen wir Branch Prediction
Der ARM7TDMI hat keine Branch Predicition oder Superskalare Features
Jeder Sprung der genommen hat eine Penalty von 2 Zyklen Macht unseren Prozessor langsam LÖSUNG : Bedingt Ausführung des Befehls, hierbei wenn Bedingung nicht ausgeführt : Kostet 1 Zyklus, nicht mehr im Falle von Sprung Penalties → PIPELINE GEFÜLLT
Ab 3 bedingte Befehle ist es günstiger als Sprungbefehl
Wir haben 14 Möglichkeiten, um bedingungen zu kodieren
Früher : Es gab noch Bedingung : never
Conditions
- Muss 1 sein
- Muss 0 sein
- Ist egal ob 1 oder 0
Bedingungen für die Flags :
gesetzt : set , gelöscht : clear ( Vergleiche )
ADDEQ R0,R1,R2
nur dann ausgeführt, wenn das Z flag im CPSR gesetzt ist
## Beispiel 005
CMP R0, R1
SUBGT R0,R0,R1
SUBLT R1,R1,R0
BNE gcd
1 Woche gearbeitet : 5000 euro
CMP R0,R1
## Entsprechend des Vegleichs werden die COndition-Flags im CPSR gesetzt !
// Cortex m4 / m7 : LDD befehl
3.2.2 Barrel Shifter
Warum heißt Cordon Bleu Cordon Bleu
LSL → Logic shift Left
Wir haben heut die Polyadische Zahlendarstellung Manche Sachen haben Ihren Tieferen grund
ASR - Arithmetic shift right
1110
LSR 0111 -> Division durch 2
ASR 1111 -> auffüllen mit 1 0der 0
3 / 2 1 -3/2 -(3/2) == -1
1101 = -3
110 = -2
ASR bei negativen zahlen rundet gegen - unendlich
Das ist der Unterscheid zwishcen ASR und der Division
Wichtig : right shift operator in C : bei unsigned : LSR
signed : UNDEFINED !!!!
DO NOT DO IT
Schiebeoperationen : bei unsigend ohne Probleme
Aber bei signed : nicht benutzen, außer man ist sich sehr sicher was man macht
ROR - rotate right
RRX - damit können wir um das carry 33 bit rotieren
Rm, Menemonic Bitzahl
Rm, RRX
[! WENN IM SKRIPT RXR dann als RRX interpretieren]
SUB R1,R2,R3 ; R1 <- R2 - R3 * 2²
Wie mit ASR runden umgehen ?
1 drauf addieren ! (Bei negativen zahlen)
3.2.3 Kodierung
Sophie WIlson hat die ersten 3 Bits verwendet um den Befehl zu klassifizieren