diff --git a/Writerside/images/image_477.png b/Writerside/images/image_477.png new file mode 100644 index 0000000..697ac5d Binary files /dev/null and b/Writerside/images/image_477.png differ diff --git a/Writerside/images/image_478.png b/Writerside/images/image_478.png new file mode 100644 index 0000000..697ac5d Binary files /dev/null and b/Writerside/images/image_478.png differ diff --git a/Writerside/images/image_479.png b/Writerside/images/image_479.png new file mode 100644 index 0000000..69781a9 Binary files /dev/null and b/Writerside/images/image_479.png differ diff --git a/Writerside/images/image_480.png b/Writerside/images/image_480.png new file mode 100644 index 0000000..f93d1ce Binary files /dev/null and b/Writerside/images/image_480.png differ diff --git a/Writerside/images/image_481.png b/Writerside/images/image_481.png new file mode 100644 index 0000000..150eac0 Binary files /dev/null and b/Writerside/images/image_481.png differ diff --git a/Writerside/images/image_482.png b/Writerside/images/image_482.png new file mode 100644 index 0000000..097a7e3 Binary files /dev/null and b/Writerside/images/image_482.png differ diff --git a/Writerside/images/image_483.png b/Writerside/images/image_483.png new file mode 100644 index 0000000..20af735 Binary files /dev/null and b/Writerside/images/image_483.png differ diff --git a/Writerside/images/image_484.png b/Writerside/images/image_484.png new file mode 100644 index 0000000..20af735 Binary files /dev/null and b/Writerside/images/image_484.png differ diff --git a/Writerside/images/image_485.png b/Writerside/images/image_485.png new file mode 100644 index 0000000..6244195 Binary files /dev/null and b/Writerside/images/image_485.png differ diff --git a/Writerside/images/image_486.png b/Writerside/images/image_486.png new file mode 100644 index 0000000..c3f24f8 Binary files /dev/null and b/Writerside/images/image_486.png differ diff --git a/Writerside/images/image_487.png b/Writerside/images/image_487.png new file mode 100644 index 0000000..61fd8ad Binary files /dev/null and b/Writerside/images/image_487.png differ diff --git a/Writerside/images/image_488.png b/Writerside/images/image_488.png new file mode 100644 index 0000000..02bb9b4 Binary files /dev/null and b/Writerside/images/image_488.png differ diff --git a/Writerside/images/image_489.png b/Writerside/images/image_489.png new file mode 100644 index 0000000..c3e750f Binary files /dev/null and b/Writerside/images/image_489.png differ diff --git a/Writerside/images/image_490.png b/Writerside/images/image_490.png new file mode 100644 index 0000000..d7e30d2 Binary files /dev/null and b/Writerside/images/image_490.png differ diff --git a/Writerside/images/image_491.png b/Writerside/images/image_491.png new file mode 100644 index 0000000..aef9fb2 Binary files /dev/null and b/Writerside/images/image_491.png differ diff --git a/Writerside/images/image_492.png b/Writerside/images/image_492.png new file mode 100644 index 0000000..0d0a460 Binary files /dev/null and b/Writerside/images/image_492.png differ diff --git a/Writerside/images/image_493.png b/Writerside/images/image_493.png new file mode 100644 index 0000000..f71da56 Binary files /dev/null and b/Writerside/images/image_493.png differ diff --git a/Writerside/images/image_494.png b/Writerside/images/image_494.png new file mode 100644 index 0000000..8a009c8 Binary files /dev/null and b/Writerside/images/image_494.png differ diff --git a/Writerside/in.tree b/Writerside/in.tree index f3d1a9a..13c2bfd 100644 --- a/Writerside/in.tree +++ b/Writerside/in.tree @@ -59,6 +59,10 @@ + + + + diff --git a/Writerside/topics/EWI/9_Internetökonomie.md b/Writerside/topics/EWI/9_Internetökonomie.md index 9e6db9d..3f36258 100644 --- a/Writerside/topics/EWI/9_Internetökonomie.md +++ b/Writerside/topics/EWI/9_Internetökonomie.md @@ -35,7 +35,7 @@ #### Kosten - Teuer in Produktion - Günstig in Verteilung/Reproduktion -- erste Digitale Kopie hat einmaligen Aufwand an Fixkosten +- erste digitale Kopie hat einmaligen Aufwand an Fixkosten - **First Copy Costs** - Stückkostendegression - "The Winner takes it all!" diff --git a/Writerside/topics/RA/arm_adressierung.md b/Writerside/topics/RA/arm_adressierung.md index c8f7d7e..431880f 100644 --- a/Writerside/topics/RA/arm_adressierung.md +++ b/Writerside/topics/RA/arm_adressierung.md @@ -127,4 +127,32 @@ ## Beispiel Kopieren indiziert - ![image_437.png](image_437.png) - ![image_438.png](image_438.png) -- \ No newline at end of file + + +## Load/Store - Befehlsformat +![image_477.png](image_477.png) + +## Adressierungsarten übersicht +| Art | ARM-Beispiel | Alternativer Name | +|-----------------------------|----------------------------------------------------------------------------------|--------------------------------------------------------------------------| +| Immediate | `mov r0, #8` | Literal | +| Direkt | wird nicht unterstützt | Absolute | +| PC-relativ | `ldr r1, [pc, #offset]`
Pseudobefehl, `label` in `.text`
`ldr r1, label` | | +| Register | `mov r0, r1` | Register-to-Register
Register Direct | +| Register-Indirect | `ldr r0, [r1]` | Indexed | +| Indiziert / Index | `ldr r0, [r1, #4]`
`ldr r0, [r1, #4]!`
`ldr r0, [r1], #4` | Pre-indexed
Post-indexed,
pre-incrementing
post-incrementing | +| Basis-indizierte | `ldr r0, [r1, r0, LSL#2]` | | +| Basis-indizierte mit Offset | wird nicht unterstützt | | + + +## Blocktransfer-Befehle +![image_478.png](image_478.png) +- Register mit niedrigster Nummer wird geladen von/gespeichert nach der niedrigsten Adresse +- Reihenfolge der angegebenen Register im Befehl spielt keine Rolle + +### Beispiel +![image_479.png](image_479.png) + +## Stacks +- push {} +- pop {} \ No newline at end of file diff --git a/Writerside/topics/RA/arm_hochsprache_strukturen.md b/Writerside/topics/RA/arm_hochsprache_strukturen.md new file mode 100644 index 0000000..b385a73 --- /dev/null +++ b/Writerside/topics/RA/arm_hochsprache_strukturen.md @@ -0,0 +1,170 @@ +# ARM Hochsprache Strukturen +## Unterprogrammtechnik +- wird durch `bl Unterprogramm` aufgerufen + - _Unterprogramm_ muss zu dem Zeitpunkt bereits ein bekanntes Label sein + +| Blatt-Routinen | Nicht-Blatt-Routinen | +|--------------------------------|--------------------------| +| rufen keine Unterprogramme auf | rufen Unterprogramme auf | + + +## Unterprogrammaufruf +![image_482.png](image_482.png) + +## Indirekte Unterprogrammaufrufe +- Falls Adresse zur Compilezeit nicht bekannt ist + +- Annahme: aufzurufende Programmadresse steht in r0 + - `mov lr, pc` + - `mov pc, r0` + - Durch Pipelining entsteht im PC die aktuelle Bitadresse +8 + - Da jeder Befehl Länge von 4 Byte hat + - Linkregister zeigt auf Rücksprungadresse + +## ARM Procedure Calling Standard (APCS) +- Schnittstelle zwischen Programmteilen + - Wie werden Parameter an Unterprogramme übergeben + - Welche Register dürfen zerstört werden + - Wie werden Ereignisse zurückgegeben + - Wie sieht das Stackframe eines Unterprogramms aus + +### Konvention zur Parameterübergabe von 32Bit-Daten +- ![image_483.png](image_483.png) +- Parameter 1-4 werden in den Registern r0-r3 übergeben +- Rückgabewert von Funktionen steht im Register r0 oder r0/r1 +- Register r0-r3 und Register ip sind Scratch Register + - Inhalt darf im Unterprogramm zerstört werden +- Informationen in r4-r10, fp, sp müssen erhalten werden +- Inhalt von lr wird zur Rückkehr ins aufrufende Programm benötigt + +## Parameterübergabe bei anderen Prozessoren (CISC) +- ![image_484.png](image_484.png) +- Übergabe in Registern typisch für Load/Store-Architekturen + - vermeidet Zugriffe auf Speicher +- Andere Prozessoren verwenden Stack + - Parameter + - Rücksprungadresse (PC) +- Ergebnis im ACC zurückgeben + +## Blatt-Funktionen +- können lokale Variablen in Scratch-Registern speichern +- Rückkehradresse kann im Linkregister bleiben +- ![image_485.png](image_485.png) + +## Nicht-Blatt-Funktionen +- Linkregister wird durch neue Rücksprungadresse überschrieben + - vorher auf Stack retten +- Scratchregister dürfen durch neues Unterprogramm frei verwendet werden + - keine lokalen Variablen speichern +- Variablenregister verwenden + - von Anfang an auf Stack +- ![image_486.png](image_486.png) + +## Unterprogramm +- Unterprogrammaufruf mit Parameterübergabe +- Dokumentation + - Übergabewerte & lokale Variablen +- Eingangsprüfung Parameter + - ggf. Abbruch +- ggf. Register retten +- Initialisation Rückgabeparameter, lokale Variablen +- Programmkörper beachten + - Anweisungen, Schleifen, Verzweigungen: Grenzfälle der Indizes +- Speicherzugriffe passend zur Datengröße +- ggf. Register restaurieren +- Rückgabewert setzen +- Rücksprung + +## Operanden in Ausdrücken +- Argument im Register +- Argument auf dem Stack + - Stackpointer + - Relative Adressierung + - Stackpointer + Offset +- Als Konstante im Literal-Bereich der Prozedur + - PC-relative Adressierung mit Offset +- Als lokale Variable + - liegt im Stack + - Zugriff relativ zum Stack-Pointer / Frame-Pointer mit LDR +- Als globale Variable + - liegt im statischen Datenbereich im Speicher + - Adresse liegt relativ zur statischen Basisadresse +- Zeiger +- Array + - Kurzschreibweise für Zeiger + Offset + + +## Kontrollfluss +### IF-ELSE +![image_487.png](image_487.png) + +### Switch +![image_488.png](image_488.png) +```c++ +int testswitch( int a, int* b, int c ) { + switch (a) { + case 0: + *b = 0; + break; + case 1: + if ( c > 100 ) *b = 0; + else *b = 3; + break; + case 2: + *b = 1; + break; + case 3: + break; + case 4: + *b = 2; + break; + } +} +``` + +### While +![image_489.png](image_489.png) + +### Do-While +![image_490.png](image_490.png) + +### For +![image_491.png](image_491.png) +```c++ +void testfor( int a[]) { + for (int i = 0; i < 10; i++){ + a[i] = 0; + } +} +``` + +## Objekte, (virtuelle) Methoden +### Methodenaufrufe bei Objekten +- Methode bekommt als ersten Parameter immer einen Zeiger auf das betreffende Objekt (this) + - Zugriff auf Daten des Objektes gewährleistet + +### Statischer Objektaufruf +- Falls Methoden einer Klasse nicht virtuell + - Compiler kann zur Compile-Zeit schon Klasse bestimmen und Adresse der Methode einsetzen + +### Dynamischer Methodenaufruf +- ![image_492.png](image_492.png) + +## Beispiele Assemblerprogramme +### my_max +```c++ +#include +void my_max(int a, int b, int* c) {} + if (a > b) + *c = a; + else + *c = b; +} +``` + +#### my_max ohne Optimierung +![image_493.png](image_493.png) + +#### my_max mit Optimierung +![image_494.png](image_494.png) + diff --git a/Writerside/topics/RA/arm_hochsprache_typen.md b/Writerside/topics/RA/arm_hochsprache_typen.md new file mode 100644 index 0000000..6383aea --- /dev/null +++ b/Writerside/topics/RA/arm_hochsprache_typen.md @@ -0,0 +1,55 @@ +# ARM Hochsprache Typen +## Abstraktion +- Assembler + - Programme auf Basis von + - Befehlen, Adressen, Register, Byte, Wort, ... + - Abstraktion + - wird durch Software erreicht + - keine explizite Sprachunterstützung +- Hochsprachen + - unterstützen besser das Denken in abstrakten Begriffen + - CPU-unabhängig + +## Datentypen +- Kennzeichnen sich durch + - Anzahl benötigte Bits + - Anordnung der Bits + - Art der Verwendung der Bits +- Datentypen + - Positive/Negative Ganzzahlen + - binär, dezimal, hexadezimal, Wertbereiche + - Gleitkommazahlen + - [Zeichen](#zeichen) + +## Zeichen +- Erste Mainframes + - Uneinheitliche Codierung von Buchstaben +- ASCII: + - 7Bit +- diverse ISO + +## ANSI C Basisdatentypen +- Char +- Short Integer +- Integer +- Long Integer +- Float +- Double +- Long Double +- Aufzählungstypen +- Bitfelder + +### Abgeleitete ANSI C Datentypen +- Arrays +- Funktionen +- Strukturen +- Zeiger/Pointer +- Varianten/Unions + +## Gleitkommazahlen +### ISO IEEE754 +![image_480.png](image_480.png) + +- Beispiele + - ![image_481.png](image_481.png) +