Rechnerarchitektur

Rechnermodell

Das Bild des Rechnermodells zeigt Sie sind durch verschiedene Leitungen miteinander verbunden:

Von-Neumann-Prinzipien

John von Neumann postulierte grundlegende Architekturprinzipien auf, nach denen Computer möglichst gebaut werden sollten, um universell nutzbar zu sein:

Programmiermodell eines Prozessors (Intel)

Das Programmiermodell eines Prozessors ist eine Abstraktion, die nur diejenigen Komponenten enthält, die für die Programmierung sichtbar sind, also insbesondere die vom Code explizit ansprechbaren Register des Prozessors.

Der Intel 8086 hat folgende Register:
8 bit 8 bit
AX:  AH AL
BX:  BH BL
CX:  CH CL
DX:  DH DL
 
SP (stack pointer)
BP (base pointer)
SI (source index)
DI (destination index)
 
IP (instruction pointer)
 
CS (code segment)
DS (data segment)
SS (stack segment)
ES (extra segment)
 
Flags: S, Z, O, C, ...
Die Flags geben Eigenschaften des Ergebnisses einer der letzten Instruktionen an, z.B. das Vorzeichen (S, sign), ob das Ergebnis Null war (Z, zero), ob ein Überlauf (bei Rechnung mit Vorzeichen) stattgefunden hat (O, overflow), ob ein Überlauf (bei Rechnung ohne Vorzeichen) stattgefunden hat (C, carry).

Assemblerprogrammierung (Intel), Einführung

	; Lege Anfagsadresse der Codegenerierung fest
	; (altmodische Technik, unter MSDOS für "kleines Speichermodell" 
	; geeignet, bei dem das Programm bis zu 64KB groß ist)
	ORG 100h
	MOV AX,CS	; Adressbasis (Segmentadresse) kopieren, 
	MOV DS,AX	; ... korrekte Adressierung der Daten sicherstellen
	JMP start	; Datenbereich überspringen, zum Programmanfang

	; Datenbereich
zahl1:	DB 5	; Variable mit 1 Byte und Anfangsinhalt 05h
zahl2:	DW 3456	; Variable mit 1 Wort (2 Byte) und Anfangsinhalt 0D80h
text1:	DB 'Hallo',13,10,'$'	; Zeichenfolge (8 Bytes):
			; 5 Bytes mit ASCII-Codes für 'H' 'a' 'l' 'l' 'o'
			; 2 Bytes mit ASCII-Codes für CR/LF (Zeilenwechsel)
			; 1 Byte mit '$'-Zeichen als Endemarkierung

	; Programm
start:
	; Beispiel für 8-Bit-Ladebefehl:
	MOV AL,[zahl1]	; AL ← M[zahl1]

	; Beispiel für 16-Bit-Ladebefehl:
	MOV AX,[zahl2]	; AL ← M[zahl2]

	; Ausgabe des Begrüßungstextes:
	MOV DX,text1	; DX ← Adresse des Textes
	MOV AH,9	; AH ← Code der MSDOS-Funktion "WRITE STRING"
	INT 21h		; MSDOS aufrufen

	; Programm beenden
	INT 20h

	; Ende der Assembler-Übersetzung
	END

Hinter "end" kann hier jetzt z.B. das Lied von der Glocke stehen.

Befehlssatz eines Prozessors

Der Befehlssatz eines Prozessors lässt sich in Gruppen aufteilen: Eine Übersicht des Befehlssatzes des Intel-80186-Prozessors gibt die Intel-Code-Tabelle.

Befehlsoperanden

Operandenlängen

Operanden einer Maschineninstruktion sind typischerweise 8 Bit (1 Byte), 16 Bit (bei Intel 1 Wort), oder 32 Bit (bei Intel 1 Doppelwort); es gibt auch Bitoperationen.
Die meisten Befehle gibt es in Varianten für unterschiedlich lange Operanden.
Byte (8 Bit) MOV AL,[zahl1]
Word (16 Bit) MOV AX,[zahl2]
Bit STC ; Carry-Flag setzen

Die Unterscheidung der Operandenlängen erfolgt bei manchen Assemblern explizit durch unterschiedliche symbolische ("mnemonische") Befehlsnamen (z.B. Standard-Linux-Assembler), bei anderen meist implizit durch die Länge bekannter (Register) oder deklarierter Operanden (Microsoft, Borland, nasm).

Addressierungsmodi

Maschineninstruktionen können auf verschiedene Weise an die Daten ihrer Operanden kommen. Auch hierfür gibt es Varianten der Maschineninstruktionen, die Adressierungsarten; bei manchen Prozessoren kann die Adressierungsart sogar für die Operanden unabhängig variieren.

Stack

Der Stapelspeicher ist eine Organisationsform für Speicherzugriffe, die nach dem Prinzip „last in first out“ (LIFO) erfolgen. Dieser Zugriffsmodus wird von der Hardware unterstützt, weil er für viele Zwecke elementar von Nutzen ist.

Der Stackpointer zeigt jeweils auf das „obere“ Ende des Stapels. Er wird von den Zugriffsbefehlen automatisch verwaltet und angepasst. Diese sind:

Einsatz des Stacks

  1. für Rückkehradressen von Unterprogrammen
  2. zum Zwischenspeichern („Retten“) von Daten (meist aus Registern) zur spätere Wiederherstellung und Weiterverwendung, während das Register zwischenzeitlich anderweitig genutzt wird
  3. für Funktionsparameter
  4. für lokale Daten (Variablen) von Funktionen
  5. als fest verdrahtete Stack-Architektur, z.B. im Intel-Gleitkomma-Rechenwerk oder in den HP-Taschenrechnern (Emulator Free42)

Interrupts

Ein Interrupt ist die Unterbrechung der regulären Programmabarbeitung aufgrund eines besonderen Ereignisses. Auslöser für einen Interrupt können in drei Gruppen unterteilt werden: Im Falle eines externen Interrupts teilt das Gerät (z.B. I/O-Controller) der CPU den Interrupt-Wunsch über ein Steuersignal mit, den Interrupt Request IRQ. Nachdem die CPU die Bereitschaft über ein Steuersignal Interrupt Acknowledge mitgeteilt hat, legt das Gerät die Nummer des Interrupts auf den Datenbus.

Simultaner Speicherzugriff

Virtueller Speicher

Beschleunigung des Speicherzugriffs / Cache

Wir betrachten die Zugriffsgeschwindigkeit für dynamischen RAM (DRAM) als Hauptspeicher. Die Speicherzelle selbst (s. Exkurs) hat sich seit Jahrzehnten im Aufbau nicht verändert.

Zugriffstechnologie

Zwischen CPU und Speicherbausteinen ist (je nach Speichertechnologie) ein Protokoll (definiertes Zugriffsverfahren) festgelegt, das den Übermittlung von Adressen und Daten im Wechsel mit Steuersignalen (Handshake) regelt.

Zugriffsorganisation

Systemarchitektur: Cache

Klassifizierungen von Rechner-/Prozessorarchitekturen

Beschleunigung des Prozessors