Grundzüge der Informatik II - Technische Universität Darmstadt

Transcription

Grundzüge der Informatik II - Technische Universität Darmstadt
Kapitel 6 (1. Teil MIPS):
MIPS Befehle
Technische Grundlagen der Informatik 2
SS 2009
R. Hoffmann
FG Rechnerarchitektur
Technische Universität Darmstadt
In Anlehnung an das Patterson/Hennessy: Computer Organization & Design, 2 nd Edition, Chapter 3, 5
Inhalt

Befehlssatz allgemein

RISC und CISC


MIPS



Speicherorganisation
Befehle








add
load, store
Unbedingter Sprung jump
Bedingter Sprung beq
Vergleich slt
Register-indirekter Sprung
Konstanten im Befehl
Konstruktion einer ALU für
MIPS

ANHANG
Weitere Befehle
Zusammenfassung der
Adressierungsarten
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–2
Wiederholung

Grundprinzipien des VonNeumann-Rechners:



Programme und Daten
werden in einem
gemeinsamen Speicher
abgelegt und können dort
gelesen und geschrieben
werden.
Daten und Befehle werden
als Binärwörter repräsentiert.
Dies ist das Prinzip des
speicherprogrammierbaren
Rechners (Stored Program
Computer).

Stärken dieses 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 und sogar
während der Laufzeit
modifiziert werden!
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–3

Sichtweise: Formale Sprache



Die Maschine versteht (interpretiert) die
Maschinenbefehle (in Form von Binärcodes)
Die Maschinenbefehle definieren eine
„Maschinensprache“
Die Assemblersprache ist eine symbolische Form der
Maschinensprache, die im wesentlichen 1:1 auf die
Maschinensprache durch den Assembler übersetzt wird.
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Befehlssatz allgemein (1)
6–4

Entwurf von Befehlssätzen

Entwurfsziele

Unterstützung






bestimmter Anwendungen/Programmiersprachen 
Spezialrechner oder
möglichst vieler Anwendungen/Programmiersprachen 
Universalrechner
maximiere Rechenleistung (performance)
minimiere Kosten
reduziere Entwurfszeit
Nebenbedingungen



geeignet für den Compilerbauer
beschränkte Hardware-Ressourcen
geringer Stromverbrauch
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Befehlssatz allgemein (2)
6–5
RISC-Rechner
RISC = Reduced Instruction Set Computer
1. (Load-Store-Architektur) Die Rechenoperationen finden nur auf
Operanden statt, die sich in den Registern befinden.
2. (Einfache Befehle mit fester Wortlänge): Vereinfacht die
Hardware-Implementierung und beschleunigt die Ausführung
(Pipelining)
Hauptspeicher
load
Registersatz
operate
store
ALU
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–6
6–7
CISC-Rechner
Complex Instruction Set
Computer



Die Befehlssatz besteht aus
einem Mix von einfachen und
komplexen Befehlen.
Die Wortlänge der Befehle
variiert je nach Komplexität
und unterzubringender
Informationsmenge
Operationen können neben
Registeroperanden auch auf
Speicheroperanden definiert
sein.

Beispiele für komplexe Befehle

Direkte Operationen auf
Speicherzellen
m[adr1] := m[adr2] + m[adr3]




Vektorbefehle können
komplette Vektoren auf einmal
verarbeiten, implementiert in so
genannten Vektorrechnern
Pentium MMX-Befehle
(Multimedia-Erweiterung) zur
Unterstützung der Verarbeitung
von grafischen Pixel-Vektoren
SSE-Befehle (Streaming SIMD
Extensions)
SIMD: Single-InstructionMultiple-Data, z.B. Operationen
auf 4 * 32 bit Daten
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD

Vergleich RISC  CISC
RISC
CISC
klein
groß
wenige
viele
fest
variabel
Sprache C
auch andere,
z. B. JAVA
nein
ja
Aufwand für HardwareOptimierung
klein .. groß
groß
HardwareImplementierungsaufwand
klein .. groß
groß
Anzahl Befehle
Adressierungsarten
Befehlswortlänge
Sprachorientierung der
Maschinenbefehle
komplexe Befehle
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–8
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Register-Architekturen
6–9
© Verlag Morgan Kaufmann (Patterson/Hennessy)

