84
Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik 4.4.2011 Rechnerarchitekturen I 1 Rechnerarchitekturen I Befehlssatz Dr. Michael Wahl

Rechnerarchitekturen I Befehlssatz - onwebo.deonwebo.de/data/uni/ra1/02_Befehlssatz.pdf · Beachten von Operator-Prioritäten (=> Reihenfolge)" Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 1

Rechnerarchitekturen I Befehlssatz

Dr. Michael Wahl

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 2

Die fünf klassischen Rechnerkomponenten

Control: Steuerung!Datapath: Datenpfad

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 3

Die fünf klassischen Rechnerkomponenten

Der Datenpfad enthält funktionale Einheiten zur Manipulation von Daten, insbesondere klassische „Recheneinheiten“ wie Addierer, Multiplizierer, etc.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 4

Die fünf klassischen Rechnerkomponenten

Das Steuerwerk enthält funktionale Einheiten zur Koordination des Ablaufs von Programmen. Es regelt das Zusammenspiel aller Prozessorkomponenten.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 5

Die fünf klassischen Rechnerkomponenten

Der Speicher enthält die Programme und Daten vor, während und nach der Ausführung der Programme.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 6

Die fünf klassischen Rechnerkomponenten

Die Eingabeeinheiten übertragen Programme und zu verarbeitende Daten in den Speicher.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 7

Die fünf klassischen Rechnerkomponenten

Die Ausgabeeinheiten lesen Ergebnisdaten aus dem Speicher und stellen sie der „Umwelt“ zur weiteren Nutzung zur Verfügung.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 8

Die fünf klassischen Rechnerkomponenten

Damit das Ganze auch sinnvoll funktioniert braucht man aber noch

etwas mehr:

Eine formale Schnittstelle, die die Kommunikation zwischen Rechner und

Umwelt organisiert.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 9

Der Instruktionssatz: Schnittstelle zwischen Compiler und Rechner

Compiler

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 10

Grundlegende Ideen •  Instruktionssatz

–  Formale Sprache zur Beschreibung der einzelnen Aktionen, die ein Prozessor ausführen kann.

–  Einfache Form einer Programmiersprache, Maschinensprache •  Eigenschaften

–  Die Instruktionssätze aller Prozessoren sind sich relativ ähnlich –  Sie sind einfach gehalten, um gleichzeitig die Möglichkeiten der

Hardware und die Fähigkeiten der Compiler zu unterstützen. •  Beispiele:

–  Der MIPS-R2000-Instruktionssatz: einfach, überschaubar, mit allen wichtigen Konzepten

–  Der Intel-x86-Befehlssatz: komplex, unstrukturiert, mit allen wichtigen Konzepten

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 11

Erstes Beispiel:

Add a, b, c!

„Addiere die Werte der beiden Variablen „b“ und „c“ "und weise das Ergebnis der Variablen „a“ zu.“"

•  Assemblersprache –  Die gewählte symbolische Darstellung ist nicht unmittelbar vom

Prozessor zu verarbeiten. Sie ist durch einen „Assembler“ in eine geeignete Eingaberepräsentation zu übersetzen (s.u.)

•  (Assembler-)befehle sind stark formalisiert –  Arithmetische Operationen werden immer mit zwei Argument- und

einem Ergebnisoperanden angegeben. –  Eine Addition von mehr als 2 Zahlen muss aus mehreren

Additionsbefehlen zusammen gesetzt werden.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 12

Übersetzung eines einfachen C-Programms C! MIPS-Assembler!

a = b + c;!d = a - e;!

add a, b, c!sub d, a, e!

f=(g+h)-(i+j)!

… oder etwas komplizierter:

add t0, g, h!add t1, i, j!sub f, t0, t1!

Temporäre Variable"

Beachten von Operator-Prioritäten (=> Reihenfolge)"

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 13

Operanden in Hardware •  Variable

–  Variable werden auf elementare Speichereinheiten innerhalb des Prozessors abgebildet: Register

–  Register sind Teile der Rechner/Programmierer-Schnittstelle. Sie können direkt vom Programm aus angesprochen werden.

•  Register –  Speicher mit fester, identische Länge (Wortbreite)

typisch heute 32-Bit und 64-Bit-Maschinen –  Feste Anzahl: 32 (Integer-)Register sind ein typischer Wert.

•  MIPS: –  32 Register mit je 32 Bit –  Register mit spezieller Funktion: Register r0 und r31 –  Frei benutzbare Register: Register r1 … r30

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 14

Das „alte“ Beispiel mit Registern

f=(g+h)-(i+j)!add r6, r1, r2!add r7, r3, r4!sub r5, r6, r7!

Zuordnung der Register wird vom Compiler vorgenommen!

r1: g!r2: h!r3: i!r4: j!r5: für Ergebnis!r6: temp0!r7: temp1!

f=(g+h)-(i+j)!add t0, g, h!add t1, i, j!sub f, t0, t1!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 15

Datenstrukturen: Array

Basiselement"

11"12"13"14"15"16"17"18"19"20"21"22"23"23"

0!

1!

2!

0 "Basis + 0"1 "Basis + 4"2  Basis + 8"3 "Basis + 12"..."

•  Befehlsfolge, Liste oder eindimensionales Array

•  Byteweise Adressierung •  Größe eines Datums hier: 1 Wort = 4 Byte •  Adresse des Datenelements i:

Basisadresse + 4 * i

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 16

…aber wie kommen Variablenwerte in die Register?

C-Beispiel: !int V [6]; Array von 6 Zahlen a = V [2]; Element 2 wird geladen lw r11, 8 (r2)

0 4 8 12 16 20

r13 r12 r11

0!

Voraussetzung: r2 = Basisadresse = 0, r11 = a!

•  Variablen werden im Speicher abgelegt •  Transfer in ein Register ,it einem Ladebefehl "loadWord Quellregister, offset (Basisregister)

–  Zielregister: Register, in das der Inhalt des Speichers geladen werden soll

–  Offset: eine Konstante von 16 Bit Länge –  Adresse = Basisregisters + Offset

