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.