Wir haben den prinzipiellen
Aufbau und die
Arbeitsweise eines
Rechners am Beispiel des
DINATOS kennen gelernt.


Beispiel für eine
Akkumulatormaschine und
Grundprinzip für CISCRechner
Implementierung steht als
Softcore zur Verfügung

Im folgenden wollen wir
die MIPS-Architektur
kennenlernen




Beispiel für einen RISCRechner
ISA-Architektur: einfach,
überschaubar, mit allen
wichtigen Konzepten
eingesetzt von Silicon
Graphics, NEC, Nintendo,
Sony u. a., Embedded Syst.
entwickelt seit 1981
J. Hennessy – Stanford Univ.
MIPS = Microprocessor
without interlocked pipeline stages
ISA = Instruction
Set Architecture
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Überleitung zur MIPS-Architektur
6–10
Addiere die Werte der beiden Variablen b und c und
weise das Ergebnis der Variablen a zu
add a, b, c

// a  b+c
Alle Arithmetikbefehle haben genau 3 Variablen:
Ergebnis, Operand1, Operand2
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
MIPS-Befehle: Erstes Beispiel
6–11
Wirkung
MIPS-Assembler
a  b + c;
add a, b, c
d  a - e;
sub d, a, e
... oder etwas komplizierter:
f(g+h)–(i+j)
t0
t1
temporäre Variable
add t0, g, h
add t1, i, j
sub f, t0, t1
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Höhere Programmierspr.  Assembler
6–12

Register, Speicherworte, Befehle sind 32 Bit breit

Register allgemein



dienen zum Zwischenspeichern der Operanden
feste, identische Länge (Wortbreite, word):
derzeit typischerweise 32 Bit (künftig 64 Bit)
MIPS:

32 Register mit je 32 Bit


Register mit spezieller Funktion: Register 0, 31
frei benutzbare Register:
Register 1, 2, ..., 30
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
32-Bit-Maschine, Register
6–13
Symbolische Bezeichnung der Register entsprechend der Nutzung im GNU C Compiler
(vgl. Patterson/Hennessy, Seite A-23, Figure A.10)
Symbol. Name Nr.
Funktion, typische Verwendung












$zero
$at
$v0, $v1
$a0 ... $a3
$t0 ... $t7
$s0 ... $s7
$t8 ... $t9
$k0, $k1
$gp
$sp
$fp
$ra
0
1
2, 3
4-7
8-15
16-23
24-25
26, 27
28
29
30
31
der konstante Wert 0
reserviert für Assembler
Resultatwerte und Ausdrückeevaluierung (not saved)
Argumente
Zwischenwerte (temporär, not saved)
gesicherte Werte (saved)
weitere Zwischenwerte (not saved)
Betriebssystem (OS kernel)
globaler Zeiger (global pointer)
Zeiger auf Kellerspeicher (stack pointer)
Rahmenzeiger (frame pointer)
Rücksprungadresse (return address)
saved: sollen beim Procedure Call gerettet werden
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
MIPS GNU C Registerbenutzung
6–14
Programmiersprache C
f =(g+h)–(i+j)
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t0, $t1
Die Variablen der C-Anweisung wurden der Reihe
nach den Registern $s0 - $s4 zugeordnet.
Wie kommen die Variablenwerte in die Register?
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Das „alte“ Beispiel mit Registern
6–15

Variablen, Felder und andere Datenstrukturen werden im
Speicher gehalten.

Zur Verarbeitung werden die Daten aus dem Datenspeicher
gelesen und in die Register geladen (load). Die Ergebnisse
werden anschließend zurück geschrieben (store).

weiteres dazu später
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Load und Store
6–16
Speicher-Organisation


Speicher: Vektor von
Speicherzellen, jede Speicherzelle
wird durch eine Nummer
(Speicheradresse) identifiziert
Interpretation als
Bytevektor
232 Bytes mit Byteadressen von 0
bis 232 –1
Der Speicher wird entweder als
Bytevektor oder als Wortvektor
interpretiert.
Byteadresse
Byteadresse dient zum
Adressieren eines Bytes.
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–17
230 Worte mit Wortadressen
0, 4, 8, ... 232 – 4
Wortadresse dient zum
Adressieren eines Wortes.
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Interpretation als Wortvektor
6–18