Fabian
Notiz
mit
Fabian
Hervorheben

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 17

C-Beispiel: !int V [6]; Array von 6 Zahlen V [4] = a; Element 4 wird geschrieben

0 4 8 12 16 20

r13 r12 r11

0!sw r11, 16 (r2)

… und wie wieder in den Speicher?

Kein anderer Befehlstyp greift auf den Speicher zu:!„Load/Store-Architektur“!

•  Transfer in den Speicher mit einem Store-Befehl "storeWord Quellregister, offset (Basisregister)

–  Quellregister: Register, dessen Inhalt in den Speicher transferiert werden soll

–  Adresse = Basisregisters + Offset

Fabian
Hervorheben

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 18

C-Programme mit variablen Array-Indizes

C-Code: g = h + A[i]"

add r11, r4, r4!add r11, r11, r11!

Index auf Speicheradressen "abbilden (mit 4 multiplizieren)"

add r11, r11, r3!Indexadresse zu Basisadresse !addieren!

Array-Element laden"

add r1, r2, r12!Addition ausführen"

r1: g !r3: Basisadresse des Arrays!r2: h !r4: i, gibt das Element im Array an!r11, r12: temporäre Variable!

Registerzuweisung!

lw r12, 0(r11)!

Fabian
Notiz
entspricht i + i + i + i, weil ein Wort = 4 Byte

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 19

Wie werden Instruktionen im Rechner dargestellt? •  Grundlage: Binärdarstellung

–  Digitale Informationsverarbeitung bedeutet, dass alle Informationen als Folgen von zwei unterscheidbaren Zuständen dargestellt werden.

–  Alle Informationen im Rechner lassen sich daher als Binärzahlen darstellen.

–  Die typische Verarbeitungseinheit ist ein Wort, also eine 32-stellige Binärzahl.

–  Instruktionen sind also als 32-stellige Binärzahlen darzustellen. –  Register als Teile in Instruktionen werden auch durch Binärzahlen

bezeichnet.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 20

Beispiel: Repräsentation eines Additionsbefehls MIPS-Assembler! add r8, r17, r18 Dezimaldarstellung!

0! 17! 18! 8! 0! 32!

Addition"Zielregister"Operandenregister" hier unbenutzt"Binärdarstellung!

000000" 10001" 10010" 01000" 00000" 100000"6 Bit" 5 Bit" 5 Bit" 5 Bit" 5 Bit" 6 Bit"

Fabian
Notiz
Klausur!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 21

•  Das R-Format –  op: opcode; Grundtyp der Instruktion –  rs: erster Operand (Register!) –  rt: zweiter Operand (Register!) –  rd: Ziel (Register!) –  Shamt: Shift amount. Für Schiebeoperationen wichtig (s.u.) –  funct: Funktionscode; Ergänzung zum op-Feld.

Genaue Spezifikation der durchzuführenden Operation

MIPS-Instruktionsformate: „R“ op" rs" rt" rd" shamt" funct"

6 Bit" 5 Bit" 5 Bit" 5 Bit" 5 Bit" 6 Bit"

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 22

MIPS-Instruktionsformate: „I“

•  Manche Operationen benötigen längere Felder für ihre Operanden. Beispiel: „lw“-Operation spezifiziert eine Konstante als Array-Offset. Diese sollte länger als 5 oder 6 Bit sein dürfen.

•  Das I-Format –  op: „opcode“; Grundtyp der Instruktion –  rs: Register enthält die Basisadresse –  rt: Zielregister –  address: Konstante, die den Offset bezüglich

des Basisregisters angibt

op! rs! rt!6 Bit" 5 Bit" 5 Bit"

address!16 Bit"

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 23

Beispiel: Vom C-Programm zur Maschinensprache

C-Programmcode"

A[300] = h + A[300] !

Maschinencode symbolisch"

Maschinencode binär"

MIPS-Assembler"

Lw r8, 1200(r9)!Add r8, r18, r8!Sw r8, 1200(r9)!

r8: temporäre Variable!r9: Basisadresse !r18: h!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 24

… und wie übersetzt man Kontrollstrukturen? •  Alternative Pfade der Programmausführung

–  Bedingte Programmausführung: •  if … then … [else …] •  switch … case …

–  Wiederholte Programmausführung: •  for … & while …

•  Bedingte und unbedingte Sprunginstruktionen –  beq reg1, reg2, label (branch if equal) –  bne reg1, reg2, label (branch if not equal) –  J addr (jump to address)

•  Hier gibt es keine 'goto-lose' (strukturierte) Programmierung!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 25

Erstes Beispiel: „C“-If-statement C-Programmcode" !if (i == j) goto L1;!

!f = g + h;!L1: !f = f - i; !

MIPS-Assembler"

beq r1, r2, L1!Testen auf Registergleichheit;"ggf. Verzweigen zur Subtraktion"

add r5, r4, r3!Addition (ausgeführt im False-Fall)"

L1: !sub r5, r5, r1!Subtraktion; Sprungziel (immer ausgeführt)"

r1: i !r2: j; Vergleichsvariablen!r3: h !r4: g!r5: f!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 26

Etwas komplizierter: If…then…else C-Programmcode" if (i == j)!

!f = g + h;!else !!

!f = g - h; !

MIPS-Assembler"

bne r1, r2, Else!Testen und Verzweigen"add r5, r4, r3!Addition (im TRUE-Fall)"

Else:!sub r5, r4, r3!Subtraktion (im FALSE-Fall)"j Exit!Else-Fall überspringen"

Exit:!!Ausgang"

r1: i !r2: j; Vergleichsvariablen!r3: h !r4: g!r5: f!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 27

Schleifen sind auch nicht viel schwieriger: C-Programmcode" While (save[i] == k)!

!i = i + j;!

MIPS-Assembler"Loop: !add r11, r1, r1!

!add r11, r11, r11!!add r11, r11, r2!!lw r12, 0(r11)!!bne r12, r3, Exit!!add r1, r1, r4!!j Loop!

Exit:!

Schleifenanfang; Laden"des Array-Elements""Test auf Schleifenkriterium"Schleifenrumpf"Rücksprung/Ausgang"

!!!!!!

r1: !i !r2: !Basisadresse!r3: !k !r4: !j!r12: !temp !r11: !temp, 4 * i + Basis!

Fabian
Notiz
1+2: Adresse des aktuellen Array-Elements berechnen 3: Basisadresse addieren 4: In Register laden, save[i] 5: Falls save[i]!=k exit

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 28

Die MIPS-Architektur verwendet ein spezielles Register, r0, das immer den Wert „0“ enthält. "

Weitere Vergleichsmöglichkeiten Wie realisiert man einen Vergleich der Art if a < b?"

slt !r1, r2, r3!

If r2 < r3 then r1 := 1 else r1 :=0"

Damit lässt sich if a < b goto less wie folgt übersetzen:"

slt !r1, r2, r3!bne !r1, r0, less

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 29

Höhere Kontrollstrukturen: Prozeduren •  HW-Unterstützung für Prozeduren

–  Prozeduren stellen das wichtigste Strukturierungskonzept in modernen Programmiersprachen dar.

–  Alle modernen Instruktionssatzarchitekturen bieten Mittel zur effizienten Bearbeitung von Prozeduren an.

•  Schritte bei der Ausführung einer Prozedur –  Parameter so platzieren, dass die Prozedur darauf zugreifen kann –  Kontrolle an die Prozedur übergeben –  Prozedur ausführen –  Ergebniswert so platzieren, dass aufrufendes Programm darauf

zugreifen kann –  Kontrolle an die Aufrufstelle zurück geben

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 30

Prozeduren •  Befehl für den Aufruf

–  jal Prozeduradresse (jump and link) –  Spezialbefehl für die Prozedurausführung:

•  Springt zur angegebenen Adresse und •  Speichert die Adresse der folgenden Instruktion in r31

•  Befehl für den Rücksprung –  jr r31!–  Gewöhnlicher Sprungbefehl, der das Sprungziel jetzt aus

dem Register 31 liest

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 31

Warum eigentlich ein Stack? Prozeduren, die andere aufrufen •  Probleme

–  Alle Prozeduren verwenden dieselben Register für die Argumente und als Arbeitsregister

–  Alle Prozeduren verwenden ein einziges Rücksprungregister •  Mögliche Lösung

–  Die aufrufende Prozedur sichert ihre Rücksprungadresse und die Argumentregister auf den Stack

–  Die aufgerufene Prozedur sichert die von ihr zu verwendenden Arbeitsregister auf den Stack

–  Beim Rücksprung aus der aufgerufenen Prozedur werden alle gesicherten Register zurück geladen.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 32

… Prozeduren mit vielen Argumenten? •  Argumentspeicher und Zustandssicherung

–  Im Speicher wird ein Stack verwaltet, der dynamisch die Prozedurverwaltung unterstützt.

–  Er kann enthalten •  Argumentwerte •  Diejenigen Register, die von der Prozedur verwendet werden,

deren Inhalte aber noch benötigt werden. •  Stackverwaltung

–  Ein Register weist auf den ersten freien Platz im Stack (Vereinbarung: Stackpointer = r29)

–  Der Stack ist am „oberen Ende“ des Speichers angeordnet und wächst in Richtung kleinerer Speicheradressen.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 33

Datenstrukturen 2: Stack •  Anfang: Stackpointer zeigt auf oberstes Element

–  SP = 252 •  Schreiben (push):

–  Stackpointer erniedrigen: SP = 252 - 4 = 248 –  Registerinhalt auf die Adresse schreiben, auf die der

Stackpointer zeigt •  Lesen (pop):

–  Wert von der Adresse lesen, auf die der Stackpointer zeigt

–  Stackpointer erhöhen: SP = 248 + 4 = 252 •  Es können mehrere Schreib/ Leseoperationen

aufeinander folgen

Stackpointer"

242"243"244"245"246"247"248"249"250"251"252"253"254"255"

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 34

Ein einfaches Prozedurbeispiel C-Programmcode!

int first_proc !(int g, int h, int i, int j)!{ !int f;!

!f = (g + h) - (i + j);!!return f;!

}!MIPS-Assembler!first_proc: !

!sub r29, r29, 4!!sw r5, 0(r29)!

!sub r29, r29, 4!!sw r6, 0(r29)!!sub r29, r29, 4!!sw r7, 0(r29) !!

Stack!

r1: g!r2: h!r3: i!r4: j!r5: temp0!r6: temp1!r7: temp2!r11: Rückgabe!

Stackpointer Anfang!(r29)!

Stackpointer,Ende"

Phase 1: Retten der Register

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 35

Ein einfaches Prozedurbeispiel C-Programmcode!

int first_proc !(int g, int h, int i, int j)!{ !int f;!

!f = (g + h) - (i + j);!!return f;!

}!MIPS-Assembler!first_proc: !

!sub r29, r29, 4!!...!

!add r6, r1, r2!!add r7, r3, r4!!sub r5, r7, r6!!add r11, r5, r0!

Stack!

r1: g!r2: h!r3: i!r4: j!r5: temp0!r6: temp1!r7: temp2!r11: Rückgabe!

Stackpointer"

Phase 2: Berechnungen durchführen Ergebnis > Rückgaberegister

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 36

Ein einfaches Prozedurbeispiel C-Programmcode!

int first_proc !(int g, int h, int i, int j)!{ !int f;!

!f = (g + h) - (i + j);!!return f;!

}!MIPS-Assembler!first_proc: !

!...!!add r11, r5, r0!!lw r7, 0(r29)!!lw r6, 4(r29)!!lw r5, 8(r29)!!add r29, r29, 12!

Stack!

r1: g!r2: h!r3: i!r4: j!r5: temp0!r6: temp1!r7: temp2!r11: Rückgabe!

Stackpointer,Anfang"

Phase 3: Register restaurieren

Stackpointer, Ende!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 37

Ein einfaches Prozedurbeispiel C-Programmcode!

int first_proc !(int g, int h, int i, int j)!{ !int f;!

!f = (g + h) - (i + j);!!return f;!

}!MIPS-Assembler!first_proc: !

!...!!lw r5, 8(r29)!!add r29, r29, 12!

!!jr 31!

Stack!

r1: g!r2: h!r3: i!r4: j!r5: temp0!r6: temp1!r7: temp2!r11: Rückgabe!

Phase 4: Rücksprung

Stackpointer!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 38

Die Welt besteht nicht nur aus Zahlen •  Byteweise Zugriffe und Zeichen

–  Daten werden nicht immer als Zahlen interpretiert. Heute ist die Verarbeitung von Texten mindestens genau so wichtig.

–  Zeichen werden durch einzelne Bytes repräsentiert. Instruktionssätze verfügen daher über Byte-Lade- und Speicheroperationen.

–  Ladeoperation lb r8, 0(r4)

Lädt ein Byte aus dem Speicher und platziert es in die rechts gelegenen (niederwertigen) Bits eines Registers!

–  Speicheroperation! !sb r8, 0(r4) speichert die niederwertigen acht Bits eines Registers!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 39

ASCII-Tabelle •  Mit acht Bits lassen sich in ASCII (American Standard Code for

Information Interchange) 256 Zeichen darstellen:

Ausschnitt der vollständigen Tabelle

Dec Hex ASCII Dec Hex ASCII Dec Hex ASCII Dec Hex ASCII Dec Hex ASCII Dec Hex ASCII

32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p

33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q

34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r

35 23 " 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s

36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t

37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u

38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v

39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w

40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x

41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y

42 2A * 58 4A : 74 4A J 90 5A Z 106 6A j 122 7A z

43 2B * 59 4B ; 75 4B K 91 5B [ 107 6B k 123 7B {

44 2C ´ 60 4C < 76 4C L 92 5C \ 108 6C l 124 7C |

45 2D - 61 4D = 77 4D M 93 5D ] 109 6D m 125 7D }

46 2E . 62 4E > 78 4E N 94 5E ^ 110 6E n 126 7E ~

47 2F / 63 4F ? 79 4F O 95 5F _ 111 6F o 127 7F

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 40

Beispiel: Text kopieren

MIPS-Assembler:!

C-Programmcode:!void stringcopy (char x[], char y[])!

!{!! !int i;!! !i = 0;!! !while ((x[i] = y[i]) !=0) /*kopieren & testen*/!! ! !i = i + 1;!!}!

stringcopy:!! !sub r29, r29, 12 !# Stackpointer für 3 !! ! ! !# Einträge setzen!! !sw r4, 8(r29) !# Register für i retten!! !sw r7, 4(r29) !# temporäres Register retten!! !sw r8, 0(r29) !# temporäres Register retten!! !add r4, r0, r0 !# Register kann jetzt !! ! ! !# verändert werden: i = 0!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 41

Beispiel: Text kopieren MIPS-Assembler:"

L1: !add !r6, r2, r4 !# Adresse von y[i] in r6!! !lb !r7, 0(r6) !# r7 mit Byte laden!

!! !add !r8, r1, r4 !# Adresse von y[i] in r8 !! !sb !r7, 0(r8) !# r7 abspeichern!

!! !add !r4, r4, 1 !# i erhöhen!! !bne !r7, r0, L1 !# Schleife, solange Zeichen <> 0!

!! !lw !r8, 0(r29) !# Register restaurieren!! !lw !r7, 4(r29) !# Register restaurieren!! !lw !r4, 8(r29) !# Register restaurieren!! !add !r29, r29, 12!# Stackpointer restaurieren!! !jr !r31 !# Rücksprung!

r1: Basisadresse x !r2: Basisadresse y!r4: i !r7: temporäre Variable!r8: temporäre Variable !!r29: Stackpointer !r31: Rücksprungadresse!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 42

Mehr Komfort: verschiedene Adressierungsarten •  Mängel der derzeitigen Instruktionen

–  Die Verwendung von Konstanten ist unhandlich •  Man muss entweder ein spezielles Register bereit stellen (r0) oder

muss die Konstanten im Speicher an bekannten Stellen ablegen. •  Da Konstanten (z.B. für Inkrement/Dekrement-Operationen bei

Datenzugriffen in Schleifen) häufig auftreten, ist ein verbesserter Zugriff auf Konstanten wünschenswert.

–  Die Handhabung von Verzweigungsadressen ist unzulänglich •  Das ist bisher nicht aufgefallen, da wir immer auf Assembler-Ebene

mit symbolischen Sprungzielen operiert haben! •  Für Verzweigungsziele sind nur Adressbereiche im Rahmen von 16

Bits erreichbar •  Als Sprungziele sind nur 16 Bit lange Adressen möglich!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 43

Verwendung von Konstanten •  Spezielle Befehle, die Konstanten in der Instruktion enthalten:

Immediate-Adressierung –  addi r29, r29, 4 (r29 = r29 + 4)

–  slti r5, r29, 10 (if r29 < 10 r5 = 1)

8" 29" 29" 4"

001000" 11101" 11101" 0000 0000 0000 0100"

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 44

Verwendung von Konstanten •  Und wie behandelt man große Konstanten?

–  Der Befehl lui (load upper half word immediate) lädt die angegebene Konstante in die höherwertigen 16 Bit des Zielregisters.

–  lui r8, 255

001111" 00000" 01000" 0000 0000 1111 1111"

0000 0000 0000 0000"0000 0000 0000 0000" 0000 0000 0000 0000"0000 0000 1111 1111"

0000 0000 0000 0000"0000 0000 0000 0000"

Beispiel:!

Lui r8, 61!

addi r8, r8, 2304!

0000 0000 0000 0000"0000 0000 0011 1101!

0000 1001 0000 0000!0000 0000 0011 1101"

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 45

Adressierung von Sprungzielen •  Unbedingte Sprungbefehle: Das j-Format

–  j 10000! !(go to 10000)!

•  Die Implementierung von Verzweigungsbefehlen: PC-relative

Adressierung –  PC: Program Counter: Befehlszähler; Register, das während

des Programmablaufs die Speicheradresse des jeweils nächsten auszuführenden Befehls enthält

–  bne r16, r17, 16 if r16 - r17 ≠ 0 > PC = PC + 16!

2"6 Bit"

10000"26 Bit"

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 46

Loop: !add !r9, r19, r19!!add !r9, r9, r9!!add !r9, r9, r21!!lw !r8, 0(r9)!!bne !r8, r21, Exit!!add !r19, r19, r20!!j !Loop!

Exit: !... !!

Beispiel: Maschinenprogramm mit Sprungbefehlen

PC = PC + 8!

PC = 80000!

Achtung: Der PC wird nach dem Lesen, aber vor der eigentlichen Ausführung des Befehls um 4 inkrementiert

80000 0 19 19 9 0 3280004 0 9 9 9 0 3280008 0 9 21 9 0 3280012 35 9 880016 5 8 21 880020 0 19 20 19 0 3280024 2

0

80000

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 47

Wie realisiert man weite Verzweigungen? •  Verzweigungsbefehle können Verzweigungen um ± 215

Speicherworte realisieren. •  Das beschränkt die absolute Programmgröße •  Für weitere Verzweigungen wird vom Assembler eine indirekte

Verzweigungsmethode implementiert: –  unbedingter Sprung zum Sprungziel (26 Bit Adresse) –  invertierter Verzweigungsbefehl.

beq r16, r17, L1!!bne !r16, r17, L2!!j !L1!

L2: !...!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 48

MIPS-Adressierungsarten addi r16 r17, 24!

add r16, r17, r8!

lw r16, 16(r8)!

Halfword"

Byte"

Fabian
Notiz
gute Zusammenfassung der Adressierungsarten

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 49

MIPS-Adressierungsarten bne r16, r17, 16!

PC = PC + (Address || “00“)!j 10000!

PC = PC.(31..28) || Address || “00“!

Fabian
Notiz
Noch so ein bisschen Fragezeichen ...

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 50

Was kennen wir bis jetzt für MIPS-Instruktionen? Kategorie Instruktion Beispiel Bedeutung Kommentar

add add r1, r2, r3 r1 = r2 + r3 Drei Operanden, Daten in Registern

subtract sub r1, r2, r3 r1 = r2 - r3 Drei Operanden, Daten in Registern

Arithmetik

add immediate addi r1, r2, 100 r1 = r2 + 100 Für Konstanten

load word lw r1, 100 (r2) r1 = Speicher [r2 + 100] Wort vom Speicher in ein Register

store word sw r1, 100 (r2) Speicher [r2 + 100] = r1 Wort vom Register in den Speicher

load byte lb r1, 100 (r2) r1 = Speicher [r2 + 100] Byte vom Speicher in ein Register

store byte sb r1, 100 (r2) Speicher [r2 + 100] = r1 Byte vom Register in den Speicher

Datentransfer

load upper immediate lui r1, 100 r1 = 100 * 216 Lädt Konstante in die oberen 16 Bit

branch on equal beq r1, r2, 25 if (r1 = r2) gehe nach PC +4 + 100 Vergleicht auf Gleichheit

branch on not equal bne r1, r2, r3 if (r1 != r2) gehe nach PC +4 + 100 Vergleicht auf Ungleichheit

set on less than slt r1, r2, r3 if (r2 < r3) setze r1 = 1 sonst r1 = 0 Vergleicht auf kleiner und setz ein Bitin r3

BedingteVerzweigung

set on less than immediate slti r1, r2, 100 if (r2 < 100) setze r1 = 1 sonst r1 = 0 Vergleicht mit Konstante auf kleinerund setz ein Bit in r3

jump j 2500 go to 10.000 Springt an Adresse

jump register jr r31 go to r31 Springt an Inhalt des Registers

UnbedingterSprung

jum and link jal 2500 r31 = PC +4, go to 10.000 Aufruf einer Prozedur

Fabian
Notiz
gute Zusammenfassung MIPS Instruktionen

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 51

Vom C-Programm zur Ausführung im Rechner Vier grundsätzliche Schritte:!C-Programm"

Assemblercode"

Objektcode: "Maschinensprachmodul"

Objektcode: "Bibliotheksroutinen"

Executable: "Maschinenprogramm"

Speicher"

Compiler!

Assembler!

Linker!

Loader!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 52

Compiler •  Übersetzung von Hochsprachen in Assembler

–  Hochsprachenprogrammierung wird verwendet, •  da die Programmiereffizienz hier ungleich höher ist als bei der

Verwendung der Maschinensprache, •  da Programme in Hochsprachen (mehr oder weniger)

maschinenunabhängig sind. –  Moderne Compiler erzeugen Assemblercode, der so gut

optimiert ist, dass er manuell kaum besser erzeugt werden könnte.

–  Während höhere Programmiersprachen (weitestgehend) maschinenunabhängig sind, muss für jede Zielarchitektur ein spezieller Compiler bereit gestellt werden.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 53

Assembler •  Assemblersprache

–  Symbolische Repräsentation der Maschineninstruktionen. –  Vereinfachte Anwendung durch

•  Pseudoinstruktionen: Instruktionen, die der Befehlssatz nicht enthält, und die vom Assembler in gültige Maschineninstruktionen übersetzt werden

•  mov r4, r5 ! ! !-> !add r4, r5, r0!•  blt r16, r17, L1 !-> !slt r8, r16, r17

bne r8, r0, L1!•  Zahlendarstellungen: Neben binären und dezimalen

Zahlenrepräsentationen ist gewöhnlich auch die hexadezimale Darstellung gebräuchlich, die vor allem für Adressberechnung vorteilhaft ist.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 54

Assembler •  Objektcode

–  Objektfiles enthalten alle Informationen, die für die weitere Bearbeitung erforderlich sind. Beispiel: Unix-Objektfiles

