Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD...

87
Laden und Speichern Konstanten-Lade-Befehle legen einen neuen Wert oben auf dem Stack ab. legt dagegen den Wert aus der i -ten Zelle oben auf dem Stack ab. speichert den obersten Wert in der i -ten Zelle ab. 260

Transcript of Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD...

Page 1: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Laden und Speichern

• Konstanten-Lade-Befehle legen einen neuen Wert oben auf demStack ab.

• LOAD i legt dagegen den Wert aus der i-ten Zelle oben auf demStack ab.

• STORE i speichert den obersten Wert in der i-ten Zelle ab.260

Page 2: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

42

PC PC

CONST 42

261

Page 3: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC PC

ttTRUE

262

Page 4: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

i 21

21

i 21PC PC

LOAD i

263

Page 5: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

i

21

iPC PC

21

STORE i

264

Page 6: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Sprünge

• Sprünge verändern die Reihenfolge, in der die Befehleabgearbeitet werden, indem sie den PC modifizieren.

• Ein unbedingter Sprung überschreibt einfach den alten Wertdes PC mit einem neuen.

• Ein bedingter Sprung tut dies nur, sofern eine geeigneteBedingung erfüllt ist.

265

Page 7: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC PC

17

JUMP 17

266

Page 8: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC PC

tt FJUMP 17

267

Page 9: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC PC

ff

17

FJUMP 17

268

Page 10: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Allokierung von Speicherplatz

• Wir beabsichtigen, jeder Variablen unseresMiniJava-Programms eine Speicher-Zelle zuzuordnen.

• Um Platz für i Variablen zu schaffen, muss der SP einfach um ierhöht werden.

• Das ist die Aufgabe von ALLOC i.269

Page 11: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC PC

ALLOC 3

270

Page 12: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Ein Beispiel-Programm:

CONST 17CONST 4ADDCONST 2MULWRITEHALT271

Page 13: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

0123456 0

PC

CONST 17CONST 2ADDCONST 4HALTWRITEMUL

272

Page 14: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

0123456 17

PC

1

CONST 17CONST 2ADDCONST 4HALTWRITEMUL

273

Page 15: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

0123456 17

PC42

CONST 17CONST 2ADDCONST 4HALTWRITEMUL

274

Page 16: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

0123456

PC

321

CONST 17CONST 2ADDCONST 4HALTWRITEMUL

275

Page 17: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

0123456

PC

4221

CONST 17CONST 2ADDCONST 4HALTWRITEMUL

276

Page 18: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

0123456

PC

42 5

CONST 17CONST 2ADDCONST 4HALTWRITEMUL

277

Page 19: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

0123456

PC

6

CONST 17CONST 2ADDCONST 4HALTWRITEMUL

278

Page 20: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Ausführung eines JVM-Programms:

PC = 0;IR = Code[PC℄;while (IR != HALT) {PC = PC + 1;exe ute(IR);IR = Code[PC℄;}• IR = Instruction Register, d.h. eine Variable, die dennächsten auszuführenden Befehl enthält.

• exe ute(IR) führt den Befehl in IR aus.• Code[PC℄ liefert den Befehl, der in der Zelle in Code steht, aufdie PC zeigt.

279

Page 21: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.1 Übersetzung von Deklarationen

Betrachte Deklarationint x, y, result;Idee:Wir reservieren der Reihe nach für die Variablen Zellen im Speicher:

xyresult==⇒

Übersetzung von int x0, . . . , xn−1; = ALLOC n280

Page 22: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.1 Übersetzung von Deklarationen

Betrachte Deklarationint x, y, result;Idee:Wir reservieren der Reihe nach für die Variablen Zellen im Speicher:

xyresult==⇒

Übersetzung von int x0, . . . , xn−1; = ALLOC n281

Page 23: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.2 Übersetzung von Ausdrücken

Idee:Übersetze Ausdruck expr in eine Folge von Befehlen, die den Wertvon expr berechnet und dann oben auf dem Stack ablegt.

282

Page 24: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.2 Übersetzung von Ausdrücken

Idee:Übersetze Ausdruck expr in eine Folge von Befehlen, die den Wertvon expr berechnet und dann oben auf dem Stack ablegt.

Übersetzung von x = LOAD i — x die i-te VariableÜbersetzung von 17 = CONST 17Übersetzung von x - 1 = LOAD iCONST 1SUB

283

Page 25: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

i -9 PC

LOAD iCONST 1SUB

284

Page 26: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

i -9 PC

-9

LOAD iCONST 1SUB

285

Page 27: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

i -9

-9

PC

1

LOAD iCONST 1SUB

286

Page 28: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

i -9 PC

-10

LOAD iCONST 1SUB

287

Page 29: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Allgemein:

Übersetzung von - expr = Übersetzung von exprNEGÜbersetzung von expr1 + expr2 = Übersetzung von expr1

Übersetzung von expr2ADD... analog für die anderen Operatoren ...

288

Page 30: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Beispiel:

Sei expr der Ausdruck: (x + 7) * (y - 14)wobei x und y die 0. bzw. 1. Variable sind.Dann liefert die Übersetzung:

LOAD 0CONST 7ADDLOAD 1CONST 14SUBMUL289

Page 31: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.3 Übersetzung von Zuweisungen

Idee:• Übersetze den Ausdruck auf der rechten Seite.Das liefert eine Befehlsfolge, die den Wert der rechten Seiteoben auf dem Stack ablegt.

• Speichere nun diesen Wert in der Zelle für die linke Seite ab!

Sei x die Variable Nr. i. Dann istÜbersetzung von x = expr; = Übersetzung von exprSTORE i

290

Page 32: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.4 Übersetzung von Zuweisungen

Idee:• Übersetze den Ausdruck auf der rechten Seite.Das liefert eine Befehlsfolge, die den Wert der rechten Seiteoben auf dem Stack ablegt.

• Speichere nun diesen Wert in der Zelle für die linke Seite ab!

Sei x die Variable Nr. i. Dann istÜbersetzung von x = expr; = Übersetzung von exprSTORE i

291

Page 33: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Beispiel:

Für x = x + 1; (x die 2. Variable) liefert das:LOAD 2CONST 1ADDSTORE 2

292

Page 34: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

-92 PC

CONST 1ADDSTORE 2LOAD 2

293

Page 35: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

-92 PC

-9

CONST 1ADDSTORE 2LOAD 2

294

Page 36: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

-92 PC

-91

CONST 1ADDSTORE 2LOAD 2

295

Page 37: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

-92 PC

-8

CONST 1ADDSTORE 2LOAD 2

296

Page 38: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

2 -8 PC

CONST 1ADDSTORE 2LOAD 2

297

Page 39: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Bei der Übersetzung von x = read(); und write(expr);gehen wir analog vor :-)

Sei x die Variable Nr. i. Dann istÜbersetzung von x = read(); = READSTORE iÜbersetzung von write( expr); = Übersetzung von exprWRITE

298

Page 40: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.5 Übersetzung von if-StatementsBezeichne stmt das if-Statementif ( cond ) stmt1 else stmt2Idee:

• Wir erzeugen erst einmal Befehlsfolgen für cond, stmt1 undstmt2.

• Diese ordnen wir hinter einander an.

• Dann fügen wir Sprünge so ein, dass in Abhängigkeit desErgebnisses der Auswertung der Bedingung jeweils entwedernur stmt1 oder nur stmt2 ausgeführt wird.

299

Page 41: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Folglich (mit A, B zwei neuen Marken):Übersetzung von stmt = Übersetzung von condFJUMP A

Übersetzung von stmt1JUMP BA: Übersetzung von stmt2B: ...• Marke Amarkiert den Beginn des else-Teils.• Marke Bmarkiert den ersten Befehl hinter dem if-Statement.• Falls die Bedingung sich zu false evaluiert, wird der then-Teilübersprungen (mithilfe von FJUMP A).

• Nach Abarbeitung des then-Teils muss in jedem Fall hinterdem gesamten if-Statement fortgefahren werden. Dazu dientJUMP B.

300

Page 42: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Beispiel:

Für das Statement:if (x < y) y = y - x;else x = x - y;(x und y die 0. bzw. 1. Variable) ergibt das:

LOAD 0LOAD 1LESSFJUMP ALOAD 1LOAD 0SUBSTORE 1JUMP B

A: LOAD 0LOAD 1SUBSTORE 0B: ...301

Page 43: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

126 PC

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

302

Page 44: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

126

12

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

303

Page 45: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

126

126

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

304

Page 46: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

126

ff

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

305

Page 47: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

126 PC

A

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

306

Page 48: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

126 PC

12

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

307

Page 49: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

126 PC

126

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

308

Page 50: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

126 PC

6

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

309

Page 51: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

6 PC

6

FJUMP ALOAD 0LOAD 1LESS

SUBLOAD 0LOAD 1STORE 0A:B:

310

Page 52: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.6 Übersetzung von while-StatementsBezeichne stmt das while-Statementwhile ( cond ) stmt1Idee:

• Wir erzeugen erst einmal Befehlsfolgen für cond und stmt1.

• Diese ordnen wir hinter einander an.

• Dann fügen wir Sprünge so ein, dass in Abhängigkeit desErgebnisses der Auswertung der Bedingung entweder hinterdas while-Statement gesprungen wird oder stmt1 ausgeführtwird.

• Nach Ausführung von stmt1 müssen wir allerdings wieder anden Anfang des Codes zurückspringen :-)

311

Page 53: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Folglich (mit A, B zwei neuen Marken):Übersetzung von stmt = A: Übersetzung von condFJUMP B

Übersetzung von stmt1JUMP AB: ...• Marke Amarkiert den Beginn des while-Statements.• Marke Bmarkiert den ersten Befehl hinter demwhile-Statement.• Falls die Bedingung sich zu false evaluiert, wird die Schleifeverlassen (mithilfe von FJUMP B).

• Nach Abarbeitung des Rumpfs muss das while-Statementerneut ausgeführt werden. Dazu dient JUMP A.

312

Page 54: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Beispiel:

Für das Statement:while (1 < x) x = x - 1;(x die 0. Variable) ergibt das:

A: CONST 1LOAD 0LESSFJUMP BLOAD 0CONST 1SUBSTORE 0JUMP AB: ...

313

Page 55: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.7 Übersetzung von Statement-Folgen

Idee:• Wir erzeugen zuerst Befehlsfolgen für die einzelnen Statementsin der Folge.

• Dann konkatenieren wir diese.

Folglich:

Übersetzung von stmt1 ... stmtk = Übersetzung von stmt1

...

Übersetzung von stmtk

314

Page 56: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.8 Übersetzung von Statement-Folgen

Idee:• Wir erzeugen zuerst Befehlsfolgen für die einzelnen Statementsin der Folge.

• Dann konkatenieren wir diese.

Folglich:

Übersetzung von stmt1 ... stmtk = Übersetzung von stmt1

...

Übersetzung von stmtk

315

Page 57: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Beispiel:

Für die Statement-Folgey = y * x;x = x - 1;(x und y die 0. bzw. 1. Variable) ergibt das:

LOAD 1LOAD 0MULSTORE 1LOAD 0CONST 1SUBSTORE 0

316

Page 58: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.9 Übersetzung ganzer Programme

Nehmen wir an, das Programm prog bestehe aus einer Deklarationvon n Variablen, gefolgt von der Statement-Folge ss.

Idee:• Zuerst allokieren wir Platz für die deklarierten Variablen.

• Dann kommt der Code für ss.

• Dann HALT.Folglich:

Übersetzung von prog = ALLOC nÜbersetzung von ssHALT317

Page 59: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

9.9 Übersetzung ganzer Programme

Nehmen wir an, das Programm prog bestehe aus einer Deklarationvon n Variablen, gefolgt von der Statement-Folge ss.

Idee:• Zuerst allokieren wir Platz für die deklarierten Variablen.

• Dann kommt der Code für ss.

• Dann HALT.Folglich:

Übersetzung von prog = ALLOC nÜbersetzung von ssHALT318

Page 60: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Beispiel:

Für das Programmint x, y;x = read();y = 1;while (1 < x) {y = y * x;x = x - 1;}write(y);ergibt das (x und y die 0. bzw. 1. Variable) :

319

Page 61: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

ALLOC 2READSTORE 0CONST 1STORE 1A: CONST 1LOAD 0LESSFJUMP B

LOAD 1LOAD 0MULSTORE 1LOAD 0CONST 1SUBSTORE 0JUMP A

B: LOAD 1WRITEHALT

320

Page 62: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT321

Page 63: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT322

Page 64: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC2

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT323

Page 65: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

2

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT324

Page 66: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

2

1

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT325

Page 67: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

21

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT326

Page 68: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

211

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT327

Page 69: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

2112

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT328

Page 70: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

21tt

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT329

Page 71: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC

21

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT330

Page 72: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT331

Page 73: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT332

Page 74: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

1

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT333

Page 75: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

11

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT334

Page 76: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

ff

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT335

Page 77: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT336

Page 78: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

2

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT337

Page 79: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

PC21

STORE 0ALLOC 2READA: LESSFJUMP B

JUMP A

CONST 1LOAD 0CONST 1STORE 1

LOAD 1B: WRITEHALT338

Page 80: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Bemerkungen:

• Die Übersetzungsfunktion, die für ein MiniJava-ProgrammJVM-Code erzeugt, arbeitet rekursiv auf der Struktur desProgramms.

• Im Prinzip lässt sie sich zu einer Übersetzungsfunktion vonganz Java erweitern.

• Zu lösende Übersetzungs-Probleme:

• mehr Datentypen;

• Prozeduren;

• Klassen und Objekte.

↑Compilerbau

339

Page 81: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

10 Klassen und Objekte

Datentyp = Spezifikation von Datenstrukturen

Klasse = Datentyp + Operationen

Objekt = konkrete Datenstruktur

340

Page 82: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

Beispiel: Rationale Zahlen

• Eine rationale Zahl q ∈ Q hat die Form q =xy , wobei x, y ∈ Z.

• x und y heißen Zähler und Nenner von q.

• Ein Objekt vom Typ Rational sollte deshalb als Komponentenint-Variablen zaehler und nenner enthalten:zaehlernenner

Objekt:

• Die Daten-Komponenten eines Objekts heißen Objekt-Attriuteoder (kurz) Attribute.

341

Page 83: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

• Rational name ; deklariert eine Variable für Objekte derKlasse Rational.

• Das Kommando new Rational(...) legt das Objekt an, rufteinen Konstruktor für dieses Objekt auf und liefert das neueObjekt zurück:

34

zaehlernenner

aa = new Rational (3,4);a

• Der Konstruktor ist eine Prozedur, die die Attribute des neuenObjekts initialisieren kann.

342

Page 84: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

• Der Wert einer Rational-Variable ist ein Verweis auf einenSpeicherbereich.

• Rational b = a; kopiert den Verweis aus a in die Variable b:34

zaehlernenner

34

zaehlernenner

a

a

b

Rational b = a;

343

Page 85: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

• a.zaehler liefert den Wert des Attributs zaehler des Objekts a:34

zaehlernenner

34

zaehlernenner

3

a

a

int b = a.zaehler;

b

344

Page 86: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

• a.add(b) ruft die Operation add für amit dem zusätzlichenaktuellen Parameter b auf:

28

34

−12

zaehlernenner

zaehlernenner

34

−12

zaehlernenner

zaehlernenner

zaehlernenner

c

Rational = a.add(b); ab

a

b

345

Page 87: Laden und Speichern - in.tum.deseidl/Courses/WS2007/i8.pdf · tt TRUE 262. i 21 21 i 21 PC PC LO AD i 263. i 21 i PC PC 21 STORE i 264. Sprünge • Sprünge verändern die Reihenfolge,

28

34

−12

zaehlernenner

zaehlernenner

34

−12

zaehlernenner

zaehlernenner

zaehlernenner

a

b

a = a.add(b);b

a

• Die Operationen auf Objekten einer Klasse heißen auchMethoden, genauer: Objekt-Methoden.

346