Ausgerichtet, Aligned words

Die Wortadresse ist durch 4 ohne Rest teilbar. Dadurch
effizientere Speicher-(RAM-)Zugriffe, 1 Zugriff/Wort



0, 4, 8, ...
Worte müssen beim MIPS aligned sein.
Weiterer Begriff
Wortindex = AlignedWortadresse/4
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Alignment
6–19
Byte-, Wort-, Indexadressierung
Byteadressierung
Byteadressen
N
N+1
N+2
N+3
N+4
Der Speicher wird als
Bytevektor gesehen
Wortadressierung
Indexadressierung
Wortindex
Wortadressen
N
i = N/4
N+
4
i+1 = (N+4)/4
Der Speicher wird als
Wortvektor gesehen
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–20
Big-Endian: Der Speicheradresse N ist das Most Signficant Register Byte
zugeordnet (beim LOAD/STORE).
(MIPS, Motorola, PowerPC, ARM, AVR)
Wortadressierung
Speicherwort
N
Big-Endian
Zuordnung
Most
Significant
Byte
Registerwort
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Big-Endian Byte Ordering
6–21
Little-Endian Byte Ordering
Little-Endian: Der Speicheradresse N ist das Least Significant Register Byte
zugeordnet. (Intel-Prozessoren, VAX)
Wortadressierung
N
N+3
Speicherwort
Little-Endian
Zuordnung
Registerwort
Least
Signficant
Byte
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–22

N sei aligned

LoadWord von der Speicheradresse N in das Register

Big-Endian und Little-Endian liefert dasselbe Ergebnis

aber bei der byteweisen Übertragung


bei Big-Endian wird das Register von links aufgefüllt, während es bei
Little-Endian von rechts aufgefüllt wird.
Nach der Übertragung des ersten Bytes


Little-Endian: Niederwertige Stellen können schon weiter verabeitet
werden, z.B. Addition
Big-Endian: Höherwertige Stellen können schon weiter verarbeitet
werden, z.B. Vergleich
Beachten beim Lesen/Schreiben von Binärformaten: BigEndian: JPEG, LittleEndian: BMP, GIF
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Vergleich
6–23
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
MIPS Befehle (teilweise)
6–24
op:
rs:
rt:
rd:
„opcode“ ; Grundtyp des Befehls (operation code)
erster Registeroperand (Registernummer)
zweiter Registeroperand (Registernummer)
Zielregister (Registernummer)
shamt: „shift amount“, für Schiebeoperationen verwendet
funct: „Funktionscode“; Ergänzung zum op-Feld: weitere
Spezifikation der durchzuführenden Operation
op
rs
rt
rd
6 Bit
5 Bit
5 Bit
5 Bit
shamt funct
5 Bit
6 Bit
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Arithmetisches Format, Register-Format, R-Format
6–25
Additionsbefehl (add)

Beispiel: MIPS-Assembler:
add $t0, $s1, $s2

Dezimaldarstellung: rs
rt
0
17
18
rd
8
0
funct
op-Erweiterung
op = Addition
(Quell-)
Operandenregister Zielregister

32
hier unbenutzt
Binärdarstellung:
000000
10001
10010
01000
00000
100000
6 Bit
5 Bit
5 Bit
5 Bit
5 Bit
6 Bit
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–26

Registeradressierung: Operand ist Registerinhalt. Im Befehl stehen
drei Registeradressen:
rs : register source1
rt : register source2
rd: register destination
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
add: Verwendete Adressierungsart „R“
6–27

Ladebefehl
lw: load word

