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?
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.
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! 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?
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.
ü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
...
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?
Im Zusatz zu Deinem Aufgabentext hast Du die Beschreibung der Befehle, die Dein (fiktiver) Prozessor versteht.
Weisst Du, was Du damit anfangen kannst?
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.