Forum: PC-Programmierung Logik nach Assembler konvertiern


von Michael B. (gm8816)


Lesenswert?

Hallo,
ich weiß nicht genau in welches Forum ich das jetzt reinschreiben soll 
also probiere ich es mal hier. Hat schon mal jemand versucht (oder gibt 
es schon fertige Lösungen?) eine Logikgatterschaltung in Assembler zu 
konvertieren? Die Gatterschaltung sollte am PC erstellt werden und dann 
als Assemblercode erstellt werden. Der Controller ist erstmal egal. Mir 
geht es nur um Lösungsansätze dieses Problems.

von Karl H. (kbuchegg)


Lesenswert?

Geoffrey M. wrote:
> Hallo,
> ich weiß nicht genau in welches Forum ich das jetzt reinschreiben soll
> also probiere ich es mal hier. Hat schon mal jemand versucht (oder gibt
> es schon fertige Lösungen?) eine Logikgatterschaltung in Assembler zu
> konvertieren? Die Gatterschaltung sollte am PC erstellt werden und dann
> als Assemblercode erstellt werden. Der Controller ist erstmal egal. Mir
> geht es nur um Lösungsansätze dieses Problems.

Was kann in deinen Gattern alles vorkommen.
Wenn es nach der reinen Lehre geht, ist kann da ja nur
UND, ODER, NICHT, XOR vorkommen.

Und um Grunde ist so eine Gatterschaltung auch nur ein
Expression-Tree (wie man es im Compilerbau nennen würde).
Man fangt beim Ausgang an und betrachtet die Teilbäume die
zu den Eingängen des letzten Gatters führen. Für die wird
(mit derselben Funktion, also rekursiv) Code erzeugt, steht
der Code, dann betrachtet man die Verknüpfung und erzeugt
noch den Code für diese Verknüfung. Genauso wie die Code-
generierung in einem Compiler einen Expression-Tree abarbeitet.

Ein Problem könnte die Registerbelegung werden. Will man
sich das Leben einfach machen, dann implementiert man sich
noch eine Stackmaschine und ist somit auch das Problem der
Registerallokierung los.

Alles in allem: Bei den Compilerbauern solltest du da fündig
werden.

Klingt nach einem netten Projekt für einen faden Nachmittag.

von Michael B. (gm8816)


Lesenswert?

Erstmal soll es nur ODER, UND, NICHT und XOR geben. Das ist schonmal ein 
guter Rat am Ausgang anzufangen. Ich habe leider noch nie einen Compiler 
gebastelt und das wird mein erster versuch sowas zu machen.

von Karl H. (kbuchegg)


Lesenswert?

Geoffrey M. wrote:
> Erstmal soll es nur ODER, UND, NICHT und XOR geben. Das ist schonmal ein
> guter Rat am Ausgang anzufangen. Ich habe leider noch nie einen Compiler
> gebastelt und das wird mein erster versuch sowas zu machen.

Wenn ichs mir recht übelege, ist das eigentlich einfacher
als einen Compiler zu schreiben: Es gibt keine Operatoren-
Vorrangregeln. Das ganze ähnelt eigentlich mehr der
Auswertung eines Expression-Trees als dem Aufbau, der
Tree (also die Schaltung) steht ja bereits.

d.h. die Technik mit: Am Ausgang anfangen und nach vorne
durcharbeiten würde genau das machen.

Wie hast du denn die 'Schaltung' erstellt? In welcher Form
liegt sie dir vor?

von Michael B. (gm8816)


Lesenswert?

Die Logikschaltung gibt es nur auf dem Papier. Ich bin mir auch noch 
nicht sicher, welche Programmiersprache die beste für diesen Zweck ist. 
Hat da jemand einen Vorschlag?

von Dirk S. (Gast)


Lesenswert?

Schau mal bei Cadsoft vorbei

http://www.cadsoft.de/microsps.htm

Könnten Anregungen für dich dabei sein.

von Karl H. (kbuchegg)


Lesenswert?

Geoffrey M. wrote:
> Die Logikschaltung gibt es nur auf dem Papier. Ich bin mir auch noch
> nicht sicher, welche Programmiersprache die beste für diesen Zweck ist.
> Hat da jemand einen Vorschlag?

Sowas artet immer in einen Glaubenskrieg aus.
Nimm die Programmiersprache, die du beherrscht.
Solange du das Gewünschte damit machen kannst, ist
diese die 'Beste'.

von Wolfram (Gast)


Lesenswert?

Du solltest vorher festlegen, was du willst:

Simulation der Schaltung , wie du sie hingemalt hast (inklusive 
Gatterlaufzeit)
Dann läuft das ganze auf eine Statemachine hinaus, mit verschalteten Ein 
und Ausgängen. (Sowas musst du nicht programmieren, nimm VHDL)

oder

Simulation der Funktion
dann ist es eher ein Parser mit Vereinfachung, der auf eine zweistufige 
Funktion führt (DNF oder KNF),danach erzeugst du entweder Code oder eine 
Lookuptable.

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
Noch kein Account? Hier anmelden.