Speicherbefehl
sw: store word
load
Register
store
Speicher
lw und sw sind die einzigen
Befehlstypen, die auf Speicher
zugreifen!
LOAD-STORE-Architektur
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Ladebefehl (lw) und Speicherbefehl (sw)
6–28
Datentransfer-Format „I“
op: opcode
rs: Nummer des Basisadressregisters
rt: Zielregister (Registernummer)
offset-address: Konstante, die Offset bzgl.
Basisregister angibt (s. nächste Folie)
op
rs
rt
6 Bit
5 Bit
5 Bit
offset-address
16 Bit
lw, sw benötigen 2 Register und 1 Konstante als Array-Offset
op-Kodierung von lw ist 35 (dezimal) bzw. 100011 (binär)
op-Kodierung von sw ist 43 (dezimal) bzw. 101011 (binär)
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
load/store: Verwendetes Befehlsformat „I“
6–29

Basisadressierung

Effektive Speicheradresse ea (des Speicheroperanden)
ist die Summe von Registerinhalt (Basisregister) und
Offset-Address im Befehl: ea = (rs) + Address
Offset
Basisadresse
EffektiveAdresse = Basisadresse + OffsetAdress
Konstante
(Offset-Adresse)
Basisregister
z. B. 32($s3)
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
load/store: Verwendete Adressierungsart
6–30
Beispiel
C:
A[8] = h + A[8]
Anfangsadresse des Vektors A steht in s3,
h steht in s2
32 = Byte-Offset = 8 * 4
MIPS:
lw
add
sw
$t0, 32($s3)
$t0, $s2, $t0
$t0, 32($s3)
// t0  m[32+s3]
// t0  s2+t0
// t0  m[32+s3]
bei sw steht die Zieladresse
rechts
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–31
Unbedingter Sprungbefehl
j Label
(jump to Label)

PC  Label<<2

Es erfolgt ein unbedingter Sprung zum Sprungziel (target
address)

Befehlsformat J (für Jump)
2
op
6 Bit
2
Label
Sprungziel (Wortindex)
26 Bit
2500
Beispiel: j 10000 (Springe an die Befehlsadresse 10000=4*2500)
(Wortadresse)
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD

6–32
6–33
jump: Verwendete Adressierungsart
Pseudodirekte Adressierung: Sprungzieladresse setzt sich aus 26
Bit Label, verschoben nach links um 2 Bitpositionen und den oberen
4 Bits des PC (vorher inkrementiert um 4) zusammen.
PC  {(PC+4)[31:28] , (Label<<2)}
Ergebnis: Der Sprung erfolgt absolut innerhalb der Seite, die durch die
oberen 4 Bits von PC+4 vorgegeben sind.
5. Pseudodirect addressing
op
Sprungzielindex
Label
Memory
26
<<2
28
Word
PC+4
32
[31:28] 4
Index des Folgebefehls
Sprungzieladresse
(Byteadresse)
Befehl am Sprungziel
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
5.
6–34
Bedingter Sprung
beq rs, rt, Label
(branch if equal)

if (rs=rt) then goto (PC+4) + (Label<<2)

Befehlsformat I (für Immediate)
4
op
6 Bit
Beispiel
4
rs
rt
reg1
5 Bit
reg2
5 Bit
17
18
genauer s. 6-35
Label
Sprungziel (Wortindex) relativ zu PC
16 Bit
25
if (r17 = r18) then goto (PC+4) + 25*4
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD

beq: Verwendete Adressierungsart

Wie kann man Sprungziele größer als 216-1 realisieren?

Beobachtung: Verzweigungen in Schleifen und
Fallunterscheidungen haben Sprungadressen „in der Nähe“
des aktuellen Befehls

PC-relative Adressierung: Sprungzieladresse (branch
target address) ist

PC  (PC + 4) + signExt(Label)<<2
4. PC-relative addressing
op
rs
rt
Sprungzielindex
Label
16
sign
ext.
Memory
32
<<2
32
Word
+
PC+4
32
32
Byte-Adresse des Folgebefehls
Sprungzieladresse
(Byteadresse)
Befehl am Spungziel
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–35

bne rs, rt, Label (branch if not equal)

Wenn die Registerinhalte ungleich sind, wird ein
relativer Sprung, wie bei beq, durchgeführt.

op = 5
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Bedingter Sprung
6–36
Compare

slt rd, rs, rt (set on less than)

if (rs < rt) then rd 1 else rd  0

