assembler am beispiel mips architekturunikorn/lehre/gdra/ss16/03 mips... · assembler am beispiel...
TRANSCRIPT
Assembler am Beispiel der MIPS‐Architektur• Frühere Einsatzgebiete MIPS
– Silicon Graphics Unix‐Workstations (z. B. SGI Indigo2) – 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– Satellitenreceiver– Dreambox– Konica Minolta DSLRs – Sony‐ und Nintendo‐Spielkonsolen
Grundlagen der Rechnerarchitektur ‐ Assembler 6Quelle der Liste: de.wikipedia.org/wiki/MIPS‐Architektur
7
Warum gerade MIPS (und nicht Intel x86)?• MIPS‐Instruktionssatz ist klar und einfach (RISC)• Sehr gut in Lehrbüchern beschrieben• Sehr ähnlich zu vielen modernen Prozessoren (z.B. ARM; schauen
wir uns eventuell auch noch kurz an)• MIPS ist eine kommerziell relevante Instruktionssatzarchitektur.
(z.B. 2002 wurden fast 100 Millionen MIPS Prozessoren hergestellt)
Grundlagen der Rechnerarchitektur ‐ Assembler
Begleitend: SPIM‐ und MARS‐Simulator
Grundlagen der Rechnerarchitektur ‐ Assembler 8
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
Grundlagen der Rechnerarchitektur ‐ Assembler 10
C Programm:
a = b + c;
d = a – e;
MIPS Instruktionen:
Einfache Arithmetik mit Zuweisung
C Programm:
f = (g + h) – (i + j);
MIPS Instruktionen (verwende temporäre Variablen t0 und t1):
Komplexere Arithmetik mit Zuweisung
Die Operanden sind Register
Grundlagen der Rechnerarchitektur ‐ Assembler 11
C Programm:
f = (g + h) – (i + j);
Sei hierbei:g in Register $s1 gespeicherth in Register $s2 gespeicherti in Register $s3 gespeichertj in Register $s4 gespeichertf in Register $s0 gespeichert
MIPS Instruktionen (verwende temporäre Register $t0 und $t1):
add $t0, $s1, $s2 # t0=g+hadd $t1, $s3, $s4 # t1=i+jsub $s0, $t0, $t1 # f=t0-t1
Voriges Beispiel: Komplexere Arithmetik mit Zuweisung
MIPS Registergröße = 32 Bit
Assembler‐Syntax:Das Zeichen # leitet für den Rest der Zeile einen Kommentar ein. Der Text wird vom Assembler einfach ignoriert.
Speicher‐Operanden
Grundlagen der Rechnerarchitektur ‐ Assembler 12
C Programm:
g = h + A[8];
Sei hierbei:g in Register $s1 gespeicherth in Register $s2 gespeichertBasisadresse von A in Register $s3
MIPS Instruktionen (verwende temporäres Register $t0):
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Alignment‐Restriction
Grundlagen der Rechnerarchitektur ‐ Assembler 13
Zugriff auf A[8], wenn Basisadresse von A in Register $s3 gespeichert?
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Laden und Speichern
Grundlagen der Rechnerarchitektur ‐ Assembler 14
C Programm:
A[12] = h + A[8];
Sei hierbei:Basisadresse von A in Register $s3 und h in Register $s2 gespeichert
MIPS Instruktionen (verwende temporäre Register $t0):
Laden und Speichern von Bytes
Grundlagen der Rechnerarchitektur ‐ Assembler 15
C Programm:
A[12] = h + A[8];
Sei hierbei:Basisadresse von A in Register $s3h in Register $s2 gespeichert
MIPS Instruktionen (verwende temporäre Register $t0):
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?
LSB$t0
MSB
Weitere Befehle zum Laden und Speichern
Grundlagen der Rechnerarchitektur ‐ Assembler 16
Laden von Byte ohne Sign‐Extension:lbu { Beispiel: lbu $t0, 27($s3) }
Was passiert im obigen Beispiel mit $t0, wenn 27($s3) = 11001000?
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
Grundlagen der Rechnerarchitektur ‐ Assembler 17
C Programm:
x = x + 4;
Sei hierbei:x in Register $s3 gespeichert
MIPS Instruktion:
MIPS erlaubt negative Konstanten und braucht damit kein ‚subi‘.
MIPS hat ein spezielles Register $zero, welches 0 ‘hart verdrahtet‘ speichert.
C Programm:
x = 42;
Sei hierbei:x in Register $s3 gespeichert
MIPS Instruktion:
Zwischenbilanz der MIPS Architektur
Grundlagen der Rechnerarchitektur ‐ Assembler 18
CPU
$0...
$31
ArithmeticUnit
Registers
Memory
Name Nummer Verwendung
$zero 0 Konstante 0
$at 1
$v0‐$v1 2‐3
$a0‐$a3 4‐7
$t0‐$t7 8‐15 Temporäre Register
$s0‐$s7 16‐23 „saved“ temporäre Reg.
$t8‐$t9 24‐25 Temporäre Register
$k0‐$k1 26‐27
$gp 28
$sp 29
$fp 30
$ra 31
Zusammenfassung der behandelten Instruktionen
Grundlagen der Rechnerarchitektur ‐ Assembler 19
Instruktion BedeutungArith
metik add rd, rs, rt Register rd = Register rs + Register rt
addi rt, rs, imm Register rt = Register rs + Konstante immsub rd, rs, rt Register rd = Register rs –Register rt
Lade
n
lb rt, address Lade Byte an der Adresse address in Register rt.Das Byte ist sign‐extended.
lbu rt, address Lade Byte an der Adresse address in Register rt.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.lw rt, address Lade Word an der Adresse address in Register rt.
Speichern sb rt, address Speichere unterstes Byte des Registers rt an Adresse address
sh rt, address Speichere unteres Half‐Word des Registers rt an Adresse address
sw rt, address Speichere Inhalt des Registers rt an Adresse address.
Quiz
Grundlagen der Rechnerarchitektur ‐ Assembler 20
addi $s0, $zero, 4 #lw $s1, 0($s0) #lw $s2, 4($s0) #add $s1, $s1, $s1 #add $s1, $s1, $s2 #addi $s1, $s1, 1 #sw $s1, 0($s0) #
0 4214 128 4
12 33
…
Adresse
Inhalt (Word)
Speicher zu Beginn048
12
…
Adresse
Inhalt (Word)
Speicher nach Instruktionsdurchlauf
Darstellung von Instruktionen
Grundlagen der Rechnerarchitektur ‐ Assembler 21
Übersetzung aus Assembler in Maschinensprache
Grundlagen der Rechnerarchitektur ‐ Assembler 22
add $t0, $s1, $s2
0 17 18 8 0 326 Bit
Opcode5 Bit
Source15 Bit
Source25 BitDest
5 BitShamt
6 BitFunct
00000010001100100100000000100000
Assembler‐Instruktion
Maschinen‐Instruktion
Name Nr
$t0 8
$t1 9
$t2 10
$t3 11
$t4 12
$t5 13
$t6 14
$t7 15
Name Nr
$s0 16
$s1 17
$s2 18
$s3 19
$s4 20
$s5 21
$s6 22
$s7 23
Notwendigkeit für andere Instruktionsformate
Grundlagen der Rechnerarchitektur ‐ Assembler 23
op rs rt rd shamt funct6 Bit 5 Bit 5 Bit 5 Bit 5 Bit 6 Bit
add $t0, $s1, $s2
lw $t0, 32($s3)
?
R‐Typ
Opcode6 Bit
Source5 Bit
Dest5 Bit
Konstante oder Adresse16 Bit
I‐Typ
Zwischenbilanz
Grundlagen der Rechnerarchitektur ‐ Assembler 24
Instruktion Format op rs rt rd shamt funct
add R 0 reg reg reg 0 32
sub R 0 reg reg reg 0 34
addi (immediate) I 8 reg reg constant
lw (load word) I 35 reg reg offset
sw (store word) I 43 reg reg offset6 Bit 5 Bit 5 Bit 5 Bit 5 Bit 6 Bit
16 Bit
Beispiel: A[300] = h + A[300]
Grundlagen der Rechnerarchitektur ‐ Assembler 25
$t1 sei Basisadresse von A und h in $s2 gespeichert. Assembler‐Code?
Maschinen‐Code (der Einfachheit halber mit Dezimalzahlen)?
op rs rt rd adr/shamt funct Name Nr
$t0 8
$t1 9
$t2 10
$t3 11
$t4 12
$t5 13
$t6 14
$t7 15
Name Nr
$s0 16
$s1 17
$s2 18
$s3 19
$s4 20
$s5 21
$s6 22
$s7 23
Instruktion Format op rs rt rd shamt funct
add R 0 reg reg reg 0 32
lw (load word) I 35 reg reg offset
sw (store word) I 43 reg reg offset
Logische Operationen
Grundlagen der Rechnerarchitektur ‐ Assembler 26
Erinnerung: Logischer Shift. Beispiel:
Logischer Links‐ und Rechts‐Shift
Grundlagen der Rechnerarchitektur ‐ Assembler 27
Links‐Shift um 4 Stellen Rechts‐Shift um 4 Stellen
MIPS‐Shift‐Instruktionen sll und srl, sllv, srlv:
sll $t2,$s0,4 # $t2 = $s0 << 4 Bitssrl $t2,$s0,7 # $t2 = $s0 >> 7 Bitssllv $t2,$s0,$s1 # $t2 = $s0 << $s1 Bitssrlv $t2,$s0,$s1 # $t2 = $s0 >> $s1 Bits
Beispiel: Maschineninstruktion für obige sll Assembler‐Instruktion:
R‐Typ0 0 16 10 4 06 Bit
Opcode5 Bit
Source15 Bit
Source25 BitDest
5 BitShamt
5 BitFunct
Erinnerung: Arithmetischer Rechts‐Shift. Beispiel mit 8‐Bit:
0011 0000 1101 0111
Arithmetischer Rechts‐Shift
Grundlagen der Rechnerarchitektur ‐ Assembler 28
Rechts‐Shift um 4 Stellen Rechts‐Shift um 3 Stellen
Arithmetischer Rechts‐Shift in MIPS:
sra $t2,$s0,4 # $t2 = $s0 arithmetisch# um 4 Bits geshiftet
srav $t2,$s0,$s1 # $t2 = $s0 arithmetisch# um $s1 Bits geshiftet
Erinnerung: AND.
AND, OR, NOR und XOR
Grundlagen der Rechnerarchitektur ‐ Assembler 29
MIPS‐Instruktionen (R‐Typ), Beispiel:and $t0,$t1,$t2 # $t0 = $t1 AND $t2or $t0,$t1,$t2 # $t0 = $t1 OR $t2nor $t0,$t1,$t2 # $t0 = $t1 NOR $t2xor $t0,$t1,$t2 # $t0 = $t1 XOR $t2
MIPS‐Instruktionen (I‐Typ), Beispiel:andi $t0,$t1,0111 # $t0 = $t1 AND 0111ori $t0,$t1,1100 # $t0 = $t1 OR 1100xori $t0,$t1,1100 # $t0 = $t1 XOR 1100
Erinnerung: OR. Erinnerung NOR. Erinnerung XOR.
Es gibt gar kein NOT?!
Grundlagen der Rechnerarchitektur ‐ Assembler 30
Erinnerung NOT (auf Folie zu Zweierkomplement kurz eingeführt):
Beobachtung:
Wie kann man also „NOT($t0)“ in MIPS realisieren?
Zusammenfassung der behandelten Instruktionen
Grundlagen der Rechnerarchitektur ‐ Assembler 31
Instruktion BedeutungShift
sll rd, rs, shamt Register rd = Register rs logisch links um den Wert shamt geshiftet.
sllv rd, rt, rs Register rd = Register rs logisch links um den in Register rs gespeicherten Wert geshiftet.
srl rd, rs, shamt Register rd = Register rs logisch rechts um den Wert shamt geshiftet.
srlv rd, rt, rs Register rd = Register rs logisch rechts um den in Register rs gespeicherten Wert geshiftet.
sra rd, rs, shamt Register rd = Register rs arithmetisch rechts um den Wert shamt geshiftet.
srav rd, rt, rs Register rd = Register rs arithmetisch rechts um den in Register rsgespeicherten Wert geshiftet.
Logische
Verkn
üpfung
and rd, rs, rt Register rd = Register rs AND Register rt.
or rd, rs, rt Register rd = Register rs AND Register rt.
nor rd, rs, rt Register rd = Register rs AND Register rt.
xor rd, rs, rt Register rd = Register rsAND Register rt.
andi rt, rs, imm Register rt = Register rs AND Konstante imm
ori rt, rs, imm Register rt = Register rs AND Konstante imm
xori rt, rs, imm Register rt = Register rs AND Konstante imm
MIPS‐Assemblercode um folgende Funktion zu berechnen:
$s1 = die ersten 8 Bits von 4 * NOT($s1 AND $s2)
Schwieriges Quiz
Grundlagen der Rechnerarchitektur ‐ Assembler 32
Tipp: wir brauchen and, nor und sll