Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: joachim_neu am 23. December 2005, 22:51

Titel: ASMler gesucht
Beitrag von: joachim_neu am 23. December 2005, 22:51
Hallo,

Ich wollte mal fragen, ob es hier in der Community jemanden gibt, der Lust hätte, mit mir zusammen einen Assembler in Assembler zu schreiben.
Ziel ist es, einen guten Assembler (ggf. auch mit Optimierung) zu programmieren, der leicht portabel ist.

Warum einen neuen Assembler schreiben? Und warum auch noch in Assembler? Nun, Assembler "ist" Maschinencode (gut, der Maschinencode sieht etwas anderst aus, aber im Prinzip wird das 1 zu 1 übersetzt). Das heißt mit Assembler hat man die volle "Macht" über den PC. Warum also nicht einen Assembler als erstes Programm in das System integrieren? So währe das System recht schnell freestanding und man könnte es mit sich selbst weiterentwickeln. Außerdem könnte man dann den Assembler mit sich selbst weiterentwickeln/debuggen. Und dadurch, dass der Assembler sehr portabel ist, könnte man ihn durch das Austauschen von wenigen grundlegenden Funktionen auf ein anderes System übertragen.

Bei Interesse bitte hier posten oder über ICQ (247390343) oder eMail (joachim_neu@web.de) melden.

Gruß,

Joachim
Titel: ASMler gesucht
Beitrag von: Jidder am 24. December 2005, 13:20
"mit Optimierung"? Heisst das, dass der Assembler den Assembler-Code optimiert? Verliert man da nicht gerade die Vorteile von Assember, wie "1 zu 1 Übersetzung" also die absolute Kontrolle über den vollständigen Code?
Titel: ASMler gesucht
Beitrag von: Osbios am 24. December 2005, 14:06
Zum Thema Optimierung habe ich, vor allem wegen Sachen wie JIT (Java) ein par Ideen parat. Werde ich später was zu posten.

Das erste was man machen muss ist wohl die festlegung eines Syntaxes. Bzw. soll man diesen von NASM, FASM, AT&T... übernehmen? Soll man gleich was ganz neues entwickeln?
In welchem Assembler er dann geschrieben wird sollte klar sein, da er ja mit sich selber assembliert werden soll.

Für die Kompatibilität würde ich eine Interne API vorschlagen.
Die eigentlich nur dazu dient, dass von Sicht des assemblers alles gleich angesprochen wird. Also Datei Ein-/Ausgabe, Speichermanagement. Denn Assembler haben im gegensatz zu Hochsprachen meist keine libs welche diese aufgabe übernehmen.

Assembler
   \/
Interne API
   \/
API des jeweiligen Systems
Titel: ASMler gesucht
Beitrag von: joachim_neu am 24. December 2005, 16:09
Zitat von: Osbios
Assembler
   \/
Interne API
   \/
API des jeweiligen Systems
,

Exakt so ist es gedacht. Das vereinfacht das Portieren enorm.

Zitat von: PorkChicken
"mit Optimierung"? Heisst das, dass der Assembler den Assembler-Code optimiert? Verliert man da nicht gerade die Vorteile von Assember, wie "1 zu 1 Übersetzung" also die absolute Kontrolle über den vollständigen Code?


Doch. Aber man könnte ja eine Option einbauen, ob optimiert werden soll oder nicht.

Zitat von: T0ast3r
Ich hätte Interesse daran  :wink:
Vor allem weil ich die ganze Zeit in Assembler programmiere und einen Assembler selbst für mein OS brauchen könnte.


Gut, ich schließe mich mal mit dir kurz!

Zitat von: Osbios
Das erste was man machen muss ist wohl die festlegung eines Syntaxes. Bzw. soll man diesen von NASM, FASM, AT&T... übernehmen? Soll man gleich was ganz neues entwickeln?
In welchem Assembler er dann geschrieben wird sollte klar sein, da er ja mit sich selber assembliert werden soll.


Als Syntax würde ich den von NASM eins zu eins übernehmen. Dann können wir den Assembler mit NASM schreiben und er kann sich gleich selbst assemblieren.
Titel: ASMler gesucht
Beitrag von: Mihail121 am 24. December 2005, 16:48
Ich wär mal dran interessiert aber nur dann, wenn der Assembler mehrere CPUs und Microcontroller unterstützen wird.
Titel: ASMler gesucht
Beitrag von: Legend am 24. December 2005, 18:38
Na ja - wie soll dir der Assembler bei mehreren CPUs helfen? Wobei das nicht uninteressant wär. Ich finde alle Sprachen sind bislang nur sehr mangelhaft für Multithreading geeignet.
Titel: ASMler gesucht
Beitrag von: Mihail121 am 24. December 2005, 18:41
Ich meinte mehrere Arten von CPUs und Microcontrollern :P
Titel: ASMler gesucht
Beitrag von: Mihail121 am 25. December 2005, 11:45
Natürlich ist es mir aufgefallen, ich arbeite ja intensiv mit NASM aber es geht um etwas ganz anderes: NASM unterstützt nur x86-CPUs aber eine Unterstützung für Motorola 68000 oder für die PIC-Microcontroller, um einige zu nennen, wäre auf jeden Fall auch wünschenswert.
Titel: ASMler gesucht
Beitrag von: joachim_neu am 25. December 2005, 12:08
Die Prozessoren haben aber einen ganz anderen Befehlssatz. Das kann man nicht einfach 1 zu 1 portieren, es sei denn man baut verschiedene Befehlssätze ein. Aber ich denke für den Anfang sollte x86 reichen.
Titel: ASMler gesucht
Beitrag von: bitmaster am 26. December 2005, 17:56
Also ich bin auch gerade dabei mir einen Assembler für mein OS zu bauen. Dieser soll aber nicht die NASM-Syntax haben (die kann ich nämlich nicht leiden) sondern die TASM/MASM -Syntax. Einiges habe ich schon beschaft, aber das meiste kommt erst noch. ;) Also wenn Ihr an Spezielle Infos für den ASM Bau kommt, lasst sie mich wissen. ;)

Danke!!!
Titel: ASMler gesucht
Beitrag von: joachim_neu am 27. December 2005, 09:08
Ah, gut. Dann kannst du uns ja indirekt auch unterstützen. Mein Hauptproblem ist die Opcode-Generierung. Schick mir bitte mal alles, was du über Assembler-Bau hast per eMail. Währe sehr froh drüber.
Titel: ASMler gesucht
Beitrag von: SSJ7Gohan am 27. December 2005, 12:43
Hm, wo liegen denn deine Probleme in der opcode generierung?
Titel: ASMler gesucht
Beitrag von: joachim_neu am 27. December 2005, 22:24
Präfixe sind mir klar. Opcode an sich auch. ModR/M-Byte ist mein Hauptproblem. Ich verstehe nicht, wie das zusammengesetzt wird. SIB ist wieder kein Problem. Und Displacement und Konstante auch nicht.
Titel: ASMler gesucht
Beitrag von: SSJ7Gohan am 27. December 2005, 22:44
Auf sandpile.org gibt es Tabellen zum mod R/M Byte. Es besteht aus 3 Teilen, den oberen 2 Bits, die den Typ der Parameter im mod R/M Byte angeben (Register, SSE Register usw.), 3 Bits, die einen Parameter angeben, und nochmal 3 Bits, die einen anderen Parameter angeben. Wie die Daten im mod R/M Byte interpretiert werden, hängt von der Instruction ab. (Steht auch auf sandpile)
Titel: ASMler gesucht
Beitrag von: joachim_neu am 28. December 2005, 10:53
Thx, ich schau mich mal da um.
Titel: ASMler gesucht
Beitrag von: [MM] am 31. December 2005, 13:13
Hallo,

ich hab mal (unter anderem) einen Makro-Asembler geschrieben:
http://wwwstud.fh-zwickau.de/~micmo/compiler.html
(ganz unten auf der Seite nach meinen Compilern)

Ist zwar nicht in Assembler sondern in C geschrieben, aber eventuell hilft es euch ja weiter...

MM
Titel: ASMler gesucht
Beitrag von: n3Ro am 03. January 2006, 00:26
Wozu denn noch einen Assembler? Es gibt doch nun schon genug: NASM,YASM,FASM,GAS,(TASM,MASM), ...
FASM erfüllt bereits alle Ziele bezüglich des "Assembler in Assembler", in Sachen Portabilität und Vielfältigkeit lässt GAS alle ganz schön alt aussehen (zig Prozessorfamilien, verschiedene Syntax, ...). Damit kann man doch zufrieden sein. Wenn man was eigenes machen will, dann doch lieber irgendwas, was es so nicht gibt ;-)
Titel: ASMler gesucht
Beitrag von: [MM] am 03. January 2006, 12:55
Sicher gibt es schon eine Menge, aber man benutzt doch am liebsten Tools die man selber geschrieben hat, oder?
Außerdem lernt man noch ne Menge dabei. Und ich konnte meinen Assembler zB als Grundlage für meinen C Compiler benutzen und so einen C Compiler gibt es bestimmt nicht...

MM
Titel: ASMler gesucht
Beitrag von: n3Ro am 03. January 2006, 14:17
Naja, kommt drauf an. Eigene Tools sind oftmals fehlertraechtiger und durch ihre Proprietaritaet schafft man sich nicht immer Unterstuetzung, es sei denn es ist was neues, was viele brauchen.
Das mit dem Lernen ist ja immer so, aber man muss das Rad nicht neu erfinden um zu erkennen das es rund ist. Und einen Assembler wuerde ich schon in die Kategorie "Rad" einordnen. Mit hoeheren Sprachen ist das schon was anderes, da hast du schon recht.
Titel: ASMler gesucht
Beitrag von: [MM] am 03. January 2006, 15:11
Eigentlich komisch, dass gerade in diesem Forum die Frage nach dem "Warum" gestellt wird: Warum sollte man sich dran setzen ein eigenes Betriebssystem zu schreiben, es gibt doch auch schon eine Menge die auch ganz passabel funktionieren...
Und vor allem denke ich auch, dass es zum "Low Level" dazu gehört nicht nur fertige Komponenten (oder Räder  :wink: ) zu benutzen, dann könnte man auch gleich Java programmieren...

MM
Titel: ASMler gesucht
Beitrag von: n3Ro am 03. January 2006, 15:35
Tja, wie gesagt, wenn man was "neues" machen will (in meinem Fall ein HobbyOS nur auf 64bit ausgelegt), ist fuer mich die Frage nach dem warum beantwortet. Wenn man das warum nicht ausreichend klaeren kann, passiert es allzuoft, das etwas mit der Zeit im Abgrund verschwindet (schau dir V2OS an, am Anfang wussten die warum die was machen und wo es hingehen soll, dann wurde es schwammig und ziellos, und dann war es in der Bedeutungslosigkeit ertrunken und von der Bildflaeche verschwunden, "lost" sozusagen ;)).
Aber Java ist ein gutes Stichwort, denn sehr schoene Sprache und OS-Programmierung ist damit auch noch nicht richtig erforscht. So sichere Sprachen sind in sowas sowieso duenn besiedelt (JNode, Singularity, Unununium fallen mir nur als ernshafte ein). Das waere also auch Grund genug da was zu machen.
Dies ist allerdings meine persoenliche Meinung und ich moechte auch niemanden damit auf den Schlips treten :)
Titel: ASMler gesucht
Beitrag von: Osbios am 04. January 2006, 16:58
Zitat von: Mihail121
Natürlich ist es mir aufgefallen, ich arbeite ja intensiv mit NASM aber es geht um etwas ganz anderes: NASM unterstützt nur x86-CPUs aber eine Unterstützung für Motorola 68000 oder für die PIC-Microcontroller, um einige zu nennen, wäre auf jeden Fall auch wünschenswert.


Hmm... mit einem Macroassembler wäre es möglich.
Ein "Assembler" der im Grunde nur zur Erzeugung von Binärdaten auf grundlage von Adressberechnugen und Macros mit inlinebinäri basiert.
Das kann man zwar nicht mehr direkt als Asm bezeichnen aber Prozessorunabhängig wäre es schon.
Titel: ASMler gesucht
Beitrag von: Legend am 04. January 2006, 17:23
Hmm ... interessant!
Titel: ASMler gesucht
Beitrag von: Osbios am 09. January 2006, 20:28
Wollt ja noch was zur Optimierung sagen. Das hat jetzt aber nichts mit JIT und so zu tun... Also...
bestimmt wissen einige der hier lesenden Leute mit Asmkentnissen was Pipelineoptimierung ist. Wer sich tiefer mit der Materie beschäftigte, kennt die enorme Leistungssteigerung (positiv) und den enormen Verbrauch an Menschenjahren (nicht so positiv).
Außerdem sind diese Optimierungen sehr Modelabhängig, was sogar dazu führen kann, dass Optimierungen für ein Model bei einem anderem Model zu Performanceverlust führt. Und führ jedes Model eigene Optimierungen schreiben, würde nur bedeuten = Menschenjahre*Anzahl möglicher Modelle.  :roll:

Bei Hochsprachen wird meist schon in gewissem Grade Pipelineoptimiert, aber der Output ist meistens schon so schlecht das man sowieso nix mehr retten kann.

Und hier meine Frage: Warum gibt es keine automatisierte Pipelineoptimierung für Assembler?

Ich habe mir schon eine Möglichkeit ausgedacht, bin jetzt aber zu müde um noch weiterzuschreiben.  :D
Titel: ASMler gesucht
Beitrag von: Osbios am 10. January 2006, 15:26
Ok, weiter gehts...

Eine mögliche Optimierung, die ich bei Assemblern sehe, ist das Umsortieren von Befehlen.
Dabei kann ein Befehl belibig verschoben werden, solange alle Abhängigkeiten in der selben Reihenfolge bleiben.

Ich möchte das mal genauer erleutern:

In der Regel wird ein Befehl durch bestimmte Register beeinflusst. (Eingabe)
Der Befehl selbst wiederum verändert Register. (Ausgabe)
Während der Ausführung des Befehles werden bestimmte Bereiche der CPU belegt. (Ressourcen)

Die Beachtung der Ein- und Ausgabe ist zur Erhaltung der Reihenfolge nötig.

Über das Umsortieren der Befehle soll erreicht werten, dass alle Ressourcen der CPU ausgelastet werden

mal ein einfaches Beispiel in Assembler:mov eax,[0xDEADBEEF]
add eax,0xABC
add ebx,ecx

In diesem Beispiel würde die CPU (meines aktuellen Wissens nach) vor dem zweiten Befehl warten bis eax mit dem Speicherwert geladen wurde. (Arbeitsspeicher ist aus sicht des Assemblerprogrammierers eher langsamm)


Zur Optimierung würde man den letzten Befehl einfach zwischen die ersten beiden schieben.mov eax,[0xDEADBEEF]
add ebx,ecx
add eax,0xABC


Das Rumschieben kann ich in diesem Beispiel sehr einfach machen, weil der Befehl add ebx,ecx nicht in direkter Verbindung zu den beiden anderen Befehlen steht.
Man könnte jedoch keinen Befehl zwischenschieben der eax beeinflusst!
mov eax,[0xDEADBEEF]
<--Bereich ist für alle Befehle frei, die eax nicht beeinflussen
add eax,0xABC


Hoffe das wurde soweit verstanden.
Titel: ASMler gesucht
Beitrag von: DDR-RAM am 10. January 2006, 19:22
Du musst aber aufpassen, das du nicht in Teufelküche kommst, falls du Befehle dazwischen schreibst, die den Speicher beeinflussen

mov eax, [0xDEADBEEF]
add eax, [ecx]
mov [ebx], edx


falls ecx = esp und das kann schonmal passieren ist eine vertauschung von 2. und 3. Befehl grob fahrlässig.
Wollte es nur erwähnt wissen :D
(auch wenn ich mir nicht sicher bin, ob ich pipelining richtig beherrsche, denke eher nicht, code zu selten in asm)

MfG
DDR-RAM
Titel: ASMler gesucht
Beitrag von: Osbios am 10. January 2006, 20:49
Aber das Grundprinzip bleibt gleich. Denn ESP ist nur eine Eingabe für jeden Befehl, der den Speicher anspricht!

Um es nochmal deutlich zu machen:
Alles was einen Befehl Beeinflusst darf nicht verändert werden. Dass betrifft alle Register, so unter anderem natürlich auch das Statusregister (flags).
Titel: ASMler gesucht
Beitrag von: DDR-RAM am 11. January 2006, 21:31
ich meinte auch ecx=ebx, hatte vorher esp verwendet, dachte mir dann aber das mit esp das Beispiel schlechter wäre ;-)

Zitat

Alles was einen Befehl Beeinflusst darf nicht verändert werden. Dass betrifft alle Register, so unter anderem natürlich auch das Statusregister (flags).

Und auch den Arbeitsspeicher. Wenn nur leseoperationen dazwischen geschoben werden, ist es ja egal, wenn aber schreiboperationen dazwischen platzen, dann müsste der Optimierer entweder genau wissen, das diese zu schreibende Speicherstelle den nächsten Befehl nicht beeinflusst oder er könnte das so nicht optimieren.
(nur falls der nächste befehl auf den arbeitsspeicher zugreift, da fällt mir noch ein spezialfall ein, aber ihr werdet das eh selbst merken)

Aber automatische Pipeline-Optimierung für bestimmte Prozessortypen ist schon was feines.

MfG
DDR-RAM
Titel: ASMler gesucht
Beitrag von: Osbios am 12. January 2006, 18:30
Zitat von: DDR-RAM
ich meinte auch ecx=ebx, hatte vorher esp verwendet, dachte mir dann aber das mit esp das Beispiel schlechter wäre ;-)


Dann hätten wir diesen Anfangszustand:
mov eax, [0xDEADBEEF]
add eax, [ebx]
mov [ebx], edx

Ohne mich jetzt schon groß mit den Möglichkeiten der Optimierungen bei Speicheradressen beschäftigt zu haben, kann ich sagen, dass der Speicher als eine Eingabeeinheit behandelt werden kann. Es wird allso im zweiten Befehl etwas aus dem Speicher gelesen und im dritten Befehl etwas in den Speicher geschrieben. (Abhängigkeit des zweiten Befehles mit einem vorherigem Befehl der in den Speicher geschrieben hal)

Zitat von: DDR-RAM
Und auch den Arbeitsspeicher. Wenn nur leseoperationen dazwischen geschoben werden, ist es ja egal, wenn aber schreiboperationen dazwischen platzen, dann müsste der Optimierer entweder genau wissen, das diese zu schreibende Speicherstelle den nächsten Befehl nicht beeinflusst oder er könnte das so nicht optimieren.
(nur falls der nächste befehl auf den arbeitsspeicher zugreift, da fällt mir noch ein spezialfall ein, aber ihr werdet das eh selbst merken)

Dabei kann halt nicht alles optimiert werden. Aber was man optimiert kann, sollte auch optimiert werden.


Zitat von: DDR-RAM
Aber automatische Pipeline-Optimierung für bestimmte Prozessortypen ist schon was feines.

Mein Traum ist es HT auszuhebeln, indem keine einzige Pipeline mehr frei ist während mein Programm läuft. ^^
Titel: Re: ASMler gesucht
Beitrag von: bscreator am 10. January 2010, 12:29
Hi, ich bin auch sehr interessiert daran, wie man einen Assembler baut.
Leider hab ich keine Kenntnisse über Assemblerbau, die ich mit in eure Gruppe einbringen könnte.

Jedoch kann ich einigermaßen Assembler programmieren.
Wär nett, wenn ich in die Gruppe mit rein dürfte (um was zu lernen [LowLevel - Einstieg in den Assemblerbau].

Habt ihr vielleicht ein paar Seiten auf denen erklärt wird, wie man mit der Programmierung anfängt, bzw. wo ?

Danke für alles und noch ein wundervolles neues Jahr euch allen,
bsc
Titel: Re: ASMler gesucht
Beitrag von: XanClic am 10. January 2010, 12:31
Das Problem ist nur, dass die Gruppe aus meiner Sicht so ziemlich tot aussieht, denn sonst hätte es in vier Jahren bestimmt mal ein Release gegeben, oder? :-D

(EDIT: Jahr korrigiert, stimmt, ist ja schon 2010 - thx, bluecode :wink:)
Titel: Re: ASMler gesucht
Beitrag von: bluecode am 10. January 2010, 12:37
Der Thread ist 3,5Jahre alt. :wink:
Ansonsten würde ich aber mit den Intel Manuals (va. Instruction Set Reference) anfangen. Ansonsten musst du dich halt mit Parserbau anfreunden, also erstmal Tokens bauen (Keyword, Identifier, Operatoren und Sonderzeichen [zB : bei Labels], Zahl, String dürften wohl die wichtigsten sein), anschließend einen Syntaxbaum (das ist für die Basissachen bestimmt sehr einfach und ohne Theorie zu machen) bauen. Das waren wohl so die Stichworte für wikipedia und google.
Titel: Re: ASMler gesucht
Beitrag von: erik.vikinger am 10. January 2010, 17:57
Hallo bscreator ,


also ich schreibe zur Zeit einen Assembler, allerdings nicht für x86. Dazu muss ich dann auch noch einen Linker schreiben. Eigentlich entwickle ich eine komplette Plattform und dazu alles was man so braucht.
Über Hilfe würde ich mich schon freuen.


Hi, ich bin auch sehr interessiert daran, wie man einen Assembler baut.
Ich will nicht sagen das ich voll den Durchblick hab, aber ich denke das ich einen guten Plan hab und der auch sicher ganz gut funktionieren wird.

Leider hab ich keine Kenntnisse über Assemblerbau, die ich mit in eure Gruppe einbringen könnte.
Was kannst Du denn ansonsten einbringen?

Jedoch kann ich einigermaßen Assembler programmieren.
Für welche CPUs?

Wär nett, wenn ich in die Gruppe mit rein dürfte
Wie könntest Du Dir denn eine Zusammenarbeit vorstellen?

(um was zu lernen [LowLevel - Einstieg in den Assemblerbau].
Der Assembler selber brauch eher Wissen über Parser, Tokenizer und ähnliche Sachen. Mit LowLevel hat das nicht wirklich was zu tun.


Aber sei gewarnt, meine Plattform ist doch ziemlich anders als alles andere was es sonst so gibt.
Ich schreibe diese Tools übrigens alle in C++.


Grüße
Erik
Titel: Re: ASMler gesucht
Beitrag von: bscreator am 10. January 2010, 19:44
Hi erik.vikinger,
das ist ne gute Idee, dass es jetzt mit C++ machst.
Das blöde ist, dass ich nur Wissen über Compilerbau hab und das ist auch schon ein paar Jährchen her...

Ich schreib meine Programme immer in MS Visual C++. Aber hauptsächlich eigentlich in C Syntax. Mit C++ hab ich nicht so viel am Hut.

Alle Programme waren bisher für den x86. Meine OS hab ich auch nur für den Prozessor programmiert.

Ich werd mich jetzt mal über Parser und Tokenizer im Internet informieren.
Wenn der Assembler und die gesamte Oberfläche fertig ist, wird es ja kein großes Problem darstellen, das ganze auf den x86 zu portieren.

Eine Zusammenarbeit?
Du kannst ja mal den Assembler in deiner Zielsprache und Oberfläche schreiben und ich werd dann mal versuchen, das ganze in ANSI C für den x86 zu schreiben.
Titel: Re: ASMler gesucht
Beitrag von: erik.vikinger am 11. January 2010, 00:19
Hallo,


Das blöde ist, dass ich nur Wissen über Compilerbau hab
Dann hast Du doch schon alles wichtige beinander.
sieh mal hier http://www.c-plusplus.de/forum/viewtopic-var-t-is-249255.html
Ein Assembler besteht im wesentlichen aus 2 Teilen: zum einen den Assembler-Text einlesen, auf syntaktische Fehler prüfen und in eine interne Repräsentation (für die nutze ich C++-Klassen, eine Liste reicht ein Baum ist nicht nötig) überführen und zum zweiten diese interne Repräsentation in Binär-Code überführen also Labels auflösen u.ä.

Wenn der Assembler und die gesamte Oberfläche fertig ist, wird es ja kein großes Problem darstellen, das ganze auf den x86 zu portieren.
Ich weiß zwar nicht was Du mit "Oberfläche" meinst aber meinen Assembler auf x86, unter einem normalen OS, umzustellen dürfte nahezu unmöglich sein. Segmentierung ist schon was völlig anderes als Flat-Memory. Okay x86 im PM kann zwar auch Segmentierung aber das nutzt keiner (mehr).


Grüße
Erik
Titel: Re: ASMler gesucht
Beitrag von: erik.vikinger am 11. January 2010, 09:20
Hallo,


ich hab noch ein bisschen übelegt.

Ein Assembler sollte die interne Repräsentation, zwischen den 2 von mir schon genannten Haupt-Schritten, sicher auch noch auf logische Fehler prüfen, sowas wie alle benutzten Labels vorhanden und alle Befehle an sich korrekt also keine unerlaubten Register-Kombinationen usw. und ob der Befehl in der gewünschten CPU-Generation überhaupt zur Verfügung steht. Das erspart dem eigentlichen Code-Generator im zweiten Hauptschritt die Mühe vernünftige (menschenverwertbare) Fehlermeldungen auszugeben. Die Gültigkeit der Befehle könnte aber auch schon im ersten Hauptschritt geprüft werden.
Das Problem das ich im Portieren eines Assemblers auf eine andere CPU-Architektur sehe ist das ein Großteil des gesamten Codes eben in den 2 Hauptschritten steckt und die sind beide sehr abhängig von der CPU-Architektur (z.B. die Decodierung von Speicheroperationen hängt davon ab welche Adressierungsmodi eine CPU-Architektur bietet), so das man kaum mehr als das Basis-Gerüst (Listen-Verwaltung u.ä.) und eventuell einige Teile des Parser und Tokenizers wiederverwenden kann (falls die Syntax nicht zu verschieden ist). Ein guter Kandidat für die Wiederverwendung währe wahrscheinlich der Parser für Litterals. Ein "Label1 + (123 * 0x10) + 0x08" muss man immer vernünftig auflösen können, hier ist auch der einzigste Punkt wo ich doch einen Baum einsetze wegen den Klammer-Ebenen und Vorrangregeln.


Grüße
Erik