Die Bedingung < wird berechnet und in rd gespeichert. Sie
kann dann anschließend durch beq oder bne zum
Verzweigen benutzt werden.

Format R (für Register)
0
op
6 Bit
0
rs
rt
rd
0
rs
5 Bit
rt
5 Bit
rd shamt funct
5 Bit 5 Bit 6 Bit
18
19
17
0
Beispiel: slt $s1,$s2,$s3
42
42
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–37
Register-indirekter Sprung

jr rs (jump register)

Springe zu der Programmadresse, die in dem
Register rs steht

Anwendungen: case, Unterprogramm-Rücksprung

Format R
0
OPC
6 Bit
0
rs
rs
5 Bit
31
0
rt
5 Bit
0
Beispiel: jr $ra
0
0
8
rd shamt funct
5 Bit 5 Bit 6 Bit
0
0
8
// ra = Register 31
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–38
Schwächen der bisherigen Befehle:

Die Verwendung von Konstanten ist unhandlich:


Man muß entweder ein spezielles Register bereitstellen
($zero) oder man muss die Konstanten im Speicher an
bekannten Stellen ablegen und erst in ein Register laden.
Da Konstanten (z. B. für Inkrement/DekrementOperationen bei Datenzugriffen in Schleifen) häufig
auftreten, ist ein verbesserter Zugriff auf (kleine)
Konstanten wünschenswert.
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Bisherige Adressierungsarten
6–39

I-Befehlsformat (I: immediate, unmittelbar, direkt):
Beispiel:
Dezimaldarstellung
op
rs
rt
6 Bit
5 Bit
5 Bit
MIPS:
8
addi $sp, $sp, 4
29
29
immediate
16 Bit
// $sp = $sp + 4
4
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Konstanten als Direkt-Operanden im Befehl
6–40

maximal 32 Bits große Konstanten (d. h. 232-1 = 4,29... 109)

Der Befehl lui (load upper half word immediate) lädt angegebene
Konstante in die höherwertigen 16 Bits des Zielregisters.
Beispiel:
lui $t0, 255

Binärdarstellung
ergibt
Inhalt von $t0

001111
00000
01000
0000 0000 1111 1111
0000 0000 1111 1111
0000 0000 0000 0000
Danach Setzen der niederwertigen 16 Bits von $t0 z. B. mit
addi $t0, $t0, 2304
Inhalt von $t0
0000 0000 1111 1111
0000 1001 0000 0000
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Behandlung großer Konstanten
6–41

Im folgenden wird der Entwurf einer ALU für MIPS
beschrieben. Dabei wird die ALU schrittweise vervollständigt.
Ziel
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Konstruktion der ALU für MIPS
6–42
6–43
Ziel: ALU als Schalkette
Operation
a0
b0
CarryIn
ALU0
Less
CarryOut
Result0
a1
b1
0
CarryIn
ALU1
Less
CarryOut
Result1
a2
b2
0
CarryIn
ALU2
Less
CarryOut
Result2
a31
b31
0
CarryIn
ALU31
Less
and, or, add, sub, slt
Zero
Result31
Set
Overflow
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Bnegate
Konstruktion der ALU

(1. Schritt) : 1-Bit-ALU

Diese 1-Bit-ALU realisiert nur
die Operationen AND, OR und
Addition.

Auswahl der Operation über
einen Multiplexer
Operation
CarryIn
a
0
1
2
b
CarryOut
Result
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–44
(2. Schritt)
Binvert
Operation

a - b = a + (-b)

Subtraktion wird auf Addition
und Komplementbildung zurück
geführt.

(-b): Zweier-Komplement
bedeutet: bitweise Invertierung
von b und Addition von 1
CarryIn
a
0
1
b
0
2
Result
Hardware-Erweiterungen:

Jeder 1-Bit-Block wird an einem
Eingang um eine Inverterschaltung
und einen Multiplexer erweitert.

Bei der Gesamtschaltung wird der
CarryIn-Eingang der
niederwertigsten Bit-Stufe bei einer
Subtraktion auf „1“ gesetzt.
1
CarryOut
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Erweiterung 1-Bit ALU für Subtraktion (a-b)
6–45

