Hallo! Ich habe folgende Frage: Ich möchte ein Assemblerprogramm schreiben, welches in Verilog inkludiert wird. Da ich mit dem Assemblerprogramm die PHI Funktion berechnen möchte, muss ich am Anfang eine Abfrage (a<n) machen. Jetzt möchte ich wissen, wie mache ich diese Abfrage am besten. Es wäre nicht so ein Problem, wenn ich mehr Befehle zur Verfügung hätte, aber die Vorgabe ist, dass es nur 8 Befehle gibt. Darunter: read, write, write indirect, jump, increment, complement, return from interrrupt and skip if zero. Es gebe die Möglichkeit die beiden Variablen zu komplenetieren und dann solange 1 dazu zuählen, bis man durch erneutes komplementieren bei einer der beiden Zahlen bei 0 angelangt ist oder auch beiden. Dann hat man ein Resultat. Allerdings weiß ich das das ganze etwas lange dauert und möchte nun eine einfacher Lösung verwenden. Leider fällt mir keine ein. Kann mir jemand helfen? lg user0009
user0009 wrote: > Hallo! > > Ich habe folgende Frage: > > Ich möchte ein Assemblerprogramm schreiben, welches in Verilog > inkludiert wird. Da ich mit dem Assemblerprogramm die PHI Funktion > berechnen möchte, > muss ich am Anfang eine Abfrage (a<n) machen. > Jetzt möchte ich wissen, wie mache ich diese Abfrage am besten. Es wäre > nicht so ein Problem, wenn ich mehr Befehle zur Verfügung hätte, aber > die Vorgabe ist, dass es nur 8 Befehle gibt. Darunter: read, write, > write indirect, jump, increment, complement, return from interrrupt and > skip if zero. Wenn dein Prozessor in Verilog implementiert ist, kannst du dann Logik dazupacken? Also, z.B. du scheinst Assemblerbefehle zu haben um auf Speicher zu zugreifen. Was wenn du den Wert von a in Speicherstelle 0 und n in Speicherstelle 1 schreibst. Dann aus Speicherstelle 2 kannst du das Ergebnis a<n auslesen?
Die Abfrage muss mit den Befehlen erfolgen. Ich darf keine Befehle dazu packen. Für die Ausführung des Algorithmus Abfrage ob a<n ist darf man nur die genannten Assemblerbefehle verwenden. Derzeit mache ich es so, dass ich a und n komplementiere, 1 addiere, wieder komplementiere und dann schaue ob a schon 0 ist, wenn ja dann auch bei n wenn n nicht null ist, arbeitet der algorithmus weiter, ansonst wird mit a und n komplementieren wieder von vorne begonnen, bis er das 255 mal gemacht hat. Das dauert eben viel zu lange. Daher möchte ich gerne wissen, wie man es schneller machen kann.
> Jetzt möchte ich wissen, wie mache ich diese Abfrage am besten. Es wäre > nicht so ein Problem, wenn ich mehr Befehle zur Verfügung hätte, aber > die Vorgabe ist, dass es nur 8 Befehle gibt. Darunter: read, write, > write indirect, jump, increment, complement, return from interrrupt and > skip if zero. Mit diesen acht Befehlen hast du IMHO keine signifikant bessere Möglichkeit als die von dir beschriebene. Der Grund ist, dass du keinen einzigen Befehl zur Verfügung hast, der irgendwas mit zwei Operanden macht, wie Addition. Deine einzige Chance könnte noch selbstmodifizierender Code sein, aber auch damit fällt mir gerade keine Lösung in weniger als O(n) ein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.