Scriptsprache kompilieren

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Merier

BeitragMo, Apr 27, 2009 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Thunder das ist auch ne gute Idee die werde ich wohl nehmen.^^

thx

P.S: Wie könnte man denn den Code in eine Exe kopieren ohne das die Exe nicht mehr funktioniert?

mfg Merier
 

Maxx

Betreff: Compiler

BeitragDo, Jul 09, 2009 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf der Seite sind einige Tutorials wie man einen Compiler schreiben könnte.
Hier der dirkete Link: http://iconsoft.de/index.php?show=tutorial_asm
Du müssest deine Befehle in Nativencode (Maschinencode) umwandeln.
Hier ein Beispiel:
MOV AH,01h Wert 1 in das Register A-High schieben

Code: [AUSKLAPPEN]

file = Writefile("programm.com")           ; ausführbare DOS-Datei erstellen
WriteByte file, $B4                        ; Der MOV AH   Befehl
WriteByte file, $01                        ; Der Parameter (01h)
Closefile (file)


Du fragst dich sicherlich: "Warum bitte erstellt der Typ eine Datei für DOS?"
Die Antwort lautet, dass eine .exe noch einen komplizierten Header usw. braucht und eine DOS-Datei so einfacher zu erstellen ist.


Nun wird das Programm aber mit einer Fehlermeldung abstürzen....
Was fehlt sind folgende zwei Maschinenbefehle;

Code: [AUSKLAPPEN]

WriteByte file, $B4 ; Schreibe in das Register AH
WriteByte file, $00 ; den Wert 0

WriteByte file, $CD ; Rufe das Interrupt
WriteBYte file, $21 ; 21 auf

Nun wird dein Prozessor das Interrupt 21h ausführen, welches wiederum das DOS-Programm beenden wird, da die Parameter für das Interrupt im Register AH liegen. 0 sagt den Interrupt: "DOS programm beenden".

Falls du nicht weißt, was ein Interrupt ist:
http://iconsoft.de/index.php?show=tutorial_int

Zum Schluss noch einmal den gesamten Code
Code: [AUSKLAPPEN]

file = Writefile("programm.com")           ; ausführbare DOS-Datei erstellen

WriteByte file, $B4                        ; Der MOV AH   Befehl
WriteByte file, $01                        ; Der Parameter (01h)

WriteByte file, $B4                        ; Schreibe in das Register AH
WriteByte file, $00                        ; den Wert 0

WriteByte file, $CD                        ; Rufe das Interrupt
WriteBYte file, $21                         ; 21 auf

CloseFile(file)


MfG Maxx

hazumu-kun

BeitragDo, Jul 09, 2009 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach doch einen Linker der ein vorhandenes Interpreter exe modul mit dem Script versachmilzt.

BB Cruncher wäre da ne große Hilfe.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

ComNik

BeitragDo, Jul 09, 2009 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, also wenn schon kompilieren dann auch nach assembler und nich nach c++. Anschliessend nen Assembler (z.B Flat Assembler) drüberlaufen lassen.

@Maxx: das is doch assembler, oder nich? Kein Maschinencode.

Grob zusammengefasst:
- lies das Compiler Bau buch von Niklaus Wirth
- durchforste wikipedia( Rolling Eyes ) nach Lexer, Parser, Token sowie finit state automaten.
- Assembler lernen wär nich schlecht^^

lg
ComNik
WIP: Vorx.Engine

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group