•  Header: Beschreibt Größe und Position der Teile des Objektfiles •  Textsegment: Maschinensprachcode •  Datensegment: Statische Daten, die während der Programmlaufzeit

alloziert werden, dynamische Daten, die während der Programmlaufzeit ihre Größe verändern

•  Relokationsinformation: Identifikation von Instruktionen und Daten, die von absoluten Speicheradressen abhängig sind

•  Symboltabelle: noch undefinierte Labels (z.B externe Sprungziele) •  Debugging Information: Informationen, die dem Debugger ermöglichen,

Maschinenbefehle mit C-Sourcecode in Verbindung zu bringen

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 55

Linker •  Um eine weit gehende Wiederverwendung von Programmteilen

zu ermöglichen, werden Programme Prozedur für Prozedur übersetzt.

•  Für jedes einzelne der Programmstücke müssen die relativen Positionen innerhalb des Speichers bestimmt werden.

•  Aufgaben des Linkers –  Symbolische Platzierung von Code und Daten im Speicher –  Bestimmung der Adressen von Daten- und Instruktionslabels –  Auflösung von internen und externen Referenzen, d.h. Einsetzen

der ermittelten Sprungweiten bzw. Sprungziele •  Das Executable hat dasselbe Format wie das Objektfile, nur mit

aufgelösten Referenzen

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 56

Loader •  Betriebssystemroutine, die ein Programm zur Ausführung bringt. •  Dabei werden in Unix die folgenden Schritte ausgeführt:

–  Lesen des Programms und Bestimmten der Programm- und Datensegmentgrößen

–  Bereitstellen eines hinreichend großen Adressraums für Programm und Daten

–  Kopieren der Instruktionen und Daten aus dem Programm in den Speicher

–  Initialisierung der Maschinenregister; Setzen des Stackpointers auf die erste freie Position

–  Sprung zu einer Start-up-Routine, die Parameter in die Argumentregister schreibt und zur main-Prozedur des Programms verzweigt

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 57

Das Grundkonzept: Speicherprogrammierbarer Rechner •  Grundprinzip heutiger Rechnerarchitekturen

–  Instruktionen werden als (binäre) Zahlen repräsentiert. –  Programme werden im Speicher abgelegt und können dort gelesen

und geschrieben werden wie Zahlen. –  Es gibt keinen physischen Unterschied zwischen Daten und

Programmen. –  Prinzip des speicherprogrammierbaren Rechners.

•  Stärken des Konzepts –  Daten und Programme können beliebig im Speicher angeordnet

werden. –  Programmstart erfolgt einfach durch Angabe einer Speicheradresse. –  Programme können auch als Daten interpretiert werden

(Beispiel: Compiler betrachten Programme als Daten).

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 58

Andere Architekturen •  Eine klassische CISC-Architektur

–  Digital Equipment Corporation VAX •  Stackarchitektur

–  Am Beispiel eines HP Taschenrechners •  Mikroprozessorarchitekturen

–  Akkumulator-Maschinen –  PowerPC –  Intel

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 59

VAX •  Virtual Address eXtension - VAX

–  1977: VAX 11/780 (TTL) –  1984: VAX 8600 (ECL) / 1985: MicroVAX II (MicroVAX Chip) –  1988: VAX 8800 (ECL) / 1989: VAX 6600 (NVAX Chip) –  1989: VAX 9000 (ECL)

•  32 Bit CISC Architektur •  16 Register zu 32 Bit: r0 ... R15, r12 - 15 für besondere

Funktionen (AP, FP, SP, PC) •  Über 300 Befehle •  22 Adressierungsarten •  Befehlssatz für minimale Codegröße entworfen

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 60

VAX •  Daten-

typen von 8 bis 128 Bits

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 61

Befehle

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 62

Befehle

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 63

Befehle

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 64

Befehle •  Varianten von Befehlen

–  Operation + Datentyp + Anzahl der Operanden •  Operation – add, sub … •  Datentyp - byte, word, dword, •  Anzahl der Operanden - 1 ... 3 Register und 1 ... 3 Speicher

(hängt von der Operation ab)

•  Beispiel: Addition

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 65

Adressierungsarten •  Adressierung mit Universalregistern

–  Literal (Konstante, 'immediate', 3 Typen) –  Register (Inhalt) –  Register deferred (Register als Zeiger auf den Op. im Speicher) –  Autodecrement* und Autoincrement* (Register als Zeiger, Register

wird entsprechend dem Datentyp erhöht/erniedrigt) –  Autoincrement deferred* (Register als Zeiger auf die Adresse des

Operanden, mit Increment) –  Byte, Word, Longword displacement (Konstante + Register) –  Byte, Longword displacement deferred (Konstante + Register,

Ergebnis zeigt auf Speicherstelle, dieses ist die Adresse des Op.) –  Indexed (Basisadresse + Registerinhalt * Offset*) * Wert hängt ab

vom Datentyp

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 66

Adressierungsarten •  Operanden

–  Register - Register –  Register - Speicher –  Speicher - Speicher

•  Program Counter Addressing –  Immediate (PC + Konstante) –  Absolute (PC = Wert) –  Byte, word, longword relative (Adressierung relativ zum PC) –  Byte, word, longword relative deferred (Adressierung einer

Speicherstelle, neuer PC wird durch die Differenz des Inhalts der Speicherstelle vom PC gebildet)

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 67

Adressierung •  Beispiele

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 68

Dichte des Assemblercodes

MIPS: int v[] = $4 int k = $5 VAX: int v[] = 4(ap) int k = 8(ap)

Total Code Size: MIPS = 15*4 = 60 bytes VAX = 2+4+4+4+5+5+4 = 27 bytes

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 69

Implementierungen •  Technologien

–  ECL-Mainframe mit vielen Schränken, beginnend mit der VAX 11/780 mit 5 MHz

–  Mikroprozessor-Systeme im PC-ähnlichem Gehäuse (ab 1984 / 1 MHz – 1999 / 100 MHz)

•  Architekturvarianten –  Einzel-, Dual, Quadprozessor

