# ARM

## ARM Prozessoren
### Architektur Revisionen
- Unterschiedliche Features
  - bspw. unterschiedliche Multiplikationsbefehle, Adressierungsarten, ...
- jeweils gleiches Befehssatzdesign für jede Revision
  - aktuell: v7 / v8

### Profile: Konkrete Prozessor-Implementierungen
- Application Profil ['A']:
  - High Performance
    - bspw. Mobile, Enterprise
- Real Time Profil ['M']:
  - Embedded Anwendungen
    - bspw. Automotive, Industriesteuerungen
- Microcontroller Profil ['M']:
  - Mikrocontroller für große Bandbreite an Anforderungen
    - Anzahl Gatter, Kosten, Realtime, Performance


- Aktuell in 2017:
  - v7 (32Bit):
    - Cortex A7, Cortex M4, Cortex M0+
  - v8 (64Bit):
    - Cortex A53, Cortex A57


## Bedeutung des Befehlssatzes (ISA)
- Befehlssatz = Instruction Set Architektur
- ISA Level
  - ist das Interface zwischen Soft- und Hardware
  - definiert die Sprache, die von Soft- & Hardware verstanden werden muss
- ![image_291.png](image_291.png)


### ARM Instruction Sets
![image_292.png](image_292.png)
- ARM unterstützt derzeit 3 IS
  - A64 instruction set
    - eingeführt mit ARMv8-A, um 64 Bit zu unterstützen
  - A32 instruction set ("ARM")
    - 32 Bit Befehlsatz in pre-ARMv8-Architekturen
  - T32 instruction set ("Thumb"/"Thumb2")
    - komprimierter 16/32 Bit Befehlssatz (gemischt)
      - in pre-ARMv8-Architekturen


## Coding Standards UAL und APCS
### Unified Assembler Language (UAL)
- Coding Standard, der von Compilern für ARM (32bit) und Thumb verstanden wird
- Macht Programme möglich, die mit verschiedenen Prozessoren kompatibel sind

### ARM Program Calling Standard (APCS)
- Regelt Aufruf von
  - Unterprogrammen
  - Verwendung von Registern
  - ...
- Ermöglicht Verwendung von Objektbibliotheken, welche von anderen Compilern übersetzt wurden


## Architektonisches Erbe der ARM-Prozessoren
**Verwendete Merkmale**
- RISC
- Grundlegendes Design-Prinzip: Einfachheit
- Load/Store Architektur (Register-Register), von Neumann
- 32Bit oder 64Bit (1 Wort)
  - 1Byte = 8Bit
- Byteweise Adressierung des Speichers
- Little-Endian und Big-Endian kompatibel
  - Vorteil für Einsatzzweck als Standard CPU in Kommunikationsgeräten
  - Standard: Little-Endian
- [3-Adressbefehle](Klassifikation.md#3-adress-befehle) (32Bit) oder Thumb

**Verworfene Merkmale**
- Registerfenster
  - wird nur bei SPARC Prozessoren genutzt
- Delayed Branches
  - der dem Branch folgende Befehl wird ausgeführt bevor der Sprung durchgeführt wurde
  - Behandlung von Interrupts und Exceptions schwieriger
- Ausführung aller Befehle in einem Taktzyklus
  - setzt [Harvard](MU6Rechner.md#harvard-architektur) voraus
  - Kompensation durch verbesserte Adressierungsmodi


## Ein erstes ARM-Programm (GNU)
![image_293.png](image_293.png)


### Wie wird aus einem Programm Maschinencode?
![image_294.png](image_294.png)
- Codierungsvorgang immer gleich
  - kann von Programm (_Assembler_) übernommen werden
    - Kann weitere Erleichterungen ermöglichen
      - Bezeichner Konstanten, Daten, Adressen
      - Reservieren von Speicherbereichen für (Zwischen-)Ergebnisse
      - Anlegen und Initialisieren von Daten und Datenstrukturen beim Programmstart hinzufügen
      - 


## [ARM Toolchain](arm_toolchain.md)

## [ARM Befehle](arm_befehle.md)