Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel...

27
Assembler am Beispiel der MIPSArchitektur Frühere Einsatzgebiete MIPS Silicon Graphics UnixWorkstations (z. B. SGI Indigo2) Silicon Graphics UnixServer (z. B. SGI Origin2000) DEC Workstations (z.B. DECstationFamilie und DECsystem) Siemens bzw. SNI Server der RMSerie Control Data Corporation Computer des Typs CDC 4680 Heutiger Einsatz von MIPS in eingebetteten Systemen CobaltServer bis RaQ/Qube2 BMWNavigationssysteme die Fritz!Box Satellitenreceiver Dreambox Konica Minolta DSLRs Sonyund NintendoSpielkonsolen Grundlagen der Rechnerarchitektur Assembler 6 Quelle der Liste: de.wikipedia.org/wiki/MIPSArchitektur

Transcript of Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel...

Page 1: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 2: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 3: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

Begleitend: SPIM‐ und MARS‐Simulator

Grundlagen der Rechnerarchitektur ‐ Assembler 8

Programmieren lernt man nicht durch zuschauen!Alle Konzepte sollte man hier selber ausprobieren!

Page 4: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

Arithmetik, Register und Speicherzugriff

Grundlagen der Rechnerarchitektur ‐ Assembler 9

Page 5: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 6: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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.

Page 7: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 8: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 9: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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):

Page 10: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 11: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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) }

Page 12: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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:

Page 13: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 14: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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.

Page 15: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 16: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

Darstellung von Instruktionen

Grundlagen der Rechnerarchitektur ‐ Assembler 21

Page 17: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

Ü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

Page 18: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 19: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 20: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 21: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

Logische Operationen

Grundlagen der Rechnerarchitektur ‐ Assembler 26

Page 22: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 23: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 24: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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.

Page 25: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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?

Page 26: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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

Page 27: Assembler am Beispiel MIPS Architekturunikorn/lehre/gdra/ss16/03 MIPS... · Assembler am Beispiel der MIPS‐Architektur • Frühere Einsatzgebiete MIPS – Silicon Graphics Unix‐Workstations

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