vier 11/780 mit gemeinsamem Speicher, ca. 1983 –  Hexa-Prozessor

VAX 7000 760, sechs Prozessoren mit 171 MHz, 1992

–  Rechner-Cluster

Vaxstation mit VMS V5,5, 1991

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 70

Klassische Architekturkonzepte •  Stack-Architekturen

–  Architekturen ganz ohne Register (!!) –  Operanden wurden direkt im Speicher mit Hilfe

eines Stack-Modells (ähnlich wie in alten HP- Taschenrechnern) realisiert (0-Adress-Maschine)

C-Code A = D + C!

Assembler push !AddressC !# Top = Top+4; Stack[Top] = Memory[AddressC]!!push !AddressB !# Top = Top+4; Stack[Top] = Memory[AddressB]

!add !# Stack[Top-4] = Stack[Top] + Stack[Top-4]!

! ! !# Top = Top-4;!!pop !AddressA !# Memory[AddressA] ) Stack [Top];!! ! !# Top = Top -4;!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 71

Klassische Architekturkonzepte •  Akkumulatorarchitekturen

–  Die Technologie erlaubte nur wenige Transistoren. –  Daher meist nur ein Register, den Akkumulator, und kurze

Instruktionen (1-Adress-Maschine), z.B.: Intel 8080, Zilog Z80,... –  Nach und nach konnten mehr und längere Register bereit gestellt

werden, und 2- bzw. 3-Adress-Maschinen führte. C-Code !A = B + C; !# Wort laden !!

Assembler !load AddressB # Acc = Memory [AddressB], Acc =B!!add AddressC # Acc = B + Memory [AddressC], Acc = B + C!!store AddressA # Memory [AddressA] = Acc, A = B + C!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 72

Klassische Architekturkonzepte •  Ab 1980: RISC-Architekturen

–  Entwickelt in den 80er Jahren •  Speicher war deutlich günstiger •  Effiziente Compiler-Techniken •  Optimierung der Hardware

–  Eigenschaften von RISC (Reduced Instruction Set Computer) •  feste Instruktionslänge •  Load/Store-Architekturen •  wenige, einander ähnliche Instruktionsformate •  wenige einfache Adressierungsarten •  wenige Instruktionen (bes. wenige hochspezifische Spezialbefehle)

–  Gute Voraussetzungen für eine hocheffiziente Hardware

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 73

Der Power / PowerPC •  Einsatz in IBM-Rechnern und Apple-Macintosh •  32 Register zu 32 Bit, Load/Store-Architektur •  Adressierungsarten

–  Indizierte Adressierung •  Adressierungsart, die die Summe der Inhalte zweier Register als

Adresse verwenden kann. Dies ist nützlich für die Adressierung von Arrays

•  Die MIPS Instruktionsfolge !add !r1, r2 + r3 !# r1 = Basisadresse + Index !lw !r1, 0 (r1) !# r1 mit dem Inhalt von [r1]laden!

•  kann beim PowerPC ersetzt werden durch lw !r1, r2 + r3 !# r1 wird geladen mit dem Inhalt der

! !# Adresse mit der Summe von r2 und r3!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 74

Der Power / PowerPC •  Adressierungsarten (II)

