• Keine Ergebnisse gefunden

Arithmetik LadenSpeichern

N/A
N/A
Protected

Academic year: 2022

Aktie "Arithmetik LadenSpeichern"

Copied!
27
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

Quelle der Liste: de.wikipedia.org/wiki/MIPS‐Architektur

(2)

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)

(3)

Begleitend: SPIM‐ und MARS‐Simulator

Programmieren lernt man nicht durch zuschauen!

Alle Konzepte sollte man hier selber ausprobieren!

(4)

Arithmetik, Register und Speicherzugriff

(5)

Arithmetik und Zuweisungen

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

(6)

Die Operanden sind Register

C Programm:

f = (g + h) – (i + j);

Sei hierbei:

g in Register $s1 gespeichert h in Register $s2 gespeichert i in Register $s3 gespeichert j in Register $s4 gespeichert f in Register $s0 gespeichert

MIPS Instruktionen (verwende temporäre  Register $t0 und $t1):

add $t0, $s1, $s2 # t0=g+h add $t1, $s3, $s4 # t1=i+j sub $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.

(7)

Speicher‐Operanden

C Programm:

g = h + A[8];

Sei hierbei:

g in Register $s1 gespeichert h in Register $s2 gespeichert

Basisadresse 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

(8)

Alignment‐Restriction

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

(9)

Laden und Speichern

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

(10)

Laden und Speichern von Bytes

C Programm:

A[12] = h + A[8];

Sei hierbei:

Basisadresse von A in Register $s3 h 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

(11)

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?

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

(12)

Addieren und Laden von Konstanten

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:

(13)

Zwischenbilanz der MIPS Architektur

CPU

$0 . . .

$31 Arithmetic

Unit

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

(14)

Zusammenfassung der behandelten Instruktionen

Instruktion Bedeutung

Arithmetik add

rd, rs, rt Register rd = Register rs + Register rt

addi

rt, rs, imm Register rt = Register rs + Konstante imm

sub

rd, rs, rt Register rd = Register rs –Register rt

Laden

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.

(15)

Quiz

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 421

4 12

8 4

12 33

Adr esse

Inhalt (Word)

Speicher zu Beginn

0 4 8 12

Adr esse

Inhalt (Word)

Speicher nach Instruktionsdurchlauf

(16)

Darstellung von Instruktionen

(17)

Übersetzung aus Assembler in Maschinensprache

add $t0, $s1, $s2

0 17 18 8 0 32

6 Bit Opcode

5 Bit Source1

5 Bit Source2

5 Bit Dest

5 Bit Shamt

6 Bit Funct

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

(18)

Notwendigkeit für andere Instruktionsformate

op rs rt rd shamt funct

6 Bit 5 Bit 5 Bit 5 Bit 5 Bit 6 Bit

add $t0, $s1, $s2

lw $t0, 32($s3)

?

R‐Typ

Opcode 6 Bit

Source 5 Bit

Dest 5 Bit

Konstante oder Adresse 16 Bit

I‐Typ

(19)

Zwischenbilanz

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 offset

6 Bit 5 Bit 5 Bit 5 Bit 5 Bit 6 Bit

16 Bit

(20)

Beispiel: A[300] = h + A[300]

$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

(21)

Logische Operationen

(22)

Erinnerung: Logischer Shift. Beispiel:

Logischer Links‐ und Rechts‐Shift

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 Bits srl $t2,$s0,7 # $t2 = $s0 >> 7 Bits sllv $t2,$s0,$s1 # $t2 = $s0 << $s1 Bits srlv $t2,$s0,$s1 # $t2 = $s0 >> $s1 Bits

Beispiel: Maschineninstruktion für obige sll Assembler‐Instruktion:

R‐Typ

0 0 16 10 4 0

6 Bit Opcode

5 Bit Source1

5 Bit Source2

5 Bit Dest

5 Bit Shamt

5 Bit Funct

(23)

Erinnerung: Arithmetischer Rechts‐Shift. Beispiel mit 8‐Bit:

0011 0000 1101 0111

Arithmetischer Rechts‐Shift

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

(24)

Erinnerung: AND.

AND, OR, NOR und XOR

MIPS‐Instruktionen (R‐Typ), Beispiel:

and $t0,$t1,$t2 # $t0 = $t1 AND $t2 or $t0,$t1,$t2 # $t0 = $t1 OR $t2 nor $t0,$t1,$t2 # $t0 = $t1 NOR $t2 xor $t0,$t1,$t2 # $t0 = $t1 XOR $t2 MIPS‐Instruktionen (I‐Typ), Beispiel:

andi $t0,$t1,0111 # $t0 = $t1 AND 0111 ori $t0,$t1,1100 # $t0 = $t1 OR 1100 xori $t0,$t1,1100 # $t0 = $t1 XOR 1100

Erinnerung: OR. Erinnerung NOR. Erinnerung XOR.

(25)

Es gibt gar kein NOT?!

Erinnerung NOT (auf Folie zu Zweierkomplement kurz eingeführt):

Beobachtung:

Wie kann man also „NOT($t0)“ in MIPS realisieren?

(26)

Zusammenfassung der behandelten Instruktionen

Instruktion Bedeutung

Shift

sll rd, rs, shamt Register rd = Register rs logisch links um den Wert shamt geshiftet.

sllvrd, 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.

srard, rs, shamt Register rd = Register rs arithmetisch rechts um den Wert shamt geshiftet.

sravrd, rt, rs Register rd = Register rs arithmetisch rechts um den in Register rs gespeicherten Wert geshiftet.

Logische Verknüpfung

andrd, 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.

andirt, 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

(27)

MIPS‐Assemblercode um folgende Funktion zu berechnen:

$s1 = die ersten 8 Bits von 4 * NOT($s1 AND $s2)

Schwieriges Quiz

Tipp: wir brauchen 

and, nor und sll

Referenzen

ÄHNLICHE DOKUMENTE

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung.. unter dem Förderkennzeichen

addi rt, rs, imm Register rt = Register rs + Konstante imm sub rd, rs, rt Register rd = Register rs

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

addi rt, rs, imm Register rt = Register rs + Konstante imm sub rd, rs, rt Register rd = Register rs

addi rt, rs, imm Register rt = Register rs + Konstante imm sub rd, rs, rt Register rd = Register rs

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

These included compile-time and link-time schemes for allocating 52 registers, and register window schemes using 128 registers organized into fixed-size or variable-sized

© Copyright: Department for Northern European Studies Berlin and authors.. Die Geschichte eines