# Klassifikation
> Eigenschaften von Prozessoren
## Klassifizierung gemäß Operandenstruktur
### Stackarchitektur
- Stacks werden unabhängig von der jeweiligen Architektur verwendet
  - bei Unterprogrammaufrufen und Prarameterübergaben
- Call-Befehl
  - pusht Rücksprungadresse und ggf. Registerstati
- Return
  - popt Werte wieder
- ![image_257.png](image_257.png)

![image_254.png](image_254.png)

### Akkumulator Architektur
- Ausgezeichnetes Register: Akku(mulator) (_ehem. ACC_)
- LOAD und STORE wirken nur auf Akku
  - expliziter Operand, an jeder Operation beteiligt
    - jede Operation braucht nur eine Adresse
- Sehr kompaktes Befehlsformat
  - ![image_255.png](image_255.png)
- ![image_256.png](image_256.png)

### Register-Register-Architektur
- RISC (LOAD-STORE-Architektur)
  - alle Operationen greifen nur auf Register zu
    - 32-512 Register verfügbar
  - **nur** LOAD und STORE greifen auf Speicher zu
- Einfaches Befehlsformat fester Länge
  - ![image_258.png](image_258.png)
- alle Instruktionen brauchen in etwa gleich lange
- ![image_259.png](image_259.png)

### Register-Speicher-Architektur
- CISC (Mischung von Akkumulator- und Load-Store-Architektur)
- Operationen greifen auf Register und/oder Speicher zu
- Befehlsformat variabler Länge
  - mächtige Befehle
  - ![image_260.png](image_260.png)
- stark unterschiedliche Zeiten für Instruktionsausführung
- ![image_261.png](image_261.png)

## Klassifizierung gemäß Busaufbau
### [Vergleich Harvard- / von Neumann Architektur](MU6Rechner.md#vergleich-harvard-von-neumann-architektur)

### Bussysteme
- Systembus = Datenbus, Adressbus, Kontrollbus, Bus zur elektrischen Versorgung der Komponenten
  - teilweise zstzl. I/O-Bus
- ![image_262.png](image_262.png)


## Klassifizierung gemäß Befehlssätzen
### Orthogonale Befehlssätze
> Wenn Opcode, Adressierungsart und Datentyp beliebig kombiniert werden können

| **Vorteile**                                      | **Nachteile**                  |
|---------------------------------------------------|--------------------------------|
| Vereinfacht Nutzung der verfügbaren Instruktionen | Sehr umfangreiche Befehlssätze |


### CISC Kriterien
- Befehle unterschiedlicher Länge von 1-17 Byte
  - Speichereffizienz
  - komplexe Befehlskodierung
- Komplexer Befehlssatz
  - Anpassung an Compiler
  - Hochsprachenkonstrukte im Assembler
    - Erleichterung der Assemblerprogrammierung
  - Mächtige Befehle
    - kurze Programme

### RISC Prinzipien
- Grundlegendes Design-Prinzip
  - Einfachheit
- Befehle gleicher Länge (meist 32 Bit)
- Abarbeiten mit gleicher Taktzahl
  - erlaubt Befehlspipelines
- Eingeschränkter Befehlssatz (32-128 Befehle)
- Explizite Lade/Speicher-Befehle (Load-Store-Architektur)
- [3-Adress-Befehle](#3-adress-befehle)
- Delayed Branches
  - Pipeline enthält Befehl, dass Pipeline gelöscht wird
  - währenddessen kann noch eine Instruktion ausgeführt werden (_kein Jump_)

## Klassifizierung gemäß Speicherorganisation
### Little/Big Endian
![image_269.png](image_269.png)


### 4-Adress-Befehle
![image_263.png](image_263.png)
- Allgemeinste Form für Befehlsformat
- next_i = Adresse des nächsten Befehls
- schwierig zu programmieren
- wird für Microcode verwendet (CISC Mikroprogramme)

### 3-Adress-Befehle
![image_264.png](image_264.png)
- Standard bei RISC Prozessoren (_bspw. ARM 32 Bit_)
- 3 Adressen benötigen Platz
  - Format ist erst ab 32-Bit-Befehlssatz sinnvoll
- nächste Befehlsadresse implizit
  - Sprungbefehle können implizites Verhalten ändern

### 2-Adress-Befehle
![image_265.png](image_265.png)
- Standardformat für 8 und 16-Bit-Mikroprozessoren
- Format für Intel Prozessoren
- RISC-Prozessoren mit komprimierten Befehlssatz nutzen ebenfalls das Format
  - _bspw. ARM Thumb, MIPS_

### 1-Adress-Befehle
![image_266.png](image_266.png)
- Zielregister ist implizit und wird ACC genannt
- wird im [MU0-Design](MU0Rechner.md) benutzt
- Hohe Befehlsdichte
  - geringe Flexibilität

### 0-Adress-Befehle
![image_267.png](image_267.png)
- Beide Operanden und das Ziel sind implizit
- Befehlssatz nur für Stackarchitektur möglich
  - weitere Befehle mit Operanden zum Speichern / Laden nötig
- _verwendet in [Java Virtual Machine](12_Virtualisierung.md#anwendungsvirtualisierung)_

## Einordnung Prozessoren
![image_268.png](image_268.png)


