ARM7

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

  1. Muss 1 sein
  2. Muss 0 sein
  3. 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