Einfaches Assembler Programm

Hallo,
ich habe mal eine Frage zu einer Aufgabe:Schreiben Sie ein Assemblerprogramm, das die Zuweisung 
x = ( x - 5) * (x + 3)
implementiert! x soll dabei die Speicherzelle 61 bezeichnen. Fur den Fall, dass sie 
eine Hilfsvariable h benotigen, sollte diese die Speicherzelle 62 bezeichnen.
So ich habe mir jetzt gedacht das ginge so:

class Gleichung {
public static void main (String [] args) {
int x= 61;
x =( x - 5)*(x + 3);
JOptionPane.showMessageDialog(null,„Ihre Zahl ist“ + x);
}
}

Allerdings bin ich mir nicht sicher ob ich damit die Aufgabe korrekt gelöst habe! Was meint ihr?

Hallo ,
Dein Programm sieht aus wie ein C-Programm. Da kann ich Dir leider nicht weiterhelfen.

Hi.

Schreiben Sie ein Assemblerprogramm ,
[…]
Allerdings bin ich mir nicht sicher ob ich damit die Aufgabe
korrekt gelöst habe! Was meint ihr?

Hast Du nicht. Gefragt ist ein Assemblerprogramm (wobei hier die Angabe fehlt, welche Assemblersprache gemeint ist), und Du hast, wie Du sagst, Java-Code erstellt.

Wenn Dir tatsächlich das Grundlagenwissen in dem Umfang fehlt, wie Deine Frage vermuten lässt, fürchte ich, dass die Aufgabe für Dich nicht lösbar ist.

Dennoch mal zum Einstieg der Wiki-Link Assemblersprache.

Gruß,
KHK

Hallo, du hast ein Java Programm das ein OptionPane mit dem Ergebnis liefert. In der Frage steht etwas von Assembler… Assembler kennt nur Speichezellen und Befehle des Befehlssatzens des verwendeten Prozessors. Es handelt sich also um eine hardwarenahe Programmiersprache.
Schaue dir das Beispiel hier an:
http://www-ivs.cs.uni-magdeburg.de/bs/lehre/sose99/b… Vielleicht merkst du dann was du zu tun hast.
Da steht doch ganz klar Assembler und nicht Java!
Viel Glück! :smile: Man sollte wohl nicht mit Assembler anfangen, wenn man gleich mit OptionPanes herumwirft…

Okay… Schade nur das unser Prof nicht so viel zum Thema assemblersprachen zu sagen hatte und direkt mit Java anfing. Ihre Seite ist mir auch keine Große hilfe. Oder soll ich jetzt sowas in der Art schreiben:
Die C Anweisung:
x = h - 5
x= x * (h + 3)
was irgendwie total sinnlos erscheint!

Schade nur das unser Prof nicht so viel zum Thema
assemblersprachen zu sagen hatte und direkt mit Java anfing.
Ihre Seite ist mir auch keine Große hilfe. Oder soll ich jetzt
sowas in der Art schreiben:
Die C Anweisung:
x = h - 5
x= x * (h + 3)
was irgendwie total sinnlos erscheint!

Das erscheint nicht nur so. Auch C ist keine Assemblersprache.

Aus dem Wort „Prof“ schließe ich mal auf Hochschule und Studium. Da sollte man eigentlich erwarten können, dass Du Dir fehlende Informationen durch Recherche eigenständig verschaffst.
Hast Du Dir beide Links (und weiterführende) angeschaut? Was genau hast Du nicht verstanden?

Gruß,
KHK

Ja klar deshalb recherchier ich schon die ganze Zeit allerdings sind diese Seiten für mich, der zuvor nur ein wenig mit Java programmiert hat, eher verwirrend als helfend. Deshalb hatte ich ja auch hier im Forum mal nach gefragt.

Als Zusatz steht dort noch:
Define x y benennt die Speicherzelle y 2 N mit dem Namen x.

27 (Load x) lädt den Inhalt der Speicherzelle x in den Akkumulator.