Zusätzlich wird die Subtraktion benötigt, die auch
zum Vergleichen verwendet wird.

Realisierung des set-on-less-than Befehls (slt)




Zur Erinnerung: slt ist ein arithmetischer Befehl
produziert 1, falls rs < rt, und 0 sonst
verwende Subtraktion: (a – b) < 0 impliziert (a < b)
Realisierung des Gleichheitstests:


beq $t5, $t6, $t7
verwende Subtraktion: (a – b) = 0 impliziert (a=b)
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Vergleich durch Subtraktion
6–46
Binvert

Die Operation
slt $t0, $s0, $s1
ist definiert als:

if ($s0 < $s1)
$t0 = 1;
else
$t0 = 0;
Operation
CarryIn
a
0
1
b
0
Result 
Um dies zu realisieren, muß
die ALU die 32-Bit Konstanten
„0“ und „1“ erzeugen können.

Dazu wird jede Bit-Stelle
zunächst um einen „Less“Eingang erweitert, der für
alle Bits (außer dem
niederwertigsten) den
Wert „0“ trägt.
2
1
Less
3
CarryOut
6–47
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
(3. Schritt) Erweiterungen für slt (1)
Erweiterungen für slt (2)

Das niederwertigste Bit
muß abhängig vom
Vergleich von a und b auf
„0“ oder „1“ gesetzt
werden.

Es gilt:
a<b  a-b < 0
a<b  Result.bit31=1

Das Resultat von a-b
(höchstwertige Stelle) wird
also als Set-Ausgang
herausgeführt und an den
Less-Eingang des
niederwertigsten Bits angelegt.

Zusätzlich erhält das höchstwertige Bit eine OverflowDetektion.
Operation
CarryIn
a
0
1
Result
b
0
2
1
Less
3
Set
Overflow
detection
Overflow
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Binvert
6–48
6–49
Resultierende 32-Bit ALU

Die vollständige 32-Bit
Schaltung mit Hardware
für die slt-Operation
CarryIn
a0
b0
CarryIn
ALU0
Less
CarryOut
a1
b1
0
CarryIn
ALU1
Less
CarryOut
a2
b2
0
CarryIn
ALU2
Less
CarryOut
Operation
Result0
Result1
Result2
CarryIn
a31
b31
0
CarryIn
ALU31
Less
Set  a-b < 0
Result31
Set
Overflow
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Binvert
6–50
(4. Schritt) Vollständige 32-Bit ALU
Operation
a0
b0
CarryIn
ALU0
Less
CarryOut
Result0
a1
b1
0
CarryIn
ALU1
Less
CarryOut
Result1
a2
b2
0
CarryIn
ALU2
Less
CarryOut
Result2
a31
b31
0
CarryIn
ALU31
Less

Binvert und CarryIn werden zu
Bnegate zusammengefaßt.

Es wird eine einfache Schaltung
zum Test auf „0“ mit dem
Ausgang Zero hinzugefügt.
Zero

Steuereingänge: Die drei Leitungen
Bnegate und Operation (2 Bit)
codieren die ALU-Operationen:
Result31
Set
Overflow
0
0
0
1
1
00
01
10
10
11
=
=
=
=
=
and
or
add
subtract
slt
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Letzte Erweiterungen:
Bnegate

Eine 32-Bit ALU für MIPS-Befehlssatz lässt sich schrittweise
entwerfen:




Multiplexer zur Auswahl des gewünschten Resultates verwenden.
Subtraktion kann durch Addition des Zweier-Komplements effizient
realisiert werden.
Durch mehrfache Verwendung einer 1-Bit ALU kann 32-Bit ALU
realisiert werden.
Heute: Verwendung von Synthese-Tools



Eingabe: Hardware-Beschreibung
Ausgabe: optimierte ALU
Benutzer: Steuerung der Synthese über geeignete
Beschreibungsformen, Modularisierungen, Verwendung von
bestimmten Komponenten, Einstellung von Parametern.
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Was haben wir bis jetzt erreicht ?
6–51

Weitere Befehle










