Beispiel: Summe der ersten n Zahlen Variante I

Werbung
Beispiel: Summe der ersten n Zahlen
Variante I
n enthalte eine positive ganze Zahl.
int Summe(int n)
{
int sum = n;
for (int i = n-1; i > 0; i--)
sum = sum + i;
return sum;
}
sum enthält die gesuchte Summe.
Beispiel: Summe der ersten n Zahlen
Variante II
n enthalte eine positive ganze Zahl und sei vom Typ int.
int Summe(int n)
{
int sum = n;
int i = n;
LOOP:
i = i -1;
if (i <= 0) then goto THE_END;
sum = sum + i;
goto LOOP;
THE_END: return sum;
}
Beispiel: Summe der ersten n Zahlen
Variante III
n enthalte eine positive ganze Zahl und sei vom Typ int.
int Summe(int n)
{
int RR = 0 ;
RR = RR + n;
sum = RR;
LOOP:
RR = RR -1;
if (RR <= 0) then goto THE_END;
n = RR;
RR = RR + sum;
sum = RR;
RR = n;
goto LOOP;
THE_END: return sum;
}
Beispiel: Summe der ersten n Zahlen
Assembler
Speicherwort
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
Befehl
OT AT
1
0
0
3
=> 998
+ 1000
-> 999
- 997
S<= 1011
-> 1000
+ 999
=> 999
+ 1000
S 1004
H
0
Kommentar
Konstante 1
Konstante 0
Variable sum
Variable n
BEGIN: <RR> = 0;
<RR> = <RR> + n;
// RR = n
sum = <RR>;
// sum = n
LOOP: <RR> = <RR> - 1;
if (<RR>=0) then goto THE_END;
n = <RR>;
<RR> = <RR> + sum;
sum = <RR>; <RR> = 0;
<RR> = <RR> + n;
goto LOOP;
THE_END: exit();
Beispiel: Summe der ersten n Zahlen
Assembler und Maschinensprache
Speicherwort
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
Wert
1
0
0
3
1342178278
268436456
1073742823
5368719092
1879049203
1073742824
268436455
1342178279
268436456
1610613740
0
Befehl
OT AT
=>
+
->
S<=
->
+
=>
+
S
H
998
1000
999
997
1011
1000
999
999
1000
1004
0
Kommentar
Konstante 1
Konstante 0
Variable sum
Variable n
BEGIN: <RR> = 0;
<RR> = <RR> + n;
sum = <RR>; // sum=n
LOOP: <RR> = <RR> - 1;
if (<RR>=0) then goto END;
n = <RR>;
<RR> = <RR> + sum;
sum = <RR>; <RR> = 0;
<RR> = <RR> + n;
goto LOOP;
END: exit();
Adresse
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1004
1005
1006
1007
1008
1009
1010
1004
1005
1011
Nächster Befehl
OT
AT
=>
998
+
1000
->
999
997
S<=
1011
->
1000
+
999
=>
999
+
1000
S
1004
997
S<=
1011
->
1000
+
999
=>
999
+
1000
S
1004
997
S<=
1011
H
0
Gegenwärtige Speicherbelegung
RR
ZR 997 998 999
0
0
1
0
0
0
0
1
0
0
3
1
1
0
0
3
1
1
0
3
2
1
1
0
3
2
1
1
0
3
2
1
1
0
3
5
1
1
0
3
0
0
1
0
5
2
1
1
0
5
2
1
1
0
5
1
1
1
0
5
1
1
1
0
5
1
1
1
0
5
6
1
1
0
5
0
0
1
0
6
1
1
1
0
6
1
1
1
0
6
0
0
1
0
6
0
0
1
0
6
1000
3
3
3
3
3
3
2
2
2
2
2
2
2
1
1
1
1
1
1
1
Herunterladen