18 (Store x ) speichert den Inhalt des Akkumulators in die Speicherzelle x.

03 (Add c) addiert eine Konstante c auf den Akkumulator.

07 (AddMem x) addiert den Inhalt der Speicherzelle x auf den Akkumulator.

05 (Mult c) multipliziert den Akkumulator mit der Konstante c.

09 (MultMem x) multipliziert den Akkumulator mit dem Inhalt der Speicherzelle x

(Die Zahlen sind der Code und das in den Klammer die Befehle!)

Was soll ich damit denn anfangen?

Hallo,

überlege dir doch, wie du mit den aufgeführten Befehlen selbst den neuen Wert für x ausrechnen würdest.
Du hast einen Akkumulator, also einfach ein Register, in dem eine Zahl stehen kann. Außerdem darfst du noch zwei Speicherplätze verwenden.
Das Programm fängt damit an, die beiden Speicherplätze zu definieren.
Dann musst du den Inhalt der Speicherzelle x in den Akkumulator laden, da du ja damit rechnen willst. Dann steht der Wert von x im Akkumulator. Davon kannst du die konstante 5 abziehen und hast schon den ersten Teil der Gleichung abgearbeitet.
Das Ergebnis merken wir uns kurz (schreiben es also in die zweite Speicherzelle) und rechnen den zweiten Teil aus. Das ganze addieren und zum Schluss wieder in die Speicherzelle x schreiben. Fertig.
Das Programm besteht also aus einzelnen Anweisungen, die in etwa so aussehen:

Define x 61
Load x //im Akkumulator steht nun der Inhalt von x
Add -5 //und nun x-5
...

Nico

Wieviel weißt Du denn über die Funktionsweise eines Prozessors, also des Teils in einem Computer, der die Programme ausführt?
Verstehst Du, was ein Compiler oder ein Interpreter mit einem C- oder Java-Programm macht, damit das Programm ausgeführt werden kann?

Bitte mal lesen:
http://de.wikipedia.org/wiki/Maschinensprache
http://de.wikipedia.org/wiki/Assemblersprache

Im Zusatz zu Deinem Aufgabentext hast Du die Beschreibung der Befehle, die Dein (fiktiver) Prozessor versteht.
Weisst Du, was Du damit anfangen kannst?

Gruß,
KHK

Ok das hat mir schonmal sehr geholfen ich habe jetzt:

Define x61
Load x // im Akkumulator steht nun der Inhalt von x
Add -5 // (x-5)
store x
load x
Add +3 // (x+3)
Mult Memx // (x-5) * (x+3)
store x

fertig.

An sich nicht schlecht. Allerdings überschreibst du mit

Zeile 4 store x

den Inhalt von Zelle x. Dadurch ist der ursprüngliche Wert verloren und du rechnest mit x-5 weiter.
Insgesamt berechnest du also x=(x-5)*(x-5+3)
Speichere die den Zwischenwert in der zweiten Speicherzelle und das Ergebnis ist richtig. Diese Zelle musst du dann natürlich auch wieder bei Mult Mem verwenden.

Ok allerdings habe ich keinen Befehl fürs zwischenspeichern oder meinst du das so:
Define x61
Load x // im Akkumulator steht nun der Inhalt von x
Add -5 // (x-5)
store x
Define h62
load h
Add +3 // (x+3)
store h
Mult Memx // (x-5) * (x+3)

Dann habe ich die Hilfsvariable benutzt aber kann man das so schreiben?

Definiere die Variable ganz am Anfang und ersetze das erste store x durch ein store h. Dann machst du mit x weiter und zum Schluss multiplizierst du noch den Inhalt von h auf den Akku.

Hallo,

Dann habe ich die Hilfsvariable benutzt

aber spannend wird es erst, wenn man versucht, ohne Hilfsvariable auszukommen. Eine mögliche Lösung:

27 61
05 –1
09 61
07 61
07 61
03 15
05 –1
18 61

Viel Spaß beim Knobeln :smile:

Martin