# Control Register

Ein Control Register (zu Deutsch: Steuerregister) ist ein spezielles Register in der Zentraleinheit eines Computersystems. Diese Register dienen zur Steuerung und Konfiguration des Prozessors (englisch Central Processing Unit, CPU) sowie bei der Verwaltung von Systemressourcen und Schutzmechanismen.

## Funktion und Verwendung

Die Hauptfunktion eines Control Registers besteht darin, verschiedene Steuerungs- und Konfigurationsinformationen für den Prozessor bereitzustellen und zu verwalten. Diese Informationen sind für die korrekte Ausführung von Programmen und für die Verwaltung des gesamten Systems von großer Bedeutung. Einige der wichtigsten Aspekte von Control Registers sind:
* Schutzmodus: In vielen modernen Betriebssystemen und CPUs ermöglicht ein Control Register die Steuerung des Schutzmodus. Dieser Modus unterscheidet zwischen privilegierten Aufgaben (Kernelmodus) und Benutzeranwendungen (Benutzermodus) und sorgt für die Trennung und den Schutz von Systemressourcen.
* Speicherverwaltung: Control Register sind oft für die Verwaltung von Speicherseiten und -segmenten verantwortlich. Sie können Informationen über Paging-Tabellen und Speicherberechtigungen enthalten.
* Interrupt-Steuerung: Einige Control Registers dienen der Konfiguration und Steuerung von Interrupts, wodurch die CPU auf externe Ereignisse reagieren kann.
* Systemsegmente: Control Registers können Basisadressen und Informationen zu Systemsegmenten wie der Global Descriptor Table (GDT) und der Interrupt Descriptor Table (IDT) speichern.

## Spezielle Control Register

In modernen CPUs gibt es verschiedene spezielle Kontrollregister, die für die Steuerung und Konfiguration der CPU sowie für die Verwaltung von Systemressourcen und Schutzmechanismen verwendet werden. Hier sind einige der wichtigsten speziellen Kontrollregister:
* Program Counter (PC) ist ein spezielles Register in der CPU (Central Processing Unit) eines Computers. Es spielt eine entscheidende Rolle bei der Ausführung von Programmen und der Abfolge von Instruktionen. Der Program Counter enthält die Speicheradresse der nächsten auszuführenden Instruktion im Hauptspeicher (RAM) des Computers. Bei der x86 Architektur ist dies anders, da verweist der PC, bei der x86 Architektur Instruction Pointer (IP) genannt auf die Adresse des nächsten, in der Warteschlange einzureihenden Befehls.
* Instruction Pointer (IP): In einigen CPU-Architekturen wird der Programmzähler auch als Instruction Pointer bezeichnet.
* Control Register 0 (CR0): CR0 ist ein spezielles Register, das in x86-Architekturen verwendet wird. Es enthält wichtige Steuerungsinformationen wie den Schutzmodus (Kernelmodus oder Benutzermodus), das Paging-Bit für die Speicherverwaltung und das Task-Switching-Bit.
* Control Register 3 (CR3): CR3 ist ein weiteres Register in der x86-Architektur und wird für das Paging und die Verwaltung von Seitenverzeichnissen verwendet. Es enthält die Basisadresse des Verzeichnisses des aktuellen Prozesses.
* Model-Specific Registers (MSR): Diese sind in x86-CPUs vorhanden und dienen dazu, prozessorspezifische Informationen zu speichern und zu konfigurieren. Sie können für Leistungsoptimierungen und erweiterte Funktionen verwendet werden.
* Debug Control Register (DR): Dieses Register wird für die CPU-Debugging-Zwecke verwendet und enthält Informationen wie Hardware-Breakpoints und Trigger-Bedingungen für das Debugging.
* Segment Registers: In x86-Architekturen gibt es Segmentregister wie CS (Code Segment) und DS (Data Segment), die Informationen über den Speichersegmentzugriff speichern.
* Task State Segment (TSS): Dies ist ein Register, das in x86-CPUs für das Task-Switching verwendet wird. Es speichert Informationen über den Zustand eines Prozesses.
* Global Descriptor Table Register (GDTR) und Interrupt Descriptor Table Register (IDTR): Diese Register speichern die Basisadressen der Global Descriptor Table (GDT) und der Interrupt Descriptor Table (IDT) und sind wichtig für die Systemsegmente.
Diese speziellen Kontrollregister spielen eine entscheidende Rolle bei der Steuerung und Verwaltung der CPU-Funktionalität, der Speicherverwaltung und der Prozessverwaltung. Die genaue Anzahl und Art der speziellen Kontrollregister können je nach CPU-Architektur variieren.

