Kap.2 Befehlsschnittstelle Prozessoren, externe Sicht
2 Befehlsschnittstelle 2.1 elementare Datentypen, Operationen 2.2 logische Speicherorganisation 2.3 Maschinenbefehlssatz 2.4 Klassifikation von Befehlssätzen 2.5 Unterbrechungen 2.6 Prozesse
Speicherorganisation Speicher repräsentieren den Zustand eines Rechensystems, bzw. eines Programms Konfiguration Wir unterscheiden Hauptspeicher und Registerspeicher.
Hauptspeicher (1) großes adressierbares Array i.d.r. Byte-Adressierung, d.h. jedes Byte besitzt eine eigene, eindeutige Adresse größeren Datentypen (z.b. int) sind mehrere Bytes zugeordnet (little endian, big endian: siehe unten)
Hauptspeicher (2) Aus Performance-Gründen ist Schreiben einzelner Bytes/Bits oft gar nicht möglich Ausrichtung an Wortgrenzen: Alignment Bsp.: 4-Byte-Wort beginnt mit Byte-Nr. (Adresse), die durch 4 teilbar ist.
Hauptspeicher (3) maximale Größe: m Bits für Adresse 2 m adressierbare Speicherzellen 16-bit Adressen bei DEC PDP-11 24-bit Adressen bei IBM Großrechnern 64-bit bei DEC Alpha, SuperSPARC
Nummerierung der Bytes (1) little endian am wenigsten signifikanter Teil erhält die niedrigste Byte-Adresse big endian der signifikanteste Teil erhält die niedrigste Byte-Adresse
Nummerierung der Bytes (2) von Rechner zu Rechner verschieden manche unterstützen beide Formate (umschaltbar) i.d.r. merkt der Benutzer nichts davon, es sei denn man möchte auf einzelne Bytes explizit zugreifen Bei Zahlendarstellungen sind little endians natürlicher. Bei Strings (Voraussetzung: 1. Zeichen ist signifikantester Teil ) sind big endians natürlicher.
Registerspeicher Viel kleiner als Hauptspeicher, aber auch viel schneller kann genutzt werden, um lokale Informationen in Registern zu halten und so die Ausführung von Programmen zu beschleunigen Vorteil, wenn sich Programme in gewissem Umfang lokal verhalten: Schneller Zugriff auf Informationen Kurze Adreßteile in Maschinenbefehlen
Designparameter Größe je nach Architektur unterschiedlich große Registerspeicher kleine Registerbank: wenige Bit zur Ansteuerung/Befehlskodierung, aber für schnelle Ausführung ist dann schnelle Speicherarchitektur (z.b. schneller Cache- Speicher) notwendig große Zahl: Befehlsgröße wächst, Ausführungszeit klein
Funktionalität homogen: alle Register haben gleiche Funktionalität einfach zu nutzen (einfache Codeerzeugung) inhomogen: special purpose register Bsp.: ACCU, Stack pointer, Statusregister, Befehlszähler,... erleichtert schnelle Ausführung von speziellen Operationen, z.b. Stack pointer bei push/pop vom Kellerspeicher (Manipulation des Stack pointers bei push bzw. pop kein eigener Befehl!) Ermöglichen evtl. kompakteren Code, z.b. Wenn Ergebnis immer in speziellem Register anfällt, dann muß dieses im Befehl nicht kodiert werden.
Registerfunktionen Adressregister Datenregister Spezialregister
Spezialregister (1) Akkumulator-Register (ACCU) speichert (einen Operanden und) Ergebnis einer arithmetischen Operation unterstützt evtl. Ausführung von Schieben Programmzähler (Befehlszähler) erzeugt durch Inkrementieren aufeinanderfolgende Programmadressen bei Sprungbefehlen neuen Wert laden
Spezialregister (2) Instruktionsregister nimmt den aus dem Speicher gelesenen Befehl auf Statusregister / Condition-Code- Register Informationen, die aus Operationen resultieren,z.b. Überlauf (overflow flag) Übertrag (carry flag) Vorzeichen (sign flag) Ergebnis = 0 (zero flag)
Spezialregister (3) Stack-Pointer (Kellerzeiger) aktuelle Höhe des Kellers in Stack-Pointer- Register gespeichert Keller z.b. zur Verwaltung von Rücksprungadressen und lokalen Variablen bei Unterprogrammen
Beispiele (1) Motorola MC 68000 (1980-- ) 16-bit Prozessor, interne Struktur 32 bit 16 weitgehend homogene 32-bit Register (8 Daten-, 8 Adress-) 3 Stack Pointer-Register (Auswahl je nach Prozessorzustand: normale Userroutine / Betriebssystemroutine / Interrupt) 5 weitere Spezialregister optional 8 80-bit floating point Register
IPS (z.b. in Silicon Graphics Workstations) 1960 1965 CDC 6600 1963 Historische Einordnung von MIPS und anderen RISC- Architekturen 1970 IBM ASC 1968 1975 CRAY 1 1976 IBM 801 1975 1980 Berkeley RISC-1 1981 Stanford MIPS 1982 1985 SPARC v8 1987 MIPS I 1986 PA-RISC 1986 RT/PC 1986 America 1985 1990 SPARC v9 MIPS II 1989 MIPS III 1992 Alpha 1992 Power-2 Power-1 1990 PowerPC
Beispiele (2) MIPS I/II 32-bit RISC Prozessor 32 weitgehend homogene 32-bit Register (bis auf Register mit Nr. 0 und 1, die Spezialregister darstellen) 2 Register HI und LO für Ergebnisse von Multiplikationen und Divisionen kein Condition-Code-Register 32 32-bit floating-point-register (einzeln für single precision, paarweise für double precision)
Beispiele (3) Intel 80386/486 (1985-90) 32-bit Prozessor 16 Register, 10 32-bit, 6 16-bit jedes Register hat (mehr oder weniger) spezielle Aufgaben 8 floating-point-register (80-bit)