## 📘 **Zusammenfassung: V9 Assembler – Computerarchitektur**

---

### 🏷 Begriffsklärungen

|Begriff|Bedeutung|
|---|---|
|**Assembler**|Programm, das Assemblersprache in Maschinensprache übersetzt|
|**Assemblersprache**|Maschinennahe Programmiersprache mit 1:1-Abbildung auf Maschinenbefehle|
|**Cross-Assembler**|Läuft auf Host-System, erzeugt Maschinencode für Target-System|
|**Disassembler**|Rückübersetzt Maschinencode in Assembler (Bezeichner, Kommentare gehen meist verloren)|
|**Macro-Assembler**|Unterstützt Makros zur Vereinfachung wiederkehrender Befehlssequenzen|
|**Pseudobefehl**|Befehl für den Assembler, der im Maschinencode aus mehreren echten Instruktionen besteht|

---

### 🎯 Vorteile von Assemblersprache

✅ Direkter Zugriff auf alle Merkmale der Hardware  
✅ Sehr kompakter & schneller Code möglich  
✅ Zeitkritische Routinen exakt steuerbar  
✅ Besseres Verständnis der Prozessorarchitektur

---

### ⚠️ Nachteile von Assemblersprache

❌ Schwierige Programmierung & Wartung  
❌ Zeitaufwändig, keine modernen Programmierkonzepte  
❌ Hardwareabhängig (nicht portabel)  
👉 **Kompromiss:** Inline-Assembler in Hochsprachen für kritische Teile

---

### 🖥️ MASM (Microsoft Macro Assembler)

- Verwendet für x86-Architektur
    
- Teil von Microsoft Visual Studio
    
- **Anweisungsformat:**
    
    ```
    [Label] Opcode Operanden ; Kommentar
    ```
    
- **Pseudobefehle:** Anweisungen an den Assembler, nicht an die CPU
    

---

### 🔁 Makros

- **Makrodefinition:** wie eine Inline-Funktion
    
- **Makroaufruf:** Ersetzung durch Makro-Rumpf
    
- **Mit Parametern:** ermöglicht Wiederverwendung mit unterschiedlichen Werten
    
- Vorteil ggü. Prozeduraufruf: kein Overhead durch Call/Return
    

---

### 🏃 Zwei-Pass-Assembler

#### 1️⃣ Erster Lauf

- Aufbau von Tabellen:
    
    - **Symboltabelle:** Marken, Adressen
        
    - **Opcode-Tabelle:** Mnemonics & Binärcode
        
    - **Pseudobefehlstabelle**
        
- Berechnung der **Instruction Location Counter (ILC)**
    

#### 2️⃣ Zweiter Lauf

- Übersetzung in Maschinencode
    
- Nutzung der Symboltabelle für Adressauflösungen
    
- Erzeugung des Objektprogramms
    

---

### 🔗 Binden (Linking) & Laden

- **Linker-Aufgaben:**
    
    - Erstellen des virtuellen Adressraums
        
    - Auflösen externer Referenzen
        
    - Relokation (Anpassung der Speicheradressen)
        
- **Relokationsregister:** Hardware fügt Startadresse hinzu
    
- **Paging:** nur Seitentabelle wird geändert
    

---

### 🌐 Dynamisches Binden (Dynamic Linking)

|Plattform|Mechanismus|
|---|---|
|**MULTICS**|Linkage-Segment mit Prozedur-Infos, Ausnahmebehandlung beim ersten Aufruf|
|**Windows**|DLLs (Dynamic Link Libraries), Implicit & Explicit Linking|
|**Unix**|Shared Libraries (SO-Dateien)|

---

### 📝 Für die Klausur merken

✅ Unterschied Assembler ↔ Compiler  
✅ Vor- & Nachteile Assemblersprache  
✅ Zwei-Pass-Assembler: Ablauf & Tabellen  
✅ Unterschied Pseudobefehl ↔ echter Maschinenbefehl  
✅ Makros: Definition, Aufruf, Parameter  
✅ Linker-Aufgaben: Relokation, externe Referenzen  
✅ Dynamisches Binden: Windows (DLL), Unix (SO)

---