Hilfe bei Assembler Aufgabe!
-
Hallo,
folgende Aufgabe ist gestellt:
Nehmen Sie an, dass im Speicherbereich ab der Adresse 1032 zehn ganzzahlige Zahlenwerte im 32BitFormat stehen, von denen mehrere gleich sein können. Schreiben Sie ein Assemblerprogramm, dass in R1 zurückgibt, welches die höchste Wiederholungsanzahl einer Zahl innerhalb dieser 10 Zahlen ist. Beispiel: Wenn die Zahlen 7, 232, 232, 56, 7, 16, 232, 7, 11, 16 lauten, soll das Ergebnis in R1 der Wert 3 sein. Die Zahlen im betreffenden Speicherbereich müssen dabei nicht erhalten bleiben. Verwenden Sie dabei ausschließlich die AssemblerBefehle
des DLXProzessors aus dem Anhang. Kommentieren und beschreiben Sie Ihr Programm ausführlich.Den Anhang gibt es hier zu sehen: http://www.informatik.uni-kiel.de/uploads/media/Serie11_2010-11__Shift-Befehle_korrigiert_.pdf
Bei dieser Aufgabe fehlt mir absolut der Ansatz. Ich hoffe irgendjmd. von euch kann mir helfen. Ich will nicht das mir jmd. die Aufgabe in Assembler löst, sondern nur den Lösungsansatz, wie ich die Aufgabe angehen kann. Ich hab zwar eine Lösung aber die ist viel zu lang und viel zu kompliziert.
-
Ok, ein Naiver/Intuitiver Ansatz waere:
Du nimmst eine Variable (Speicher oder Register - egal), in die du einen Zaehler packst, eine 2., die mit 0 initialisiert wird und in die du das Ergebnis tust (nach der Aufgabenstellung bietet sich R1 an) und eine 3., in der ein Zeiger auf die erste der 10 Zahlen im Array steht.
Nun bastelst du dir eine Schleife, in der du zuerst deinen Zaehler auf 0 setzt und dann ueber den Zeiger eine Zahl aus dem Array in eine 4. Variable holst. Der Zeiger wird danach auf das naechste Element inkrementiert.
Diese Zahl vergleichst du mit allen im Array nachfolgenden Zahlen und inkrementierst bei jedem Match den Zaehler. Zuletzt vergleichst du den Zaehler mit dem Endergebnis und kopierst den Zaehler in das Endergebnis, wenn der Wert darin groesser als das Endergebnis ist.
Abbruchbedingung der Schleife sind zB. 10 Durchlaeufe oder wenn der Zeiger das letzte Element des Arrays erreicht...Wie die Bezeichnung "Naiver Ansatz" vermuten laesst, ist das natuerlich nicht der Weisheit letzter Schluss...
-
Danke ersteinmal für die schnell Antwort.
Soweit so gut, dass wäre auch in etwa mein Ansatz gewesen, jedoch habe ich ein ganz anderes Problem bei der Aufgabe. Ich weiß nicht, wie ich auf die einzelnen Ziffern der Zahlen zugreifen soll, alles was ich mir überlegt habe ist viel zu kompliziert.
-
Javun schrieb:
Ich weiß nicht, wie ich auf die einzelnen Ziffern der Zahlen zugreifen soll, alles was ich mir überlegt habe ist viel zu kompliziert.
Brauchst Du auch nicht. 32-Bitzige Zahlen passen doch in Deine Register rein und können als ganzes verglichen werden. Oder?
-
volkard schrieb:
Javun schrieb:
Ich weiß nicht, wie ich auf die einzelnen Ziffern der Zahlen zugreifen soll, alles was ich mir überlegt habe ist viel zu kompliziert.
Brauchst Du auch nicht. 32-Bitzige Zahlen passen doch in Deine Register rein und können als ganzes verglichen werden. Oder?
Es geht darum zu überprüfen wie oft eine Ziffer insgesamt vorkommt. Also bei den zahlen 44444444444 und 9992341233532431465463 wäre die 4 die am häufigsten vorkommende Ziffer und daher wäre auch das Ergebnis 4.
Mein Problem ist jetzt das ich 10 Zahlen habe, deren Ziffern ich miteinander vergleichen muss und da liegt auch das Problem. Jede Zahl müsste in seine einzelnen Ziffern aufgeteilt werden und dann Zahl für Zahl verglichen werden und genau dafür fehlt mir der Ansatz.
Der Rest funktioniert so, wie von Nobuo T beschrieben.
-
Javun schrieb:
Es geht darum zu überprüfen wie oft eine Ziffer insgesamt vorkommt.
Nein.
-
volkard schrieb:
Javun schrieb:
Es geht darum zu überprüfen wie oft eine Ziffer insgesamt vorkommt.
Nein.
Ok, ich glaube jetzt habe ich mein eigentlich Problem erkannt.
Aufgabe nicht verstanden!Was ist denn mit höchster Wiederholungsanzahl einer Zahl innerhalb der 10 gegebenen Zahlen gemeint?
Beispiel: Wenn die Zahlen 7, 232, 232, 56, 7, 16, 232, 7, 11, 16 lauten, soll das Ergebnis in R1 der Wert 3 sein.
Wenn ich mir das Beispiel so anschaue, verstehe ich überhauptnicht warum das Ergebnis 3 sein soll?!
-
Die 232 kommt 3 mal vor. Oh, die 7 auch. Also 3 ist die höchste Wiederholungszahl, egal ob Du sie für 232 oder für 7 gefunden hast.
-
volkard schrieb:
Die 232 kommt 3 mal vor.
Ohh man...Vielen Dank
Ich versteh gar nicht wie ich so dämlich an die Aufgabe rangehen konnte. Wieder viel zu kompliziert gedacht.
Aber zum Glück gibts hier ja hier immer schnelle Hilfe