Stackmaschine & Assembler 0.7 & Basic Compiler 0.7
Übersicht

Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
PreAsm
Input: Code: [AUSKLAPPEN] Wert1 dw 10 Wert2 dw 20 Wert_3 dw 30 Array dw 50 dup ArrayII dw 10 dup T equ 200 Test: AStor T Test2: jmp Test2 AStor Wert1 AStor Wert2 AStor Wert_3 Astor ArrayII Ouput: Code: [AUSKLAPPEN] Wert1 dw 10 Wert2 dw 20 Wert_3 dw 30 Array dw 50 dup ArrayII dw 10 dup T equ 200 Test: AStor 200 Test2: jmp 2 AStor 0 AStor 1 AStor 2 Astor 53 Code: [AUSKLAPPEN] Const BezeichnerTeil1$="abcdefghijklmnopqrstuvwxyzöäüß_" Const BezeichnerTeil2$=BezeichnerTeil1$+"0123456789" Const cPush = 1 Const cPop = 2 Const cDbl = 3 Const cSwap = 4 Const cMul = 5 Const cDiv = 6 Const cSub = 7 Const cAdd = 8 Const cNeg = 9 Const cIncr =10 Const cDecr =11 Const cAnd =12 Const cNot =13 Const cOr =14 Const cXor =15 Const cCall =16 Const cRet =17 Const cJmp =18 Const cJle =19 Const cAStor =20 Const cALoad =21 Const cStor =22 Const cLoad =23 Const cInt =24 Const MaxVMBefehle=24 Global CodeName$[MaxVMBefehle] Global BefehlLang[MaxVMBefehle] CodeName[cPush] = "push" CodeName[cPop] = "pop" CodeName[cDbl] = "dbl" CodeName[cSwap] = "swap" CodeName[cMul] = "mul" CodeName[cDiv] = "div" CodeName[cSub] = "sub" CodeName[cAdd] = "add" CodeName[cNeg] = "neg" CodeName[cIncr] = "incr" CodeName[cDecr] = "decr" CodeName[cAnd] = "and" CodeName[cNot] = "not" CodeName[cOr] = "or" CodeName[cXor] = "xor" CodeName[cCall] = "call" CodeName[cRet] = "ret" CodeName[cJmp] = "jmp" CodeName[cJle] = "jle" CodeName[cAStor] = "astor" CodeName[cALoad] = "aload" CodeName[cStor] = "stor" CodeName[cLoad] = "load" CodeName[cInt] = "int" BefehlLang[cPush] = 2 BefehlLang[cPop] = 1 BefehlLang[cDbl] = 1 BefehlLang[cSwap] = 1 BefehlLang[cMul] = 1 BefehlLang[cDiv] = 1 BefehlLang[cSub] = 1 BefehlLang[cAdd] = 1 BefehlLang[cNeg] = 1 BefehlLang[cIncr] = 1 BefehlLang[cDecr] = 1 BefehlLang[cAnd] = 1 BefehlLang[cNot] = 1 BefehlLang[cOr] = 1 BefehlLang[cXor] = 1 BefehlLang[cCall] = 2 BefehlLang[cRet] = 1 BefehlLang[cJmp] = 2 BefehlLang[cJle] = 2 BefehlLang[cAStor] = 2 BefehlLang[cALoad] = 2 BefehlLang[cStor] = 1 BefehlLang[cLoad] = 1 BefehlLang[cInt] = 2 PreAsm "Vm.asm","Vm2.asm" WaitKey Const MaxNamen=1000 Global NamenP Global TName$[MaxNamen] Global TWert[MaxNamen] Function Exist(Bezeichner$) For P=0 To NamenP-1 If Lower$(Bezeichner$)=Lower$(TName[P]) Then Return P Next Return -1 End Function Function AddWert(Name$,Wert) TName[NamenP]=Name$ TWert[NamenP]=Wert NamenP=NamenP+1 End Function Function GetWert(P) Return Twert[P] End Function Function TestBezeichner(Bezeichner$) Lang=Len(Bezeichner$) If Lang=0 Then Return False If Instr(BezeichnerTeil1$,Mid$(Lower$(Bezeichner$),1,1))=0 Then Return False For P=2 To lang If Instr(BezeichnerTeil2$,Lower$(Mid$(Bezeichner$,P,1)))=0 Then Return False Next Return True End Function Function TestLabel(Bezeichner$) Lang=Len(Bezeichner$) If Lang<1 Then Return False If Instr(BezeichnerTeil1$,Lower$(Mid$((Bezeichner$),1,1)))=0 Then Return False For P=2 To lang-1 If Instr(BezeichnerTeil2$,Lower$(Mid$(Bezeichner$,P,1)))=0 Then Return False Next If Mid$(Bezeichner$,Lang,1)<>":" Then Return False Return True End Function Function TestZahl(S$) Slen=Len(S$) If Slen=0 Then Return False EndIf For P=1 To Slen If Instr("0123456789",Mid$(S$,P,1))=0 Then Return False Next Return True End Function Function Lower$(S$) Slen=Len(S) If Slen>0 Then For P=1 To Slen ASCII=Asc(Mid$(S$,P,1)) If Ascii>64 And Ascii<92 Then Ascii=Ascii+32 ElseIf Ascii=220 Then ;ü Ascii=252 ElseIf Ascii=196 Then ;ä Ascii=228 ElseIf Ascii=214 Then ;ö Ascii=246 End If R$=R$+Chr$(ASCII) Next Return R$ End If End Function Function PreAsm(InputFile$,OutputFile$) OutputNr=WriteFile(OutputFile$) If OutputNr=0 Then Return False InputNr=ReadFile(InputFile$) If InputNr=0 Then Return False While Not(Eof(InputNr)) Zeile$=ReadLine$(InputNr) ParameterZahl=ArgZahl(Zeile$) If ParameterZahl>0 Then If ArgTyp$(Zeile$,1)="z" Then BefehlGunden=False For BefehlNr=1 To MaxVMBefehle If Lower$(Arg$(Zeile$,1))=CodeName[BefehlNr] Then BefehlZeiger=BefehlZeiger+BefehlLang[BefehlNr] BefehlGunden=True EndIf Next If BefehlGunden=False Then If TestBezeichner(Arg$(Zeile$,1))=True Then If ParameterZahl>2 Then If ArgTyp$(Zeile$,2)="z" Then Select Lower$(Arg$(Zeile$,2)) Case "dw" If ParameterZahl=3 Then AddWert Arg$(Zeile$,1),DatenZeiger DatenZeiger=DatenZeiger+1 ElseIf ParameterZahl=4 Then If ArgTyp$(Zeile$,3)="z" Then If TestZahl(Arg(Zeile$,3))=True Then If ArgTyp$(Zeile$,4)="z" Then If Lower$(Arg(Zeile$,4))="dup" Then AddWert Arg$(Zeile$,1),DatenZeiger DatenZeiger=DatenZeiger+Int(Arg(Zeile$,3)) EndIf EndIf EndIf EndIf EndIf Case "equ" If ArgTyp$(Zeile$,3)="z" Then If TestZahl(Arg$(Zeile$,3))=True Then AddWert Arg$(Zeile$,1),Arg$(Zeile$,3) EndIf EndIf End Select EndIf EndIf ElseIf TestLabel(Arg$(Zeile$,1))=True Then AddWert Mid$(Arg$(Zeile$,1),1,Len(Arg$(Zeile$,1))-1),BefehlZeiger EndIf EndIf EndIf EndIf Wend CloseFile InputNr InputNr=ReadFile(InputFile$) If InputNr=0 Then Return False While Not(Eof(InputNr)) Zeile$=ReadLine$(InputNr) ParameterZahl=ArgZahl(Zeile$) If ParameterZahl>0 Then OZeile$=Arg$(Zeile$,1) For Zeiger=2 To ParameterZahl If ArgTyp$(Zeile$,Zeiger)="z" Then NameNr=Exist(Arg$(Zeile$,Zeiger)) If NameNr<>-1 Then OZeile$=OZeile$+" "+GetWert(NameNr) Else OZeile$=OZeile$+" "+Arg$(Zeile$,Zeiger) EndIf EndIf Next WriteLine OutputNr, OZeile$ EndIf Wend CloseFile Output CloseFile Input Return True End Function Function Arg$(Zeile$,Index) Lang=Len(Zeile$) P=1 Parameter$="" For P=P To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then For P=P+1 To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then Exit EndIf Parameter$=Parameter$+Mid$(Zeile$,P,1) Next ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="(" Then ParameterZahl=ParameterZahl+1 Parameter$="(" ElseIf Mid$(Zeile$,P,1)=")" Then ParameterZahl=ParameterZahl+1 Parameter$=")" ElseIf Mid$(Zeile$,P,1)="+" Then ParameterZahl=ParameterZahl+1 Parameter$="+" ElseIf Mid$(Zeile$,P,1)="-" Then ParameterZahl=ParameterZahl+1 Parameter$="-" ElseIf Mid$(Zeile$,P,1)="*" Then ParameterZahl=ParameterZahl+1 Parameter$="*" ElseIf Mid$(Zeile$,P,1)="/" Then ParameterZahl=ParameterZahl+1 Parameter$="/" ElseIf Mid$(Zeile$,P,1)="," Then ParameterZahl=ParameterZahl+1 Parameter$="," ElseIf Mid$(Zeile$,P,1)=";" Then Return "" ElseIf Mid$(Zeile$,P,1)=" " Then Parameter$="" ElseIf Mid$(Zeile$,P,1)="=" Then ParameterZahl=ParameterZahl+1 If P<Lang Then If Mid$(Zeile$,P+1,1)=">" Then Parameter$="=>" P=P+1 ElseIf Mid$(Zeile$,P+1,1)="<" Then Parameter$="=<" P=P+1 Else Parameter$="=" EndIf Else Parameter$="=" EndIf ElseIf Mid$(Zeile$,P,1)=">" Then ParameterZahl=ParameterZahl+1 If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then Parameter$="=>" P=P+1 Else Parameter$=">" EndIf Else Parameter$=">" EndIf ElseIf Mid$(Zeile$,P,1)="<" Then ParameterZahl=ParameterZahl+1 If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then Parameter$="=<" P=P+1 Else Parameter$="<" EndIf Else Parameter$="<" EndIf Else Parameter$="" ParameterZahl=ParameterZahl+1 For P=P To lang If Mid$(Zeile$,P,1)=" " Then Exit ElseIf Mid$(Zeile$,P,1)="(" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=")" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="+" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="-" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="*" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="/" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="," Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="=" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=">" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="<" Then P=P-1 Exit Else Parameter$=Parameter$+Mid$(Zeile$,P,1) EndIf Next EndIf If Index=ParameterZahl Then Return Parameter$ Next End Function Function ArgZahl(Zeile$) Lang=Len(Zeile$) P=1 For P=P To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then For P=P+1 To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then Exit EndIf Next ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="(" Then ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)=")" Then ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="+" Then ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="-" Then ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="*" Then ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="/" Then ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="," Then ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)=";" Then Return ParameterZahl ElseIf Mid$(Zeile$,P,1)=" " Then ElseIf Mid$(Zeile$,P,1)="=" Then ParameterZahl=ParameterZahl+1 If P<Lang Then If Mid$(Zeile$,P+1,1)=">" Then P=P+1 ElseIf Mid$(Zeile$,P+1,1)="<" Then P=P+1 EndIf EndIf ElseIf Mid$(Zeile$,P,1)=">" Then ParameterZahl=ParameterZahl+1 If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then P=P+1 EndIf EndIf ElseIf Mid$(Zeile$,P,1)="<" Then ParameterZahl=ParameterZahl+1 If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then P=P+1 EndIf EndIf Else ParameterZahl=ParameterZahl+1 For P=P To lang If Mid$(Zeile$,P,1)=" " Then Exit ElseIf Mid$(Zeile$,P,1)="(" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=")" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="+" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="-" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="*" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="/" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="," Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="=" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=">" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="<" Then P=P-1 Exit EndIf Next EndIf Next Return ParameterZahl End Function Function ArgTyp$(Zeile$,Index) Lang=Len(Zeile$) P=1 For P=P To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then For P=P+1 To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then Exit EndIf Next ParameterTyp$="$" ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="(" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" ElseIf Mid$(Zeile$,P,1)=")" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" ElseIf Mid$(Zeile$,P,1)="+" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" ElseIf Mid$(Zeile$,P,1)="-" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" ElseIf Mid$(Zeile$,P,1)="*" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" ElseIf Mid$(Zeile$,P,1)="/" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" ElseIf Mid$(Zeile$,P,1)="," Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" ElseIf Mid$(Zeile$,P,1)=";" Then Return "" ElseIf Mid$(Zeile$,P,1)=" " Then ElseIf Mid$(Zeile$,P,1)="=" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" If P<Lang Then If Mid$(Zeile$,P+1,1)=">" Then P=P+1 ElseIf Mid$(Zeile$,P+1,1)="<" Then P=P+1 EndIf EndIf ElseIf Mid$(Zeile$,P,1)=">" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then P=P+1 EndIf EndIf ElseIf Mid$(Zeile$,P,1)="<" Then ParameterZahl=ParameterZahl+1 ParameterTyp$="#" If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then P=P+1 EndIf EndIf Else ParameterZahl=ParameterZahl+1 ParameterTyp$="z" For P=P To lang If Mid$(Zeile$,P,1)=" " Then Exit ElseIf Mid$(Zeile$,P,1)="(" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=")" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="+" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="-" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="*" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="/" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="," Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="=" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=">" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="<" Then P=P-1 Exit EndIf Next EndIf If Index=ParameterZahl Then Return ParameterTyp$ EndIf Next End Function Function ArgTyps$(Zeile$) Lang=Len(Zeile$) P=1 For P=P To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then For P=P+1 To Lang If Mid$(Zeile$,P,1)=Chr$(34) Then Exit EndIf Next ParameterTyp$=ParameterTyp$+"$" ParameterZahl=ParameterZahl+1 ElseIf Mid$(Zeile$,P,1)="(" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" ElseIf Mid$(Zeile$,P,1)=")" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" ElseIf Mid$(Zeile$,P,1)="+" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" ElseIf Mid$(Zeile$,P,1)="-" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" ElseIf Mid$(Zeile$,P,1)="*" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" ElseIf Mid$(Zeile$,P,1)="/" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" ElseIf Mid$(Zeile$,P,1)="," Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" ElseIf Mid$(Zeile$,P,1)=";" Then Return ParameterTyp$ ElseIf Mid$(Zeile$,P,1)=" " Then ElseIf Mid$(Zeile$,P,1)="=" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" If P<Lang Then If Mid$(Zeile$,P+1,1)=">" Then P=P+1 ElseIf Mid$(Zeile$,P+1,1)="<" Then P=P+1 EndIf EndIf ElseIf Mid$(Zeile$,P,1)=">" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then P=P+1 EndIf EndIf ElseIf Mid$(Zeile$,P,1)="<" Then ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"#" If P<Lang Then If Mid$(Zeile$,P+1,1)="=" Then P=P+1 EndIf EndIf Else ParameterZahl=ParameterZahl+1 ParameterTyp$=ParameterTyp$+"z" For P=P To lang If Mid$(Zeile$,P,1)=" " Then Exit ElseIf Mid$(Zeile$,P,1)="(" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=")" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="+" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="-" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="*" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="/" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="," Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="=" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)=">" Then P=P-1 Exit ElseIf Mid$(Zeile$,P,1)="<" Then P=P-1 Exit EndIf Next EndIf Next Return ParameterTyp$ End Function |
||
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0 |
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BlitzBasicVM und Assembler
Basic Code: [AUSKLAPPEN] Const Print, 1 Const End, 2 call Test 10,20,3 Int End Sub Test var1, var2, var3 Mul Var1, Var2 Int Print, var1 add Var1,var3 Int Print,var1 exitsub Div Var,var2 End sub Basic im Asm Code: [AUSKLAPPEN] ;Const Print, 1 ;Const End, 2 ;call Test 10,20,3 Push 3 Push 20 Push 10 Call Test ;Int End Int 2 ;Sub Test var1, var2, var3 Test: AStor var1 AStor var2 AStor var3 var1 dw 0 var2 dw 0 var3 dw 0 ; Mul Var1, Var2 Aload Var1 Aload Var2 Mul AStor Var1 ; Int Print, var1 Aload var1 Int 1 ; add Var1,var3 Aload Var1 Aload var3 Add AStor Var1 ; Int Print,var1 Aload var1 Int 1 Ret ; Div Var,var2 Aload Var Aload var2 Div AStor Var Ret PreAssembler verarbeitung Code: [AUSKLAPPEN] Push 3 Push 20 Push 10 Call 10 Int 2 Test: AStor 0 AStor 1 AStor 2 var1 dw 0 var2 dw 0 var3 dw 0 Aload 0 Aload 1 Mul AStor 0 Aload 0 Int 1 Aload 0 Aload 2 Add AStor 0 Aload 0 Int 1 Ret Aload Var Aload 1 Div AStor Var Ret Ausgabe Code: [AUSKLAPPEN] 200 203 BlitzBasicVM und Assembler ver. 2 Neu -Function SuperAssembler Code: [AUSKLAPPEN] [Befehlsliste vom Assembler] Const1 equ 100 Const2 equ ? Const3 equ Const4 equ Name dw 100 dd 120 db 140 dw ? dd ? db ? dw 10 dup dd 12 dup db 14 dup dw 10 dup(?) dd 12 dup(?) db 14 dup(?) dw 10 dup(49) dd 12 dup(50) db 14 dup(51) dw 10 dup("a") dd 12 dup("b") db 14 dup("c") String "Test" String*10="Test2" Var1 dw Var2 dd Var3 db Var1 dw ? Var2 dd ? Var3 db ? Var1 dw 1 Var2 dd 2 Var3 db 3 Var1 dw 10 dup Var2 dd 20 dup Var3 db 30 dup Var1 dw 10 dup(10) Var2 dd 20 dup(11) Var3 db 30 dup(12) Var1 dw 10 dup(?) Var2 dd 20 dup(?) Var3 db 30 dup(?) Var1 dw 10 dup("a") Var2 dd 20 dup("b") Var3 db 30 dup("c") Label: |
||
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0 |
![]() |
PlasmaBetreff: hmm |
![]() Antworten mit Zitat ![]() |
---|---|---|
ob es jemals weitergeht ....? | ||
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Weder der Compiler, noch der Assembler noch die BlitzBasicVM wird weiter entwickelt. Es wird aber eine andere Programmiersprache geben, die in C++ implemtiert ist. http://rapidshare.com/files/10...r.zip.html |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group