Ganzzahlarithmetik-Befehle
Beispiel load und store
Unterprogramm-Sprung
Zeichen und byteweise Zugriffe
Byte-Ladebefehl Signed
Byte-Ladebefehl Unsigned
Vergleichskonstante im Befehl slti
Vergleichsbefehl Signed/Unsigned
Logische Operationen
Zusammenfassung der Adressierungsarten
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
ANHANG
6–52
2 neue Register
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Ganzzahlarithmetik-Befehle
6–53
8+s1
lw $s0, 8($s1) // s0  m[8+s1]
sw $s0, 16($s1) // s0  m[16+s1]
Bemerkung: Die Konstante wird auch als Offset bezeichnet, eine konstante
Distanz zu der Basisadresse. Die Basisadresse kann auch als Indexregister
fungieren, d. h. durch Inkrementieren der Basisadresse können fortlaufende
Elemente eines Vektors adressiert werden.
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Beispiel load und store
6–54

jal Label (jump and link)

Springe zu der Programmadresse Label<<2 (Anfang des
Unterprogramms und rette Rücksprungadresse PC+4 in $ra)

Anwendung: Sprung zu einem Unterprogramm

Format J
3
op
6 Bit
3
Label
Sprungziel (Wortindex)
26 Bit
2500
Beispiel: 256: jal 10000 (Springe an die Programmadresse 10000=2500*4)
und merke 256+4 in $ra
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Unterprogramm-Sprung
6–55
1.
(Genaueres über die Programmierung von Prozeduren ist
Stoff von GDI 3)
Parameter bereit stellen, so dass Prozedur darauf zugreifen kann:


2.
Ablaufsteuerung (control) der Prozedur übergeben:


3.
4.
5.
jal Prozeduradresse (jump and link)
Sonderbefehl für Prozedurausführung: springt zur angegebenen Adresse
und speichert die Adresse des folgenden Befehls in $ra
Benötigten Speicherbereich für Prozedur bereitstellen
Prozedur ausführen
Ergebniswert so bereitstellen, dass aufrufendes Programm darauf
zugreifen kann:

6.
Argumentregister $a0, $a1, $a2, $a3
Eingangsparameter bleiben durch Prozedur unverändert
Ergebniswertregister $v0,$v1
Ablaufsteuerung an Aufrufstelle zurückgeben: durch Sprung zurück
zum Ausgangspunkt:

jr $ra (jr: jump register, ra: return address)
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Schritte bei der Ausführung einer Prozedur
6–56

„Daten“ sind nicht immer nur Zahlen, häufig auch Texte,
d. h. Zeichenketten (strings).

Einzelne Zeichen (character) werden durch einzelne Bytes
repräsentiert.

Befehlssätze verfügen daher über Byte-Lade- und ByteSpeicher-Operationen zur Zeichenverarbeitung.

Ladeoperation: lb $t0, 0($sp) (load byte)


Lädt ein Byte aus dem Speicher (vom Stack markiert durch sp) und
platziert es in die rechts gelegenen (niederwertigen) acht Bits eines
Registers.
Speicheroperation: sb $t0, 0($a1) (store byte)

Speichert die niederwertigen acht Bits eines Registers in die
bezeichnete Speicherposition
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Zeichen und byteweise Zugriffe
6–57
Byte-Ladebefehl Signed

lb (load byte) interpretiert das zu ladende Byte als
vorzeichenbehaftete Zahl, d. h.



wenn das vorderste Bit des Bytes „0“ ist, müssen die vorderen 24 Bit
des Zielregisters ebenfalls „0“ sein,
wenn das vorderste Bit „1“ ist, müssen die vorderen 24 Bit des
Zielregisters ebenfalls „1“ sein.
Die Operation, die das durchführt, heißt „sign extension“.
mit lb zu ladendes Byte:
Zielregister
00000000 00000000 00000000 00001101
mit lb zu ladendes Byte:
Zielregister
00001101
10001101
11111111 11111111 11111111 10001101
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–58
Byte-Ladebefehl Unsigned

lbu (load byte unsigned) interpretiert das zu
ladende Byte als vorzeichenlose Zahl, d. h.

