Stacks

1 CDUR - Matrix


TABELLEN
PROZESSE /

Schüler
Lehrer
FUNKTIONEN

Schüler suchen

R



Klassenb. Blatt 1

X

X

.
.
.


C


Reorganisation

D



Versatz

R/U



nach Stärke geordnet


C ... Create

D ... Delete

U ... Update

R ... Read





oder höchste Stärke

CDUR ⇒ DFD nicht ableitbar; z.B.: externe Pfeile
CDUR ⇒ genauer bezüglich Flüsse

2 Objektorientierte Programmierung


2.1 Unterprogramme und Stacks


Der Stack (=Stapel) dient zur Variablen - oder Wertübergabe von einem Programm zu seinem Unterprogramm. Der Stack ermöglicht die Kommunikation zwischen Hauptprogramm und Unterprogramm. Der Stack funktioniert nach dem Prinzip First In Last Out.

PUSH ... ein Wert wird in den Stack geschrieben
PUSH x ⇒ x wird auf den Stapel gelegt, Stapel wird erhöht

POP ... ein Wert wird aus dem Stack geholt
POP x ⇒ x wird vom Stapel genommen, der nächste Wert liegt nun oben

y=1;
for (i=1; i<=5; i++) y=y*a; ⇒ y=a5⇒ y=pot(a,5);
.
.
.
k=1;
for (u=1; u<=7; u++) k=k*z; ⇒ k=z7
.
.
.
p=1;
for (m=1; m<=4; m++) p=p*s; ⇒ p=s4

Sobald eine Aktion in einem Programm mehrmals vorkommt, ist es besser stattdessen ein Unterprogramm zu benützen.



long pot (int basis, int exp)
{
int x;
long y=1;

for (x=1; x<=exp; x++) y=y*basis;
return y;
}


Ãœbergabe von Werten:

a
12
1078
    Call by Value Call by Reference ( Call by Name )

    IMMEDIATE ADDRESSING (unmittelbar) : PUSH 7 (=Call by Value) DIRECT ADDRESSING (direkt) : PUSH M[1000] (=Call by Reference) INDIRECT ADDRESSING (indirekt) : PUSH M[M[2000]]
M ... Memory (Speicherstelle)

Beispiel:

int a; a ⇔ 1078 Compiler vergibt die Plätze
int k;

e=pot (a, k); pot ⇔ 50000










PUSH M[1090]
1004
k wird auf den Stack gelegt

PUSH M[1078]
1005
a wird auf den Stack gelegt
e = pot(a,k)
PUSH 1008
1006
Rücksprungadresse auf Stack

JMP 50000
1007
Sprung zum UP (eigentlicher UP - Aufruf)

POP M[1094]
1008
Ergebnis (y) wird nach e geschrieben

.



.


a
12
1078
Direct Addressing

...

Immediate Addressing
k
2
1090


...


e
144
1094


.



.


Stack (P1)
2 / - / 144 / -
10000
Stackbeginn
(P2)
12 / -


(P3)
1008 / -



.



.


return address
1008
29999

x

30000

y
144
30002

basis
12
30004

exp
2
30006


.



.



POP M[29999]
50000
Rücksprungaddresse von Stack

POP M[30004]
50001
a (12) vom Stack nach basis

POP M[30006]
50002
k (2) vom Stack nach exp
UP pot
...



Schleife



...



PUSH M[30002]
50070
Ergebnis y (144) auf Stack

JMP[M[M29999]
50071
Rücksprung ins HP ( Indirect Addressing )





2.1.1 Static Binding ( Statisches Binden )


= Die Adressen der Unterprogramme werden beim compilieren festgelegt



Parameter werden in den Stack geschrieben
JMP 10020

Unterprogrammaufruf

7061
Rücksprungaddresse wird in den Stack geschrieben
.


.


JMP 10020



8205

.


.



10020
UP Anfang




CALLING OVERHEAD: Das Schreiben in den Stack - benötigt viel Zeit

deshalb wird bei kleineren UP die INLINE DEFINITION (=MAKRO EXPANSION) verwendet.
Das UP wird in die Stellen geschrieben, wo eigentlich der Unterprogrammaufruf stehen sollte. Dadurch entfällt das Stacken und das Springen ⇒ Das Programm wird schneller, braucht aber mehr Speicher. Diese Methode wird auch für Makros verwendet.

147 Worte in "deutsch"  als "hilfreich"  bewertet