### Program Counter (PC)

Der PC enthält die Speicheradresse der nächsten auszuführenden Instruktion im Hauptspeicher (RAM) des Computers. Bei der x86 Architektur ist dies anders, da verweist der PC bzw. IP auf die Adresse des nächsten, in der Warteschlange einzureihenden Befehls.
Die Funktionsweise des Program Counters kann wie folgt beschrieben werden:
* Initialisierung: Der PC wird normalerweise zu Beginn eines Programms auf die Startadresse des Programms gesetzt, dh auf die Adresse der ersten auszuführenden Instruktion.
* Inkrementierung: Während die CPU Instruktionen ausführt, wird der PC automatisch inkrementiert, um auf die Adresse der nächsten Instruktion zu zeigen. Die Inkrementierung erfolgt in der Regel um die Größe einer Instruktion, sodass der PC auf die nächste aufeinanderfolgende Speicheradresse zeigt.
* Instruktionsabruf: Die CPU liest die Instruktion von der Adresse, auf die der PC zeigt, und führt sie aus. Dieser Prozess wiederholt sich kontinuierlich, wodurch das Programm Schritt für Schritt abgearbeitet wird.
* Verzweigungen: Wenn im Programm Verzweigungen (z. B. Schleifen oder bedingte Anweisungen) auftreten, kann der Wert des PC geändert werden, um auf eine andere Speicheradresse zu zeigen. Dies ermöglicht es der CPU, den Ablauf des Programms entsprechend zu steuern.
Der PC ist ein wichtiger Bestandteil der CPU, da er die aktuelle Position im Programm angibt und sicherstellt, dass die Instruktionen in der richtigen Reihenfolge ausgeführt werden. Wenn das Programm beendet ist, kann der PC auf eine spezielle Endadresse gesetzt werden, oder er kann auf Null zurückgesetzt werden, um die Ausführung zu beenden.

### Instruction Pointer (IP)

Der Instruction Pointer (IP) ist ein essenzielles Register in der CPU, das die Adresse der nächsten auszuführenden Instruktion im Hauptspeicher speichert bzw. bei der x86 Architektur auf die Adresse des nächsten, in der Warteschlange einzureihenden Befehls. Man sagt auch er zeigt auf dies Adresse, daher auch der Name, Pointer (egl. für zeigen). Während der Ausführung eines Programms wird der Wert des IP kontinuierlich aktualisiert, um auf die nächste auszuführende Anweisung im Speicher zu zeigen. Dies ermöglicht der CPU, den Programmcode Schritt für Schritt auszuführen und die präzise Abfolge der Befehle sicherzustellen. Bei Verzweigungen oder Sprüngen im Programm wird der IP entsprechend angepasst, um den richtigen Speicherort für die nächste Anweisung zu bestimmen. Der IP ist somit entscheidend für die Steuerung des Programmflusses und die korrekte Abfolge von Befehlen während der Programmausführung.

## Architekturen und deren Spezielle Control Register
### Die x86 Architektur

