CDUR - Matrix
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 58926yrs33nxi1p
oder höchste Stärke
CDUR Þ DFD nicht ableitbar; z.B.: externe Pfeile
CDUR Þ genauer bezüglich Flüsse
rx926y8533nxxi
Objektorientierte Programmierung
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:
Call by Value
Call by Reference
( Call by Name )
rx926y8533nxxi
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
|
|
|
|
|
|
|
<HP> |
|
|
|
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 ) |
|
|
|
|
|
rx926y8533nxxi
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 |
. |
|
|