Grundlagen der Rechnerarchitektur
MIPS‐Assembler
MIPS Assembler
Übersicht
• Arithmetik, Register und Speicherzugriff
• Darstellung von Instruktionen g
• Logische Operationen W it A ith tik
• Weitere Arithmetik
• Branches und Jumps
• Prozeduren
• 32‐Bit‐Konstanten und Adressierung
• 32‐Bit‐Konstanten und Adressierung
• Synchronisation
• Exceptions
• Pseudoinstruktionen, Direktiven und Makros ,
Motivation
Grundlagen der Rechnerarchitektur ‐Assembler 3
Warum ein Assembler‐Kurs?
• Wir wollen etwas über Rechnerarchitektur lernen.
Assembler ist ein Teil davon.
• Nach dem Erlernen von Assembler eines Systems,
l t A bl d R h ki d l i ht
lernt man Assembler anderer Rechner kinderleicht
• Während wir uns mit Assembler beschäftigen g
lernen wir auch generelle Konzepte kennen, wie
die Hardware in Computern und eingebetteten
die Hardware in Computern und eingebetteten
Systemen organisiert ist
Vor‐ und Nachteile von Assembler
ll bl i ?
• Wann sollte man Assembler programmieren?
– Code‐Größe oder Geschwindigkeit sollen bis auf das äußerste ausgereizt werden g
– Verwendung spezieller Maschineninstruktionen, die ein Compiler nicht nutzt (in der Regel bei CISC)
– Es gibt für die Computer‐Hardware keine höhere Sprache Es gibt für die Computer Hardware keine höhere Sprache
• Meist wird ein hybrider Ansatz gewählt
– Man programmiert das meiste in einer High‐Level‐Sprache
– Nur kleine Teile des gesamten Codes werden direkt in Assembler optimiert
• Nachteil von Assembler Nachteil von Assembler
– Programme laufen nur für den Hardwaretyp für den diese programmiert sind
Assembler Code ist im Vergleich zu High Level Sprachen deutlich – Assembler‐Code ist im Vergleich zu High‐Level‐Sprachen deutlich
länger
• Programmieren dauert deutlich länger
• Programmieren ist fehleranfälliger (insbesondere wegen fehlender Struktur)
• Programmieren ist fehleranfälliger (insbesondere wegen fehlender Struktur)
Grundlagen der Rechnerarchitektur ‐Assembler 5
Assembler am Beispiel der MIPS‐Architektur
h i bi
• Frühere Einsatzgebiete MIPS
– Silicon Graphics Unix‐Workstations (z. B. SGI Indigo2) Silicon Graphics Unix Server (z B SGI Origin2000)
– Silicon Graphics Unix‐Server (z. B. SGI Origin2000)
– DEC Workstations (z.B. DECstation‐Familie und DECsystem) – Siemens bzw. SNI Server der RM‐Serie
– Control Data Corporation Computer des Typs CDC 4680
• Heutiger Einsatz von MIPS in eingebetteten Systemen
– Cobalt‐Server bis RaQ/Qube2 – BMW‐Navigationssysteme
die Fritz!Box – die Fritz!Box
– Satellitenreceiver – Dreambox Dreambox
– Konica Minolta DSLRs
– Sony‐ und Nintendo‐Spielkonsolen
Quelle der Liste: de.wikipedia.org/wiki/MIPS‐Architektur
Warum gerade MIPS (und nicht Intel x86)?
• MIPS‐Instruktionssatz ist klar und einfach (RISC)
• Sehr gut in Lehrbüchern beschrieben Sehr gut in Lehrbüchern beschrieben
• Sehr ähnlich zu vielen modernen Prozessoren
( B ARM h i h h k )
(z.B. ARM; schauen wir uns auch noch kurz an)
• MIPS ist eine kommerziell relevante
Instruktionssatzarchitektur. (z.B. 2002 wurden fast 100 Millionen MIPS Prozessoren hergestellt) fast 100 Millionen MIPS Prozessoren hergestellt)
7 Grundlagen der Rechnerarchitektur ‐Assembler
Begleitend: SPIM‐ und MARS‐Simulator
Programmieren lernt man nicht durch zuschauen!
Programmieren lernt man nicht durch zuschauen!
Alle Konzepte sollte man hier selber ausprobieren!
Arithmetik, Register und Speicherzugriff
Grundlagen der Rechnerarchitektur ‐Assembler 9
Arithmetik und Zuweisungen
Ei f h A ith tik it Z i C Programm:
a = b + c;
MIPS Instruktionen:
Einfache Arithmetik mit Zuweisung
a = b + c;
d = a – e;
K l A ith tik it Z i
C Programm: MIPS Instruktionen (verwende temporäre
Variablen t0 und t1):
Komplexere Arithmetik mit Zuweisung
f = (g + h) – (i + j);
Die Operanden sind Register
V i B i i l K l A ith tik it Z i C Programm:
f = (g + h) (i + j);
MIPS Instruktionen (verwende temporäre Register $t0 und $t1):
Voriges Beispiel: Komplexere Arithmetik mit Zuweisung
f = (g + h) – (i + j);
Sei hierbei:
in Re ister $s1 espei hert
add $t0, $s1, $s2 # t0=g+h add $t1, $s3, $s4 # t1=i+j
g in Register $s1 gespeicherth in Register $s2 gespeichert i in Register $s3 gespeichert j in Register $s4 gespeichert
add $s0, $t0, $t1 # f=t0+t1
j in Register $s4 gespeichert f in Register $s0 gespeichert
MIPS Registergröße = 32 Bit
Assembler‐Syntax:
Das Zeichen # leitet für den Rest der Zeile einen Kommentar ein.
Grundlagen der Rechnerarchitektur ‐Assembler 11
Der Text wird vom Assembler einfach ignoriert.
Speicher‐Operanden
C Programm:
g = h + A[8];
MIPS Instruktionen (verwende temporäres Register $t0):
Sei hierbei:
g in Register $s1 gespeichert h in Register $s2 gespeichertg $ g p
Basisadresse von A in Register $s3
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Alignment‐Restriction
Zugriff auf A[8], wenn Basisadresse von A in Register $s3 gespeichert?g [ ], g $ g p
Grundlagen der Rechnerarchitektur ‐Assembler 13
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Laden und Speichern
C Programm:
A[12] = h + A[8];
MIPS Instruktionen (verwende temporäre Register $t0):
A[12] = h + A[8];
Sei hierbei:
Basisadresse on A in in Re ister $s3 Basisadresse von A in in Register $s3 h in Register $s2 gespeichert
Laden und Speichern von Bytes
C Programm:
A[12] = A[8];
MIPS Instruktionen (verwende temporäre Register $t0):
Sei hierbei:
Basisadresse von A in in Register $s3 h in Register $s2 gespeichert
h in Register $s2 gespeichert
Sei A[8] = 01110010. Was passiert im obigen Beispiel bei lb mit $t0 genau?
LSB
$t0 MSB
Sei A[8] = 11110010. Was passiert im obigen Beispiel bei lb mit $t0 genau?
$t0
Grundlagen der Rechnerarchitektur ‐Assembler 15
MSB LSB
Weitere Befehle zum Laden und Speichern
Laden von Byte ohne Sign‐Extension:
lbu { Beispiel: lbu $t0, 27($s3) }
Was passiert im obigen Beispiel mit $t0, wenn 27($s3) = 11001000?
$t0
LSB
$t0 MSB
Laden von Halfword mit Sign‐Extension:
lh { Beispiel: lh $t0, 22($s3) }
Laden von Halfword ohne Sign‐Extension:
lhu { Beispiel: lhu $t0, 22($s3) }
Speichern von Halfword:
sh { Beispiel: sh $t0, 22($s3) }
Addieren und Laden von Konstanten
C Programm:
x = x + 4;
MIPS Instruktion:
Sei hierbei:
x in Register $s3 gespeichert
MIPS erlaubt negative Konstanten und braucht damit kein ‚subi‘.
MIPS hat ein spezielles Register $zero, welches 0 ‘hart verdrahtet‘ speichert.
C Programm:
x = 42;
MIPS Instruktion:
Sei hierbei:
x in Register $s3 gespeichert
Grundlagen der Rechnerarchitektur ‐Assembler 17
Zwischenbilanz der MIPS Architektur
CPU
Memory
Name Nummer Verwendung
$0 . Registers
g
$zero 0 Konstante 0
$at 1
. . .
$31
$v0‐$v1 2‐3
$a0‐$a3 4‐7
$t0 $t7 8 15 T ä R i t
$ Arithmetic
Unit
$t0‐$t7 8‐15 Temporäre Register
$s0‐$s7 16‐23 „saved“ temporäre Reg.
$t8‐$t9 24‐25 Temporäre Register
Unit $t8 $t9 24 25 Temporäre Register
$k0‐$k1 26‐27
$gp 28
$sp 29
$fp 30
$
$ra 31
Zusammenfassung der behandelten Instruktionen
Instruktion Bedeutung Instruktion Bedeutung
hmetik add
rd, rs, rt Register rd = Register rs + Register rt
addi
rt, rs, imm Register rt = Register rs + Konstante imm
Arith addirt, rs, imm Register rt Register rs Konstante imm
sub
rd, rs, rt Register rd = Register rs –Register rt
lb
rt, address Lade Byte an der Adresse address in Register rt.
en
Das Byte ist sign‐extended.
lbu
rt, address Lade Byte an der Adresse address in Register rt.
Lade
lh
rt, address Lade Half‐Word an der Adresse address in Register rt.
Das Half‐Word ist sign‐extended.
lhu
rt address Lade Half‐Word an der Adresse address in Register rt
lhurt, address Lade Half Word an der Adresse address in Register rt.
lw
rt, address Lade Word an der Adresse address in Register rt.
n sb
rt, address Speichere unterstes Byte des Registers rt an Adresse address
Speichern
, p y g
sh
rt, address Speichere unteres Half‐Word des Registers rt an Adresse address
Grundlagen der Rechnerarchitektur ‐Assembler 19
S sw