PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ASM-Compiler] Planung



Killswitch
19.07.2001, 12:29
#Projekt : ASM Compiler

Jetzt werd ich mich mal bemühen zu erklären worums geht .

Also , ich hab mich gestern bei Sourceforge angemeldet , und zwar für ein Projekt Namens Headcrash . Das ganze ist ein Compiler System (IDE + Parser + Compiler ) , wobei das mit dem Compiler sone sache ist . Die HC Syntax wird in Assembler Code umgewandelt , und dann vom TASM compilet und gelinkt . Das ganze ist ein Schulprojekt ( Seminarfach ) und Januar 2002 ist die Projektverteidigung , und wenn das vorbei ist ( und wir unsere 15 Punkte gekriegt haben :) ) Hab ich vor das ganze weiter zu entwickeln , da gibts nämlich noch viel zutun . Z.B. gibts noch keine Funktionen , nur Prozeduren mit lesenden und schreibenden Parametern . Aber da wir das ganze allein machen müssen kann das alles wiegesagt erst im Januar anlaufen . Bis dahin hab ich mir gedacht könnte man aber mal was anderes machen . Der Turbo Assembler is ja keine Freeware . Nun könnten wir den HC Compiler so ändern das er die Syntax von nem Freeware compiler unterstützt ( nasm ) . Aber es ist
doch viel sinnvoller , eleganter ( und vor allem interessanter ) Wenn man einen eigenen Assembler hätte . Und das ist jetzt das eigentliche Projekt ( das hat jetzt gedauert ... ) . Einen eigenen Assembler Compiler zu schreiben . Wenn ihr jetzt fragt wie sowas geht dann kann ich getrost sagen :
Ich habe keinen blassen Schimmer ! Aber das is ja auch nicht schlimm , weil irgendwie klappt das schon . Also es wär von vorteil wenn es ein paar Leute gibt die interesse haben und wenigstens ein bisschen Ahnung
haben wie das dann laufen soll . Ich hab mir das eigentlich so gedacht : Das man die Assembler befehle in ihre Opcodes übersetzt und das dann in eine Datei schreibt . Dann hätte man ja eigentlich ne lauffähige .com Datei . Aber das kann man später alles noch besprechen . Was vielleicht noch wichtig wäre , ist das man für den Anfang erstmal nicht übermässig viele sachen zur Fehlerbehandlung brauch , da er Assembler Code der Generiert wird ja schon von Headcrash überprüft wurde und eigentlich richtig sein muss ( eigentlich ... ) . Nur wenn der Compiler später mal stand-alone eingesetzt werden soll müsste das noch implementiert werden . So , und bevor ich jetzt weiterschreibe will ich erstmal sehen ob überhaupt wer interesse hat . Die Programmiersprache ist eigentlich egal . C wär wohl am geignetsten . Aber alle anderen Sprachen sind auch willkommen . Die frage ob man sowas in VB realisieren kann sei mal dahingestellt , das kann man später noch erleutern . Immerhin ist Headcrash auch in VB programmeirt ...

E-Mails schickt ihr am besten an killswitch@join-neo.de

P.S. Wenn einer Ahnung/Erfahrung mit CVS hat , dann kann er sich mal bei mir melden , ob nun über Board oder
per E-Mail is egal .

Bunny
21.07.2001, 23:20
Aber es ist
doch viel sinnvoller , eleganter ( und vor allem interessanter ) Wenn man einen eigenen Assembler hätte.


Was ist den daran sinnvoll, wenn man extra ein Assembler entwickelt? Erst übersetzt du Code in Mnemoics... damit der Rechner in den Opcode verwandelt. Dabei sind Mnemoics eigentlich nur da, um dem Menschen das lesbar zu machen. Dann könnte man sich einen Schritt sparen. Daruch wird
1. Der compiler schneller.
2. Dein Problem wird meiner Meinung nach leichter, da kein ganzer Assembler entwicklt werden must.

Killswitch
22.07.2001, 11:02
Da hast du recht . Wenn der HC Compiler das ganze gleich in Opcodes übersetzt wär das sinnvoller . Allerdings würde ich das vorher schon erst noch in Mnemoics übersetzen , da das ja ein Teil des Sinns des Programms ist , das der Anwender erfährt wie das ganze in Assembler aussieht . Und wenn man da nu in ner Textdatei Haufenweise Hexbytes stehen hat , hat ja auch nix von gewonnen . Mein Problem ist nur ,das ich keine Ahnung habe was danach kommt . Wenn man die Hex Bytes so in ne Binärdatei schreibt , sollte man ja eigentlich ne lauffähig .com Datei haben oder ?

Bunny
22.07.2001, 12:40
Ja, das ist richtig. Bei .model tiny sind Daten und Code im einem Segement, da hast du dann eigentlich nur das 64K-Problem.
Hm, ich würde dann einfach so machen, das man sich aussuchen kann, wie der Compiler ausgeben soll, im Asmcode oder im Opcode.

Ich zeig dir am besten mal nen Beispiel.
Sagen wir mal du hast ein Porgramm, das vollgendes macht:



Schreibe "Hallo"
Ende


Dann macht dein Programm in etwa das da raus:



start:
mov ah, 09h ;Programmpaket Schreibe
mov dx, offset daten1
int 21h

mov ah, 4Ch ; Programmpaket Ende
int 21

daten db "Hello","$"


Dann must dein Programm in zwei Läufen berechnen.
1. Du must wissen wie groß deine Programmpakete sind. Im unseren Beispiel wäre das erste immer 7 Bytes und das zweite immer 4 Bytes groß. Dann ersetzt du die Labels durch zahlen. COM, fangen immer bei Offset 100h an. Dann must du ja nur Rechnen 7h+4h+100h = 10Bh. Hättest du noch Daten2, wäre das eben, die 10Bh + Länge(Daten1) usw.



start:
mov ah, 09h ;Programmpaket Schreibe
mov dx, 10Bh
int 21h

mov ah, 4Ch ; Programmpaket Ende
int 21

daten db "Hello","$"



2. Jetzt kann st du das ja direkt in den Opcode übersetzen. Und du brauchst wieder nur eine Stelle berechnen. Weil ja sonst alles gleich bleibt. Wo bei das ja noch nicht mal ne Richtige Berechnung ist.
Dann must einfach die Stellen nur vertauschen.

Wenn deine Zahl so aus sah:

Stelle2,Stelle1

must die so aussehen:

BAh Stelle1, Stelle2




; Alles in Hex

B409
BA 0B01 ; Das ändert sich
CD21
B44C
CD21

;Hier kommen deine Daten




[Dieser Beitrag wurde von BunnyR81 am 22. Juli 2001 editiert.]

schau dir das mal an:
www.my-os.de/nam095s.zip (http://www.my-os.de/nam095s.zip)


[Dieser Beitrag wurde von BunnyR81 am 27. Juli 2001 editiert.]

Killswitch
04.01.2002, 14:17
So , ich wollt mich mal nach langer Zeit wieder melden .
unter : https://sourceforge.net/projects/headcrash/
findet ihr die Sourceforge Seite zum Projekt . Da könnt ihr euch das ganze durchlesen und wenn interesse besteht auch bei mir melden . denn erst wenn ich 2 oder 3 leute habe die mitmachen find ich es sinnvoll dateien hochzuladen , da das noch alles andere als lauffähig ist ...