Im Kontext der x86-Architektur spielen Control Register (CR) eine entscheidende Rolle bei der Steuerung und Konfiguration des Prozessors und des Systems.
Hier sind einige wichtige Aspekte der x86-Architektur in Bezug auf Control Register:
Control Register (CR):
* In der x86-Architektur gibt es mehrere Control Register, darunter CR0, CR2, CR3 und CR4. Jedes dieser Register erfüllt spezifische Aufgaben bei der Steuerung und Konfiguration der CPU.
CR0 (Control Register 0):
* CR0 ist eines der wichtigsten Control Register in der x86-Architektur. Es enthält verschiedene Bits, die den Betriebsmodus des Prozessors festlegen, wie zum Beispiel den Schutzmodus (Kernelmodus oder Benutzermodus), den Paging-Modus für die Speicherverwaltung und das Task-Switching-Bit.
| Bit | Bezeichnung | Beschreibung |
| 0 | PE | Protected Mode Enable |
| 1 | MP | Monitor co-processor |
| 2 | EM | x87 FPU Emulation |
| 3 | TS | Task switched |
| 4 | ET | Extension type |
| 5 | NE | Numeric error |
| 16 | WP | Write protect |
| 18 | AM | Alignment mask |
| 29 | NW | Not-write through |
| 30 | CD | Cache disable |
| 31 | PG | Paging |
CR2 (Control Register 2):
* CR2 speichert normalerweise die lineare Adresse des letzten Seitenfehlers (Page Fault) im Paging-Modus. Dies ermöglicht es dem Betriebssystem, auf fehlerhafte Speicherzugriffe zu reagieren und die entsprechenden Maßnahmen zu ergreifen.
| Bit | Bezeichnung | Beschreibung |
| 0-31 (63) | PFLA | Page Fault Linear Address |
CR3 (Control Register 3):
* CR3 ist von entscheidender Bedeutung für die Speicherverwaltung in der x86-Architektur. Es enthält die Basisadresse des Verzeichnisses des aktuellen Prozesses und spielt eine Schlüsselrolle bei der Übersetzung von virtuellen Adressen in physische Adressen durch die Paging-Struktur.
| Bit | Bezeichnung | Beschreibung | PAE | Long Modus |
| 3 | PWT | Page-level Write-Through | (Nicht verwendet) | (Not used if bit 17 of CR4 is 1) |
| 4 | PCD | Page-level Cache Disable | (Nicht Verwendet) | (Not used if bit 17 of CR4 is 1) |
| 12-31 (63) | PDBR | Page Directory Base Register | Basiert auf PDPT | Base of PML4T/PML5T |
CR4 (Control Register 4):
* CR4 enthält verschiedene Steuerungsbits, die für erweiterte Prozessorfunktionen und Sicherheitsmechanismen verantwortlich sind. Dazu gehören beispielsweise die Enable-PSE-Bits für große Seiten und das Physical Address Extension (PAE)-Bit.
| Bit | Bezeichnung | Beschreibung |
| 0 | VME | Virtual 8086 Mode Extensions |
| 1 | PVI | Protected-mode Virtual Interrupts |
| 2 | TSD | Time Stamp Disable |
| 3 | DE | Debugging Extensions |
| 4 | PSE | Page Size Extension |
| 5 | PAE | Physical Address Extension |
| 6 | MCE | Machine Check Exception |
| 7 | PGE | Page Global Enabled |
| 8 | PCE | Performance-Monitoring Counter enable |
| 9 | OSFXSR | Operating system support for FXSAVE and FXRSTOR instructions |
| 10 | OSXMMEXCPT | Operating System Support for Unmasked SIMD Floating-Point Exceptions |
| 11 | UMIP | User-Mode Instruction Prevention (if set, #GP on SGDT, SIDT, SLDT, SMSW, and STR instructions when CPL > 0) |
| 13 | VMXE | Virtual Machine Extensions Enable |
| 14 | SMXE | Safer Mode Extensions Enable |
| 16 | FSGSBASE | Enables the instructions RDFSBASE, RDGSBASE, WRFSBASE, and WRGSBASE |
| 17 | PCIDE | PCID Enable |
| 18 | OSXSAVE | XSAVE and Processor Extended States Enable |
| 20 | SMEP | Supervisor Mode Execution Protection Enable |
| 21 | SMAP | Supervisor Mode Access Prevention Enable |
| 22 | PKE | Protection Key Enable |
| 23 | CET | Control-flow Enforcement Technology |
| 24 | PKS | Enable Protection Keys for Supervisor-Mode Pages |
* Die Register CR1, CR5-CR7 und CR9-CR15 sind reserviert. Versucht Software dennoch darauf zuzugreifen löst die CPU eine #UD-Exception aus.

### Extended Control Registers
#### XCR0

| Bit | Bezeichnung | Beschreibung |
| 0 | X87 | x87 FPU/MMX support (muss 1 sein) |
| 1 | SSE | XSAVE support für MXCSR und XMM register |
| 2 | AVX | AVX enabled und XSAVE support für die obere Hälfte des YMM register |
| 3 | BNDREG | MPX enabled und XSAVE support für BND0-BND3 register |
| 4 | BNDCSR | MPX enabled und XSAVE support für BNDCFGU und BNDSTATUS register |
| 5 | opmask | AVX-512 enabled und XSAVE support für opmask register k0-k7 |
| 6 | ZMM_Hi256 | AVX-512 enabled und XSAVE support für obere Hälfte der unterenZMM register |
| 7 | Hi16_ZMM | AVX-512 enabled und XSAVE support für obere Hälfte der ZMM register |
| 9 | PKRU | XSAVE support für PKRU register |
| Quelle: |||
Die Control Register in der x86-Architektur ermöglichen es dem Betriebssystem, die Funktionsweise des Prozessors und die Verwaltung des Speichersystems zu steuern. Sie sind entscheidend für den Schutz des Systems, die effiziente Verwaltung des Speichers und die Ausführung von Anwendungen im richtigen Kontext. Die x86-Architektur hat im Laufe der Jahre eine beeindruckende Entwicklung durchgemacht und ist weiterhin eine der wichtigsten und am weitesten verbreiteten CPU-Architekturen in der Welt der Computerhardware.

### ARM-Architektur

Die ARM-Architektur ist eine weit verbreitete CPU-Architektur, die in einer Vielzahl von Geräten und Systemen eingesetzt wird, von Mobilgeräten bis hin zu Embedded-Systemen und Servern. Innerhalb der ARM-Architektur spielen Control Register eine wichtige Rolle bei der Steuerung und Konfiguration des Prozessors und des Systems.
Im Kontext der ARM-Architektur gibt es verschiedene Arten von Control Register, die spezielle Aufgaben erfüllen:

#### CPSR (Current Program Status Register)

Das CPSR in der ARM-Architektur ist das aktuelle Programmstatusregister und enthält Informationen über den aktuellen Zustand des Prozessors. Es speichert Statusbits, die den Zustand des letzten Befehls wiedergeben, wie zum Beispiel das Überlauf-, Null- oder Negativitätsflag. Das CPSR ist entscheidend für die Verarbeitung von bedingten Anweisungen und den Programmfluss.

#### SPSR (Saved Program Status Register)

Das SPSR ist ein Register, das in Unterbrechungssituationen verwendet wird, um den Status des Prozessors vor einer Unterbrechung zu speichern. Dies ermöglicht es, den Zustand des Prozessors wiederherzustellen, wenn die Unterbrechung abgeschlossen ist und die Ausführung des unterbrochenen Codes fortgesetzt wird.

#### FPSR (Floating-Point Status Register) und FPEXC (Floating-Point Exception Control Register)

Diese Register sind speziell für die Verarbeitung von Gleitkommazahlen in ARM-Prozessoren vorgesehen. Das FPSR speichert Statusinformationen über Gleitkommaberechnungen, während das FPEXC zur Steuerung von Gleitkomma-Ausnahmen dient.

#### SCR (System Control Register)

Das SCR enthält verschiedene Steuerungsbits, die die Funktionen und Verhaltensweisen des ARM-Systems steuern. Dazu gehören zum Beispiel Bits zur Aktivierung von TrustZone-Sicherheitsfunktionen oder zur Konfiguration des Caches.

#### TTBR (Translation Lookaside Buffer Register) und DACR (Domain Access Control Register)

Diese Register sind für die Speicherübersetzung und Speicherverwaltung in ARM-Prozessoren verantwortlich. Sie ermöglichen die Übersetzung von virtuellen Adressen in physische Adressen und die Steuerung des Speicherzugriffs auf Domänenebene.
Die Control Register in der ARM-Architektur sind entscheidend für die Funktionsweise des Prozessors und die Steuerung von Systemressourcen. Sie ermöglichen die Konfiguration des Prozessors gemäß den Anforderungen der Software und des Betriebssystems, und sie spielen eine wichtige Rolle bei der Gewährleistung von Sicherheit, Leistung und Funktionalität in einer Vielzahl von Anwendungsdomänen.

## Weitere Registerarten
### General Purpose Register (GPR)

Es gibt auch noch General Purpose Register (GPR) diese dienen hauptsächlich dazu, Daten zu speichern und arithmetische/logische Berechnungen durchzuführen, während Control Register (CR) dazu verwendet werden, die Funktionsweise der CPU und des gesamten Systems zu steuern und zu konfigurieren. GPRs sind für die Datenverarbeitung und Zwischenspeicherung von Ergebnissen verantwortlich, während Control Register Informationen für Systemparameter und CPU-Steuerung enthalten, um den Betriebsmodus, den Speicherschutz, die Paging-Verwaltung und ähnliche Systemfunktionen zu kontrollieren.

### Arithmetik- und Logik-Register (ALU-Register)

In einer CPU werden Arithmetik- und Logik-Register (ALU-Register) in der arithmetischen und logischen Einheit (ALU) verwendet, um Operanden und Zwischenergebnisse von Berechnungen zu speichern. Sie sind entscheidend für die Durchführung von mathematischen Operationen und logischen Vergleichen während der Ausführung von Programmen.

### Indexregister

Indexregister sind eine weitere Art von Registern, die in einigen CPU-Architekturen verwendet werden. Sie dienen dazu, auf Elemente in Datenstrukturen wie Arrays oder Listen zuzugreifen. Diese Register erleichtern das effiziente Indizieren und Durchsuchen von Datenstrukturen.

### Statusregister

Statusregister speichern wichtige Informationen über den aktuellen Zustand der CPU und den Fortschritt von Berechnungen. Dazu gehören Flags, die auf das Ergebnis von Berechnungen hinweisen, wie zum Beispiel Überlauf, Null oder Tragen. Statusregister beeinflussen die Kontrollflusslogik und die Bedingungsanweisungen in Programmen.

### Stackpointer-Register

Der Stackpointer (SP) ist ein entscheidendes Register, das für die Verwaltung des Stapelspeichers verantwortlich ist. Er zeigt auf den aktuellen obersten Speicherplatz im Stack und wird für die Verwaltung von Unterprogrammaufrufen und zur Speicherplatzverwaltung verwendet.

### Basisadressenregister (Base Address Register)

Basisadressenregister sind in einigen CPU-Architekturen vorhanden und dienen dazu, die Basisadresse für bestimmte Speicheroperationen oder Segmentadressen zu speichern. Sie spielen eine Rolle bei der Adressberechnung und beim Zugriff auf Speichersegmente.

### Zeigerregister (Pointer Register)

Zeigerregister werden häufig in Programmiersprachen und zur Arbeit mit Speicheradressen verwendet. Sie ermöglichen es, auf Datenstrukturen und Speicherbereiche zuzugreifen, indem sie Adressen speichern und manipulieren.

### Counter-Register

In einigen CPU-Architekturen gibt es Counter-Register, die dazu verwendet werden, bestimmte Ereignisse oder Zählungen zu verfolgen. Dies kann beispielsweise für die Verarbeitung von Hardware-Interrupts oder Timer-Funktionen wichtig sein.

### Segmentregister

Segmentregister werden in x86-Architekturen verwendet, um Speichersegmente zu verwalten und auf sie zuzugreifen. Sie spielen eine Rolle bei der Segmentierung des Speichers und bei der Bereitstellung von Zugriffsrechten auf Speicherbereiche.

### Floating-Point-Register

Floating-Point-Register sind speziell für die Verarbeitung von Gleitkommazahlen in CPUs entwickelt worden. Sie ermöglichen die effiziente Durchführung von Berechnungen mit Dezimalbruchzahlen.

### Multimedia-Register

Moderne CPUs verfügen über Multimedia-Register, die für die Verarbeitung von Multimedia-Anwendungen wie Videokompression und -dekodierung optimiert sind. Diese Register verbessern die Leistung bei der Bearbeitung von Audio- und Videoinhalten.
Die Verwendung und das Management dieser Register sind entscheidend für die effiziente Ausführung von Programmen und Operationen auf der CPU. Je nach CPU-Architektur und Anwendungsanforderungen können verschiedene Arten von Registern vorhanden sein und andere fehlen, die spezielle Funktionen erfüllen.