informatikmaus Geschrieben 14. Januar 2007 Geschrieben 14. Januar 2007 Dies sind meine Aufgaben und ich habe so ziemlich kein Ahnung wie ich anfangen soll. Die Aufgaben bestehen darin drei kleine Assemblerprogramme zu schreiben. Übersenden Sie bitte diese Assemblerprogramme als ASCII-Texte, so daß die Korrektoren Ihre Programme problemlos auf einer Sparc ausführen lassen können. Aufgabe 1 (25 Punkte): Bestimmen Sie die Werte der folgenden Assemblerausdrücke: 166 % ~10, −166 % ~10, 166 % ~(−10), −166 % ~(−10). Textdatei: Aufgabe01.s Kommentieren Sie kurz die eigenartigen Ergebnisse. Aufgabe 2 (35 Punkte): Schreiben Sie ein Assemblerprogramm zur Erzeugung von Zufallszahlen, benutzen Sie dabei die Formel A := (A*B + 1) mod M mit M =1000000000, B = 3141528 und Startwert 1234567. Geben Sie die ersten 10 Pseudozufallszahlen aus. Textdatei: Aufgabe02.s Aufgabe 3 (40 Punkte): Schreiben Sie ein rekursives Assemblerprogramm zur Berechnung von Fibonaccizahlen. Fibonaccizahlen sind definiert durch: F0 = 0, F1 = 1, Fn = Fn−1 + Fn−2 für n = 2, 3, . . . Geben Sie die Fibonaccizahlen F46, F47 und F48 aus. Textdatei: Aufgabe03.s Zitieren
Klotzkopp Geschrieben 14. Januar 2007 Geschrieben 14. Januar 2007 Dies sind meine Aufgaben und ich habe so ziemlich kein Ahnung wie ich anfangen soll.Und was möchtest du jetzt hier erreichen? Möchtest du konkrete Antworten? Dann solltest du konkrete Fragen stellen, und hier nicht einfach nur Aufgabentexte abladen, das ist ziemlich unhöflich. Das erweckt den Eindruck, dass du hier andere die Arbeit machen lassen möchtest, und das dann als deine eigene Leistung bewerten lassen willst. Zu Aufgabe 1: Weißt du, was die Operatoren ~ und % tun? Zitieren
informatikmaus Geschrieben 14. Januar 2007 Autor Geschrieben 14. Januar 2007 Es tut mir Leid, dass es so aussieht als wollte ich nur Lösungen haben. Ich bin im Moment nur sehr verzweifelt weil ich da nicht durchsteige. Die Ausdrücke verstehe ich schon. Und den Begehlssatz kenne ich ja auch. Aber wenn es nun dazu kommt, dass ich ein komplettes Program schreiben soll, bin ich so ziemlich verloren. Wie genau, mit welchen Befehlen muss ich da anfangen? Und wie beende ich das Programm richtig? Ich weiss dass % die modulo Funktion ist und ~ das Einerkomplement. 166 % ~10, hier ist das Ergebnis 66? richtig? −166 % ~10, hier ist as -66? 166 % ~(−10), hier 66? −166 % ~(−10) hier -66? ich erinnere, dass irgendwie ein minus nicht gelesen wird, ich weiss aber nicht mehr genau wie das war? und wenn ich nun diese Ausdrücke in Programme packen soll, wie fange ich da an. Ein paar Beispiele könnten mir ja helfen, ich möchte ja nicht direkt die Lösung haben, ich möchte es ja auch verstehen. Ich bin nur gerade sehr verzweifelt, weil meine ganze Arbeit in diesem Semester umsonst gewesen wäre wenn ich jetzt die Assemblerprogramme nicht verstehe, und das sind nur die letzten beiden Aufagbenzettlel. Das wäre dann schade wenn es daran scheitern würde. Zitieren
Klotzkopp Geschrieben 14. Januar 2007 Geschrieben 14. Januar 2007 Aber wenn es nun dazu kommt, dass ich ein komplettes Program schreiben soll, bin ich so ziemlich verloren. Wie genau, mit welchen Befehlen muss ich da anfangen? Und wie beende ich das Programm richtig? Mag sein, dass ich mich irre, aber hätte genau das nicht Bestandteil einer Vorlesung sein sollen? Hast du keine Unterlagen dazu? Ich weiss dass % die modulo Funktion ist und ~ das Einerkomplement. Soweit richtig. 166 % ~10, hier ist das Ergebnis 66? richtig?Nein. Zunächst der triviale Fall: 166 % 10 = 6 Welchen "Wert" stellt denn das Einerkomplement von 10 dar, auf einer Architektur, die negative Werte durch Zweierkomplement bildet? Zitieren
informatikmaus Geschrieben 14. Januar 2007 Autor Geschrieben 14. Januar 2007 Mag sein, dass ich mich irre, aber hätte genau das nicht Bestandteil einer Vorlesung sein sollen? Hast du keine Unterlagen dazu? Soweit richtig. Nein. Zunächst der triviale Fall: 166 % 10 = 6 Welchen "Wert" stellt denn das Einerkomplement von 10 dar, auf einer Architektur, die negative Werte durch Zweierkomplement bildet? Ich habe Unterlagen aber die enthalten nur den Befehlssatz und die Operationen usw. Ich habe kein genaues detailiertes und vollständiges Beispiel für ein Program an dem es alles genug nachvollziehen kann um selber eins zu schreiben. Du hast Recht: 166 % 10 = 6 (ich hatte %100 gerechnet) also das Einerkomplement wird hier benutzt um negative Zahlen darzustellen? also ist ~10 gleich -10? Zitieren
Klotzkopp Geschrieben 14. Januar 2007 Geschrieben 14. Januar 2007 also das Einerkomplement wird hier benutzt um negative Zahlen darzustellen? also ist ~10 gleich -10?Das Einerkomplement ist eine Möglichkeit, negative Zahlen darzustellen. Allerdings hat sich heute das Zweierkomplement praktisch durchgesetzt. Ich beschränke das hier mal auf 8 bit: 10 = 00001010b ~10 = 11110101b[/code]Das ist das Zweierkomplement von 11. ~10 entspricht also -11 Und 166 % (-11) ist 1. Zitieren
informatikmaus Geschrieben 14. Januar 2007 Autor Geschrieben 14. Januar 2007 Das Einerkomplement ist eine Möglichkeit, negative Zahlen darzustellen. Allerdings hat sich heute das Zweierkomplement praktisch durchgesetzt. Ich beschränke das hier mal auf 8 bit: 10 = 00001010b ~10 = 11110101bDas ist das Zweierkomplement von 11. ~10 entspricht also -11 Und 166 % (-11) ist 1. wie kommst du auf -11 für ~10? das Einerkomplement zu 1010 ist dock 0101 Zitieren
Klotzkopp Geschrieben 14. Januar 2007 Geschrieben 14. Januar 2007 wie kommst du auf -11 für ~10?Genau das habe ich doch beschrieben. Das Einerkomplement von 10 ist das Zweierkomplement von 11. Und da üblicherweise das Zweierkomplement benutzt wird, um negative Zahlen auszudrücken, ist ~10 eben -11. Zitieren
informatikmaus Geschrieben 14. Januar 2007 Autor Geschrieben 14. Januar 2007 und wenn du nun ein programm zu 166 % ~10 schreibst kommt dann auch 1 raus? Zitieren
Klotzkopp Geschrieben 14. Januar 2007 Geschrieben 14. Januar 2007 Mit x86 statt Sparc und C++ statt Assembler, ja. Zitieren
informatikmaus Geschrieben 14. Januar 2007 Autor Geschrieben 14. Januar 2007 und wie sieht das mit SPARC aus? Zitieren
MaNeY Geschrieben 16. Januar 2007 Geschrieben 16. Januar 2007 Was mich dabei ja mal interessiert ist wie man in Assembler Modulo rechnet. Soweit ich weiß gibt es dafür keinen Befehl?! Zitieren
Crush Geschrieben 17. Januar 2007 Geschrieben 17. Januar 2007 mov ax, 14 mov bx, 3 xor dx, dx div bx [/PHP] In Assembler ist üblicherweise jede Integer-Division automatisch eine Modulo-Division - auch wenn vielleicht nicht jede Prozessor-Architektur den Restwert liefert (liegt daran, daß die Division über Bitrotation des Divisors und Dividenden mit Subtraktion berechnet wird). Das Ergebnis ist in ax und der Rest steht in dx. Die FPUs, welche man auch in ASM direkt ansprechen kann, liefern das ohnehin. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.