–  Update-Adressierung (manchmal auch Autoinkrement/ Autodekrement-Adressierung genannt

–  Datentransferoperationen erhöhen/erniedrigen nach der Befehlsausführung automatisch den Inhalt des Basisregisters.

–  Dies ermöglicht schnelle Blocktransferoperationen –  Anstatt der MIPS-Instruktionsfolge

!lw !r5, 4 (r6)!# Wort laden !addi !r6, r6, 4 !# Setzen auf nächste Adresse

–  reicht beim PowerPC der Befehl* lwu !r5, 4 (r6)!# r5 = speicher [r6], r6 = r6 +4

* In Wahrheit sind die Befehle des PowerPC noch leistungsfähiger

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 75

Der Power / PowerPC •  Spezielle PowerPC-Instruktionen

–  Mehrfach-Laden/Speichern •  Transfer von bis zu 32 Speicherworten mit einem Befehl aus dem Speicher

in Register oder umgekehrt –  Instruktion zur Schleifenunterstützung

•  Spezieller Befehl für die Ausführung von for-Schleifen –  Die folgende C-for-Schleife ! !for (i = n, i != 0, i = 1 - 1)

! ! !{...}; ! –  wird in MIPS so übersetzt … , !loop:!! !addi!r5, r5, -1 !# r5 = r5 -1 (temp. reg)

!bne !r5, 0, loop !# if r5 != 0 go to loop –  beim PowerPC so … ! !bc !loop, r5 !=0 !# r5 = r5 -1 !

! ! ! ! !# if r5 != 0 go to loop !

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 76

Aktuell: Intel-Architekturen •  Während MIPS und auch PowerPC bei ihrer Einführung neue

Architekturen waren hat INTEL bei der Prozessorentwicklung über 25 Jahre lang auf Kompatibilität geachtet.

•  Auf diese Weise mussten die Leistungsparameter neuer Architekturkonzepte immer unter Berücksichtigung der Möglichkeiten der alten Prozessoren eingeführt werden.

•  Das Ergebnis sind leistungsfähige Prozessoren mit sehr komplexen und sehr irregulären Instruktionssatzarchitekturen.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 77

Geschichte der Intel-Architekturen •  1978: 8086

–  Erster 16 Bit-Prozessor, kompatible Erweiterung des 8080. Register mit spezifischen Aufgaben. •  1982: 80286

–  Adressraum jetzt 24 Bit. Zusätzliche Instruktionen zur Abrundung, speziell für den Schutz. •  1985: 80386

–  Adressraum und Register jetzt 32 Bit. Mit neuen Operationen fast eine General-Purpose-Register-Maschine.

•  1989: 80486; 1992: Pentium (66 MHz); 1995 Pentium Pro –  Erhöhte Performanz durch interne Maßnahmen. Nur 4 neue Instruktionen.

•  1997: Pentium MMX –  57 zusätzliche Instruktionen für Multimedia-Anwendungen.

•  2000: Pentium 4 –  Optimierung der Architektur, viele Pipelinestufen (20), mehr Performance durch höheren Takt

•  2003: Änderung der Entwicklung –  weniger Pipelinestufen, geringere Taktfrequenz, kein Hyper-Threading

•  2005: Dual Core für Server, später auch für Notebooks & PCs, Quad-Core,...

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 78

Der Registersatz ab 80386

•  8 der ursprünglichen 16 Bit-Register wurden auf 32 Bit erweitert und dienen als „General-Purpose-Register“

•  Für einzelne Instruktionen dienen einzelne Register speziellen Zwecken

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 79

Instruktionstypen und Operanden •  2-Adressbefehle

–  Ein Register dient sowohl als Quell- als auch als Zielregister –  Operationen spezifizieren also höchstens zwei Register/Speicheradressen

(2-Adress-Maschine) •  Alle Operationen mit Speicherzugriff

–  Keine „Load/Store-Architektur. –  Jede Instruktion kann Operanden aus dem Speicher nutzen

Quell- und Zieloperand Zweiter Quelloperand

Register Register

Register Immediate

Register Memory

Memory Register

Memory Immediate

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 80

x86-Befehle

* Verzweigungen werden in Abhängigkeit von „Condition Codes“ durchgeführt,!die bei der Ausführung von Instruktionen (als Seiteneffekt) gesetzt werden!!

Befehl Beschreibung

Ablauf Bedingte und unbedingte Sprünge *

JNZ, JZ Sprung, wenn das Bedingugnsbit 0 / nicht 0 ist. Adresse: EIP + 8 Bt OffsetJMP Unbedingter Sprung, 8 oder 16 Bit OffsetCALL Aufruf eines Unterprogramms, 16 Bit Offset. Rückspungadresse auf dem StackRET Holt die Rücksprungadresse vom Stack und springt dorthinLOOP Erniedrigt ECX. Wenn ECX = 0 Sprung zu EIP+ 8 Bit DisplacementDatentransfer

MOV Bewege Daten zwischen Registers bzw. Register und SpeicherPUSH, POP Stack-OperationenLES Lade ES und eines der Universalregister aus dem SpeicherArithmetik & Logik

ADD, SUB Addition, Subtraktion. Format: Register-SpeicherCMP Vergleich von Quelle und Ziel. Format: Register-SpeicherSHL, SHR, RCR Links schieben, Rechts schieben, Rechts rotieren, Aufgefüllt mit Carry-BitCBW Konvertiert die 8 Bits rechts in EAX in ein 16 Bit Wort rechts in EAXTEST Logisches UND von Quelle und Ziel setzt nur die BedingungsbitsINC, DEC Inkrementieren bzw. dekrementieren. Format: Register-SpeicherOR, XOR Logisches ODER, Exklusives ODER, Format: Register-SpeicherString Kopieren von Zeichenketten. Länge wird durch ein Präfix angegeben

MOVS Kopiert einen String. ESI und Edi werden inkrementiertLODS Lädt ein Byte, Wort oder Doppelwort eines Strings in das EAX Register

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 81

Adressierungsarten Intel-Architekturen verwenden recht vielfältige und komplexe Adressierungsarten mit uneinheitlichen Restriktionen hinsichtlich der Registernutzung.

Modus Beschreibung Einschränkungen MIPS Entsprechung

Register Indirekt Die Adresse steht in einem Register nicht ESP oder EBP lw r4, 0 (r5)

Basis-Modus mit 8 oder 16 Bit Displacement

Die Adresse ergibt sich zuBassis + Displacement nicht ESP oder EBP lw r4, 100 (r5) [hier 16 Bit]

Basis plus skaliertem Index

Die Adresse ergibt sich zu Basis + (2^Scale x Index) Scale = {0, 1, 2, 3}

Basis: Jeder GPR Index: nicht ESP

mul r1, r2, 4 add r1, r1, r2 lw r4, 0(r1)

Basis plus skaliertem Index mit 8 oder 16 Bit Displacement

Die Adresse ergibt sich zu Basis + (2^Scale x Index) + DisplacementScale = {0, 1, 2, 3}

Basis: Jeder GPR Index: nicht ESP

mul r1, r2, 4 add r1, r1, r2 lw r4, 1000(r1) [hier 16 Bit]

•  Die Skalierung erlaubt es, auf die explizite Multiplikation beim Übergang von 8 (0) zu 16 (1), 32 (2) und 64 (3) Bit Operationen zu verzichten

•  Nicht alle Register können gleich genutzt werden

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 82

Intel Instruktionsformate (Beispiele)

Intel-Instruktionen variieren zwischen 1 und 17 Byte Länge bei äußerst verschiedenartigen Aufteilungen. Dies mach die HW-Implementierung ausgesprochen aufwendig.

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 83

Intel-Architektur •  Lösung des Architekturkonflikts: Zweistufige Bearbeitung •  Stufe 1: Analyse des Befehlsstroms

–  Identifikation von Sprungbefehlen und sofortige Bearbeitung –  Umstrukturierung der anderen Befehle in absolut reguläre

Mikrooperationen

•  Stufe 2: RISC Architektur mit allen aktuellen Methoden zur Beschleunigung

RISC!Maschine!

Intel >!RISC!

Intel!Befehls-

satz!

Lehrstuhl Mikrosystementwurf Naturwissenschaftlich-Technische Fakultät Department Elektrotechnik und Informatik

4.4.2011 Rechnerarchitekturen I 84

Zusammenfassung •  Befehlssatz •  Aufbau von Befehlsworten: R-Format, I-Format, J-Format •  Umsetzung von einfachen C-Konstrukten auf MIPS

Assemblerbefehle •  Beschränkungen bei der Programmierung auf

Assemblerebene •  Prinzipieller Ablauf der Übersetzung eines Programms:

Compiler Assembler, Linker, Loader •  Andere Architekturen

–  DEC VAX –  PowerPC als RISC Architektur –  Intel IA 32 als CISC Architektur