unabhängig vom Wert des zu ladenden Bytes werden
die oberen 24 Bits des Zielregisters auf „0“ gesetzt.
mit lbu zu ladendes Byte:
Zielregister
00000000 00000000 00000000 00001101
mit lbu zu ladendes Byte:
Zielregister

00001101
10001101
00000000 00000000 00000000 10001101
Da ein Zeichen (character) in der Regel durch ein Byte
dargestellt wird (und Zahlen durch mehr als ein Byte),
wird lbu fast ausschließlich verwendet.
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–59
Weiteres Beispiel:

bisher

Immediate Adressierung
slt
$t0, $s1, $s2
slti $t0, $s1, 10
# falls $s1 < 10: $t0=1, sonst $t0=0
Dezimaldarstellung
10
8
17
Binärdarstellung
001010
01000
10001

# falls $s1 < $s2: $t0=1, sonst $t0=0
10
0000 0000 0000 1010
Vorteil der direkten Adressierung: Die Verwendung häufig
vorkommender, kleiner Konstanten wird effizient (schnell) ausgeführt !
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Vergleichskonstante im Befehl slti
6–60
Vergleichsbefehl Signed/Unsigned

slt und slti (set on less than [immediate]) interpretieren
die zu vergleichenden Bitfolgen als vorzeichenbehaftet,


sltu und sltiu (set on less than [immediate] unsigned)
interpretieren die zu vergleichenden Bitfolgen als
vorzeichenlos,


d. h. Zahlen mit einer „1“ im vordersten Bit sind kleiner als Zahlen
mit einer „0“ ganz vorne.
d. h. Zahlen mit einer „1“ im vordersten Bit sind größer als Zahlen
mit einer „0“ ganz vorne.
Beispiel: $s0 = 11111111 11111111 11111111 11111111
$s1 = 00000000 00000000 00000000 00000001
slt
$t0, $s0, $s1
$t0 = 1
signed: kleiner
sltu
$t0, $s0, $s1
$t0 = 0
unsigned: größer
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
6–61

Bitweises logisches UND (and):


Setzt alle Bit-Positionen des Zielregisters auf „1“, die sowohl im ersten
als auch im zweiten Quellregister auf „1“ stehen.
Beispiel: and $t0, $t1, $t2
$t2 = 00110000 00000111 00111100 11111111
$t1 = 01111000 00011100 11000011 11110000
$t0 = 00110000 00000100 00000000 11110000
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Logische Operationen
6–62

Bitweises logisches ODER (or):


Setzt alle Bit-Positionen des Zielregisters auf „1“, die entweder im
ersten oder im zweiten Quellregister auf „1“ stehen.
Beispiel: or $t0, $t1, $t2
$t2 = 00110000 00000111 00111100 11111111
$t1 = 01111000 00011100 11000011 11110000
$t0 = 01111000 00011111 11111111 11111111
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Logische Operationen
6–63
1. Immediate-Adressierung (Konstantendressierung):
Operand ist Konstante im Befehl selbst.
Format I: addi rs,rt, IMMEDIATE
2. Registeradressierung: Operand ist Registerinhalt
Format R
3. Basisadressierung: Operandenadresse ist Summe von
Basisregisterinhalt und Offset-Address im Befehl
Format I, load ,store
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Zusammenfassung der Adressierungsarten
6–64
4. PC-relative Adressierung: Sprungzieladresse (branch target address) ist
(PC + 4) plus relativer Sprungzielindex (Label) im Befehl,
verschoben nach links um 2 Bitpositionen
4. PC-relative addressing
op
rs
rt
Format I: beq rs,rt, Label
Label
16
sign
ext.
Memory
32
<<2
32
Word
+
PC+4
32
32
5. Pseudodirekte Adressierung: Sprungzieladresse setzt sich aus 26 Bits im
Befehl (Label), verschoben nach links um 2 Bitpositionen und den
oberen 4 Bits des PC (inkrementiert um 4) zusammen.
5. Pseudodirect addressing
op
Format J: j Label
Label
Memory
26
<<2
28
Word
PC+4
[31:28]
32
4
Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD
Zusammenfassung der Adressierungsarten
6–65