Adressmaschine Berechnung

Neue Frage »

Auf diesen Beitrag antworten »
MarcoZ Adressmaschine Berechnung

Hi Leute,

ich bin relativ neu in der Welt der Informatik und verstehe da etwas nicht ganz.

Bei mir geht es um die 3-Adressmaschine... Ich habe die Befehle ADD/SUB/MUL/DIV

gegeben. Was diese bedeuten, weiß sicherlich jeder, aber ich sage es gerne noch mal: Addieren, Subtrahieren, Multiplizieren,Dividieren.

So und jetzt habe ich 5 Aufgaben und weiß noch ganz korrekt, wie ich da vorgehen soll.

Eine Aufgabe wäre zum Beispiel:

a) A * (A - B)

Und jetzt soll ich halt auf Grundlage der Befehle, einen Code schreiben.

Ich habe das vorher aber noch nie gemacht und bin mir unsicher... wäre es so richtig? :

SUB A B A
MUL A A A

Das sieht mir aber irgendwie falsch aus und so leicht kann es doch auch nicht sein, oder?

In einem Beispiel was ich mir angeguckt habe, da war die Aufgabe: A + B + C und die Lösung war:

ADD A B A
ADD A C C

Daran hatte ich mich orientiert...

Hier noch die anderen Aufgaben:
 
Auf diesen Beitrag antworten »
Karlito RE: Adressmaschine Berechnung

Hallo MarcoZ,

leider ist dir ein Denkfehler unterlaufen.
Zitat:
Original von MarcoZ
SUB A B A
MUL A A A

Macht
[latex]<br />
(A - B)(A-B)<br />
[/latex]

Vielleicht kommst Du ja ohne weitere Tipps auf die Lösung.

Besten Gruß,

Karlito
Auf diesen Beitrag antworten »
MarcoZ RE: Adressmaschine Berechnung

Zitat:
Original von Karlito
Hallo MarcoZ,

leider ist dir ein Denkfehler unterlaufen.
Zitat:
Original von MarcoZ
SUB A B A
MUL A A A

Macht
[latex]<br />
(A - B)(A-B)<br />
[/latex]

Vielleicht kommst Du ja ohne weitere Tipps auf die Lösung.

Besten Gruß,

Karlito



Hi
,

erstmal danke für die Antwort.

Also ich habe mich jetzt etwas im Internet "schlau" gemacht... aber leider findet man nicht soooo viel im Internet dazu.

Arbeitet man dabei mit "r1" zum Beispiel?

Also bei der Aufgabe:

A * ( A - B )


Habe ich zum Beispiel jetzt halt gerechnet mit:

SUB A B r1

MUL r1 A r1


Falls das Falsch ist... wo ist denn da mein Denkfehler? Sonst komme ich da nicht alleine drauf. Man macht doch zuerst das in der Klammer... also sage ich ihm SUB A und B und speicher es in r1

und dann sage ich ihm multipliziere das was in r1 ist und multipliziere es mit A und speicher es erneut in r1?
Auf diesen Beitrag antworten »
as_string

Woher kommt denn jetzt r1? Du hast A, B und C. Wenn Du aber mit SUB A B A das Ergebnis der Subtraktion A-B in A speicherst, dann hast Du ja den ursprünglichen Wert von A überschreiben und kannst danach die Differenz nicht mehr mit dem ursprünglichen Wert von A multiplizieren.
Wo könntest Du also das Ergebnis der Subtraktion speichern? A ist auf jeden Fall der ungünstigste Ort...

Gruß
Marco
 
Auf diesen Beitrag antworten »
MarcoZ

Zitat:
Original von as_string
Woher kommt denn jetzt r1? Du hast A, B und C. Wenn Du aber mit SUB A B A das Ergebnis der Subtraktion A-B in A speicherst, dann hast Du ja den ursprünglichen Wert von A überschreiben und kannst danach die Differenz nicht mehr mit dem ursprünglichen Wert von A multiplizieren.
Wo könntest Du also das Ergebnis der Subtraktion speichern? A ist auf jeden Fall der ungünstigste Ort...

Gruß
Marco


Ich habe mich für die Lösung an eine Beispielösung in meiner Aufgabe gerichtet. Dort war als Beispiel die Aufgabe A+B+C gegeben. Gelöst wurde diese wie folgt:

ADD A B A
ADD A C C


Begründung: Der Erste Ausdruck addiert die Zahlen in Register A sowie B und schreibt das Ergebnis zuruck in das Register A. Der zweite Ausdruck addiert dieses Ergebnis in Register A sowie die Zahl in Register C und
schreibt das Ergebnis in das Register C.


Mit der selben Logik, bin ich bei meinen Aufgaben rangegangen. Das r1 ist ja nichts anderes als ein Register. Ich könnte es auch Z1 nennen, oder sonst wie. Theoretisch gesehen ist (A-B) = r1
Auf diesen Beitrag antworten »
as_string

Nein, Du kannst es nicht r1 oder Z1 nennen. Du hast A, B und C als Register!
Wenn Du SUB A B A ausführst, wo ist dann der ursprüngliche Wert, der in A stand? Richtig, der ist weg, weil Du ihn überschrieben hast. Deshalb sagt MUL A A C auch nur, dass der neue Wert in A schlicht quadriert wird und in C geschrieben. Das sagt ja auch Karlito wenn er schreibt, Du hast (A-B)*(A-B) gerechnet.
Du willst aber das Ergebnis aus der Subtraktion eben nicht in A speichern, damit Du den ursprünglichen Wert in A nicht überschreibst. Du hast noch zwei weitere Register zur Verfügung, warum nimmst Du nicht einen von diesen beiden?

Gruß
Marco
Auf diesen Beitrag antworten »
MarcoZ

Zitat:
Original von as_string
Nein, Du kannst es nicht r1 oder Z1 nennen. Du hast A, B und C als Register!
Wenn Du SUB A B A ausführst, wo ist dann der ursprüngliche Wert, der in A stand? Richtig, der ist weg, weil Du ihn überschrieben hast. Deshalb sagt MUL A A C auch nur, dass der neue Wert in A schlicht quadriert wird und in C geschrieben. Das sagt ja auch Karlito wenn er schreibt, Du hast (A-B)*(A-B) gerechnet.
Du willst aber das Ergebnis aus der Subtraktion eben nicht in A speichern, damit Du den ursprünglichen Wert in A nicht überschreibst. Du hast noch zwei weitere Register zur Verfügung, warum nimmst Du nicht einen von diesen beiden?

Gruß
Marco


Aber warum machen Sie es dann in der Beispielaufgabe auch so?

Aber in der Aufgabe A * ( A - B ) habe ich ja auch kein C. Da habe ich nur die Register A und B und kein C. Das heißt ich muss es ja in ein Register überschreiben.
Auf diesen Beitrag antworten »
as_string

Erstens sehe ich nicht, warum Du bei einer 3-Adressmaschine nicht auch C haben solltest und zweitens kannst Du auch B nehmen, nur eben nicht A weil das der einzige Wert ist, den Du für die weitere Berechnung noch brauchst und ausgerechnet den überschreibst Du...

Gruß
Marco
Auf diesen Beitrag antworten »
as_string

Ok, da hab ich Dir etwas unrecht getan.
Habe gerade etwas gegooglet und festgestellt, dass man wohl die Register tatsächlich benennen kann und auch so viele verwenden kann, wie man möchte.
Außerdem ist mir aufgefallen, dass man meistens das Ziel der Rechnung eher an erster Stelle hat und die beiden Operanden an zweiter und dritter. Aber das ist natürlich reine Definitionssache...

Gruß
Marco
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »