Ich versuche, einen kleinen 8086+ Assembler zu schreiben, wahrscheinlich nur Real-Modus, und kann mich für eine große Teilmenge der möglichen Anweisungen entscheiden.Closer-to-the-Metal alternative Assembler-Syntax für x86?
Die x86-Anweisungen sind komplex und erfordern eine komplexe Tabellenlösung, die in Ordnung ist, aber ich möchte etwas kleiner/einfacher.
Eine meiner Ideen ist es, mit den Opcodes zu beginnen und einen alternativen Satz von Mnemonics/Adressierungsmodi/Registern zu erstellen, der sich enger auf die tatsächlichen Maschinenanweisungen bezieht.
Wurde dies getan und wo kann ich darüber lesen? Mein Bauchgefühl sagt, dass das schon getan sein muss, aber ich kann nichts online finden.
Dinge, die ich schon sah in:
AT & T Syntax: löst nicht das Problem, müssen Sie noch eine komplexe Lookup-Tabelle; am Ende ist es im Grunde das gleiche wie Intel-Syntax.
CRASM512.ASM: ein cooler 512 Bytes Trick Assembler. Sehr beeindruckend, aber nicht verwendbar (und nicht gemeint). Die Syntax basiert immer noch auf Intel.
Verwenden nur einer Teilmenge von "homogen codierten" Anweisungen. Das ist , was ich gerade versuche, und mit einer kleineren und weniger komplexen Tabelle getrieben Ansatz als ein vollwertiger x86-Assembler.
Das Problem ist, dass ich immer noch auf ungültige Anweisungen überprüfen muss, und x86 ist komplex genug, dass ich nur die Tabelle getriebene Annäherung ein wenig einfacher, nicht einfach machen kann. Es ist also 90% der Komplexität für 10% des Ergebnisses, weil es vor allem die Tabellen sind, die sich im Vergleich zum echten Deal ändert.
8086 Assembler ist einfach im Vergleich zu den meisten Plattformen (und anderen Sprachen), was ist Ihr Ziel dabei? Wenn Sie nur wissen wollen, wie das geht, dann schlage ich vor, eine vereinfachte Teilmenge eines 8086-Assemblers zu erstellen und seine Fähigkeiten so lange zu erweitern, bis Sie einen vollständigen 8086-Assembler haben. Ich konnte einen PIC16F-Assembler in ungefähr 1000 Zeilen von Python (um 2008) schreiben, und einen 80286-Assembler in ungefähr 2500 Zeilen von C (um 2001), so dass diese nicht groß sind. Versuchen Sie, dies in 8086 Assembler zu implementieren? Trotzdem sollte es ziemlich einfach sein, wenn Sie den Code gut organisieren. –
Ja, ein normaler x86-Assembler ist einfach (mit einem tabellengesteuerten Ansatz), aber das ist bereits geschehen. Ich möchte meins VIEL kleiner machen, während es noch verwendbar/nützlich ist, also suche ich nach irgendwelchen Ecken zum Schneiden. Wie auch immer, wenn man sich die x86-Anweisungen im Vergleich zu den Mnemonics anschaut, bittet die Frage nach einem alternativen Mnemonics-Set (etc) einfach darum, gefragt zu werden. –
Ok, also möchtest du dem Metall näher kommen als ... Assembler? Du erkennst, dass es Bare Metal ist, oder? Es ist eine Darstellung der numerischen Befehlscodierung, die so nah wie möglich ist. Vielleicht hilft Ihnen ein Beispiel dessen, was Sie darstellen möchten, dies zu klären? –