Deutsch
Assembler Forum

BoolFunc

 

Michael
Wodrich
Irgendwas klemmt da, ich bekomme das Teil leider nicht compiliert.

Fehler in Zeile 120 wegen fehlendem ENDIF.

Hier die BoolFunc.prf
(versucht mit XPSE v0.1.52 und XPIA v2.1 aus XPrfEdit)

editiert: 
...weiter unten findet sich eine funktionierende Version.
Auch im Downloadbereich unter BoolFunc.zip zu finden.

KompilierenMarkierenSeparieren
Bool
by Michael Wodrich
Von der Schaltalgebra inspiriert habe ich für XProfan
(in Zusammenarbeit mit XPIA/XPSE) eine Funktion gebastelt
die alle Schaltzustände beherrscht.
Ich hoffe, daß die überall zusammengesuchten Bezeichnungen
der Zustände einigermaßen zutreffend sind.
Ich habe keine Ahnung warum es zwei IMP gibt und welches
davon in BASIC benutzt wird. Vielleicht schafft da mal ein
Wissender etwas Klarheit.
 {$cle}

Proc Bool

    Parameters A&, B&, Modus%
    Declare Ergebnis&
    Modus% = Modus% Mod 16  reduziert den Modus auf 0..15

    If Modus% = 0

        0  #  FALSE  #  Kontradiktion
        Ergebnis& = 0

    ElseIf Modus% = 1

        A & B  #  Konjunktion  #  AND  #  binäre Multiplikation

        AsmStart Bool1(A&,B&)

            mov eax,para1
            mov ebx,para2
            and eax,ebx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 2

        A & !B  #  Inhibition  #  Funktion des indirekten Durchschnitts

        AsmStart Bool2(A&,B&)

            mov eax,para1
            mov ebx,para2
            not ebx
            and eax,ebx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 3

        A  #  Transfer  #  quasi-gewöhnliche Form
        Ergebnis& = A&

    ElseIf Modus% = 4

        !A & B  #  Inhibition  #  Funktion des indirekten Durchschnitts

        AsmStart Bool4(A&,B&)

            mov eax,para1
            mov ebx,para2
            not eax
            and eax,ebx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 5

        B  #  Transfer  #  quasi-gewöhnliche Form
        Ergebnis& = B&

    ElseIf Modus% = 6

        (!A & B) | (A & !B)  #  Antivalenz  #  XOR  #  binäre Addition  #  (Zeichen: Plus im Kreis)

        AsmStart Bool6(A&,B&)

            mov  edx,para1
            mov  ebx,para2
            push edx
            push ebx
            not  ebx
            and  edx,ebx
            pop  ebx
            pop  eax
            not  eax
            and  eax,ebx
            or   eax,edx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 7

        A | B  #  Disjunktion  #  OR

        AsmStart Bool7(A&,B&)

            mov eax,para1
            mov ebx,para2
            or  eax,ebx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 8

        !(A | B)  #  Funktion von Peirce  #  NOR  #  inklusive inverse Funktion

        AsmStart Bool8(A&,B&)

            mov eax,para1
            mov ebx,para2
            or  eax,ebx
            not eax

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 9

        (!A | B) & (A | !B)  #  Äquivalenz  #  EQV; (A <-> B)  #  (Zeichen= 3 waagerechte Striche)

        AsmStart Bool9(A&,B&)

            mov  edx,para1
            mov  ebx,para2
            push edx
            push ebx
            not  ebx
            or   edx,ebx
            pop  ebx
            pop  eax
            not  eax
            or   eax,ebx
            and  eax,edx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 10

        !B  #  Negation oder Komplement (quasi-gewöhnliche Form)

        AsmStart BoolA(B&)

            mov eax,para1
            not eax

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 11

        A | !B  #  IMP  #  Implikation  #  (A -> B)

        AsmStart BoolB(A&,B&)

            mov eax,para1
            mov ebx,para2
            not ebx
            or  eax,ebx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 12

        !A  #  Negation oder Komplement (quasi-gewöhnliche Form)

        AsmStart BoolC(A&)

            mov eax,para1
            not eax

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 13

        !A | B  #  IMP  #  Implikation  #  (A <- B)

        AsmStart BoolD(A&,B&)

            mov eax,para1
            mov ebx,para2
            not eax
            or  eax,ebx

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 14

        !(A & B)  #  Funktion von Sheffer  #  NAND  #  inverse Durchschnittbildung

        AsmStart BoolE(A&,B&)

            mov eax,para1
            mov ebx,para2
            and eax,ebx
            not eax

        AsmEnd(Ergebnis&)

    ElseIf Modus% = 15

        1  #  TRUE  #  Tautologie
        Ergebnis& = 1

    EndIf

EndProc

Cls
Set(Decimals,0)
Declare Wert1&,Wert2&,Erg&
Wert1& = 3
Wert2& = 5
Print A=,Bin$(Wert1&), und B=,Bin$(Wert2&);

WhileLoop 0,15

    Erg& = Bool( Wert1&, Wert2&, &loop)
    Print &loop;:,Bin$(Erg&)

EndWhile

WaitKey
End

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
12.12.2005  
 



Ich habe nur ganz ganz kurz drübergeschaut und konnte ermitteln das es mit asmend() nicht funzt, aber mit asmend ohne Klammerung.

Später schaue ichs mir genau an.
 
12.12.2005  
 




Frank
Abbing
Hi,

ich habs getestet. Der Fehler kommt von XPSE, schon bevor XPIA gestartet wird. Das fehlende ENDIF bezieht sich ja auf den Profancode.
XPIA jedenfalls erstellt den Assemblercode und die Dll richtig. Dort kann ich keinen Fehler entdecken.

@iF: Ich sehe keine leeren Klammern...
 
12.12.2005  
 




Frank
Abbing
Nochmal ich.

Hier der erstellte neue Profancode. Funzt komischerweise, auch mit XPSE bearbeitet...
KompilierenMarkierenSeparieren
________________________________________________________________________________________________________________
Generiert mit XPIA © Frank Abbing (http://fabbing.de)
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Übersetzte Datei: D:PROGRAMMEXPIAexamples	est.enh
Declare xpia_#,xpia$,expia&
Dim xpia_#,2048
Clear xpia_#
Long xpia_#,0=9460301,3,4,65535,184,0,64,0,0,0,0,0,0,0,0,176,247078670,-855002112,1275181089,1750344141,1881174889,1919381362,1663069537,1869508193,1700929652,1853190688,544106784,542330692,1701080941,168627502,36,0,-564840227
Long xpia_#,132=-1925490279,-1925490279,-1925490279,-1926661787,-1925490280,-1926740457,-1925490273,1751345490,-1925490279,0,0,17744,131404,1134402074,0,0,554565856,201654539,1024,512,0,4164,4096,8192,268435456,4096,512,4,0,4
Long xpia_#,252=0,12288,512,0,2,1048576,4096,1048576,4096,0,16,4848,246,4772,40,0,0,0,0,0,0,8192,84,0,0,0,0,0,0,0,0,0,0,0,0,4096,8,0,0,0,0,0,0,1297301837,12851,998,4096,1024,512,0,0,0,-536870880,1818587694,25455,88,8192,512,1536
Long xpia_#,488=0,0,0,1107296320,0,0,4820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1192457387,1,836297,1206390634,-16777214,93259893,268439560,-1895008769,1051653,276168464,269485455,1979650048,335908628,-15728624,93263989,268439576
Long xpia_#,644=-1893960193,1055749,544603920,270534031,1979650048,604344100,-15728624,93268085,268439592,-1892911617,1059845,813039376,271582607,1979650048,872779572,-15728624,93272181,268439608,-1891863041,1063941,1081474832
Long xpia_#,728=272631183,1438846976,-997987189,-62535684,2,-40984,269001215,495652864,268439564,-1026964701,-1957363704,-54230036,50087367,-402653184,-196,1050785,203262736,-149946352,-909958189,1426065602,-997987189,-62535684
Long xpia_#,816=2,-59416,269001215,495652864,268439564,-1021062921,574153,-2081649835,1170734276,764,-17635328,361496575,268439560,269229451,1397886976,-752626697,-789096357,-1039416541,574153,-2081649835,1170734276,764,-20781056
Long xpia_#,908=144834559,-1961885680,1051677,-909964528,1426065602,-997987189,-62535684,2,-90136,269001215,495652864,268439564,-789069045,574153,-2081649835,1170734276,764,-25499648,361496575,268439560,269229451,1397886976,-754199561
Long xpia_#,1000=-789096357,-1037843701,574153,-2081649835,1170734276,508,-28645376,144834559,-149946352,79874512,-326413056,-939735933,195653,770179072,-1577058306,268439560,269229451,-738783232,-1026964725,-1957363704,-54230036
Long xpia_#,1084=33310151,-402653184,-504,1050785,-909052144,1426064578,-997987189,-62535684,2,-136216,269001215,495652864,268439564,-1022635785,574153,-2081649835,1170734276,764,-37296128,144834559,-1961885680,1051677,-138206448
Long xpia_#,1176=146983376,637520896,268439552,4812,0,0,4834,4096,0,0,0,0,0,4820,0,1699152177,1937331060,1869377347,1937047666,842232421,1819042862,0,0,1134402074,0,5008,1,12,12,4888,4936,4984,4319,4354,4391,4428,4476,4511,4548
Long xpia_#,1332=4596,4625,4662,4691,4728,5022,5028,5034,5040,5046,5052,5058,5064,5070,5076,5082,5088,65536,196610,327684,458758,589832,720906,1936028767,1852137332,1818504808,1866596460,3239023,1819242306,1866596402,3435631
Long xpia_#,1456=1819242306,1866596406,3632239,1819242306,1866596408,3763311,1819242306,1866596449,6450287,1819242306,1866596451,6581359,1819242306,101,0,0,0,0,0,0,4096,84,811937884,813117550,814297216,815476882,816656548,817836214
Long xpia_#,1568=819015880,821178586,823472376,825897243,828387648,831467878,833761685,836252088,839332318,841626148,845558345,847983212,849359505,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Long xpia_#,1776=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
xpia$=$TempDir+/_test_enh.dll
FileMode 1
Assign #1,xpia$
OpenRW #1
BlockWrite #1,xpia_#,0,2048
CloseRW #1
Dispose xpia_#
~~~~~~~~~~

PROC BOOL

    PARAMETERS A&, B&, MODUS%
    DECLARE ERGEBNIS&
    MODUS%=MODUS% MOD 16

    IF MODUS%=0

        ERGEBNIS&=0

    ELSEIF MODUS%=1

        ERGEBNIS&=External(xpia$,Bool1,A&,B&)

    Elseif Modus% = 2

        ERGEBNIS&=External(xpia$,Bool2,A&,B&)

    Elseif Modus% = 3

        Ergebnis& = A&

    Elseif Modus% = 4

        ERGEBNIS&=External(xpia$,Bool4,A&,B&)

    Elseif Modus% = 5

        Ergebnis& = B&

    Elseif Modus% = 6

        ERGEBNIS&=External(xpia$,Bool6,A&,B&)

    Elseif Modus% = 7

        ERGEBNIS&=External(xpia$,Bool7,A&,B&)

    Elseif Modus% = 8

        ERGEBNIS&=External(xpia$,Bool8,A&,B&)

    Elseif Modus% = 9

        ERGEBNIS&=External(xpia$,Bool9,A&,B&)

    Elseif Modus% = 10

        ERGEBNIS&=External(xpia$,Boola,B&)

    Elseif Modus% = 11

        ERGEBNIS&=External(xpia$,Boolb,A&,B&)

    Elseif Modus% = 12

        ERGEBNIS&=External(xpia$,Boolc,A&)

    Elseif Modus% = 13

        ERGEBNIS&=External(xpia$,Boold,A&,B&)

    Elseif Modus% = 14

        ERGEBNIS&=External(xpia$,Boole,A&,B&)

    Elseif Modus% = 15

        Ergebnis& = 1

    Endif

Endproc

Cls
Set(Decimals,0)
Declare Wert1&,Wert2&,Erg&
Wert1& = 3
Wert2& = 5
Print A=,Bin$(Wert1&), und B=,Bin$(Wert2&);

Whileloop 0,15

    Erg& = Bool( Wert1&, Wert2&, &Loop)
    Print &Loop;:,Bin$(Erg&)

Endwhile

Waitkey
End
 
12.12.2005  
 



...asmend ohne Klammerung...

nicht leere Klammer, ohne...
 
12.12.2005  
 




Frank
Abbing
Hi,

sehe ich auch nicht, ASMEND ohne Klammerung...
Kannst du schon sagen, was schief läuft?
 
12.12.2005  
 



asmend ohne Klammerung... funzt - mit Klammerung jedoch nicht.

Du hattest die AsmEnd-Klammerung zwar erfunden (welche ich auch sehr begrüße) - aber das heißt leider nicht gleich das der XPSE auch mit klar kommt. Leider!

Ich werde hier wohl debuggen müssen.
 
12.12.2005  
 




Michael
Wodrich
Selbst wenn ich mit Parameters und Return arbeite und ein fertiges Programm zusammenbekomme:
Die Ergebnisse sind leider nicht die erwarteten...
 
Programmieren, das spannendste Detektivspiel der Welt.
13.12.2005  
 




Frank
Abbing
Michael Wodrich
Selbst wenn ich mit Parameters und Return arbeite und ein fertiges Programm zusammenbekomme:
Die Ergebnisse sind leider nicht die erwarteten...


Sehe ich ähnlich. Bei meinen Tests funktioniereten die neuen Klammern überall. XPSE kam damit sofort zurecht, sonst hätte ich die neue XPIA-Version ja noch gar nicht gepostet.
Der Fehler muss doch noch woanders passieren.
 
13.12.2005  
 




Michael
Wodrich
Ich bin zwar mit den Ergebnissen immer noh nicht zufrieden, aber wenn man auch der PROC ein Return gönnt bekommt man immerhin etwas zu sehen.
KompilierenMarkierenSeparieren
xpse v0.1.5.2, xpia v2.1
Bool
by Michael Wodrich
Von der Schaltalgebra inspiriert habe ich für XProfan
(in Zusammenarbeit mit XPIA/XPSE) eine Funktion gebastelt
die alle Schaltzustände beherrscht.
Ich hoffe, daß die überall zusammengesuchten Bezeichnungen
der Zustände einigermaßen zutreffend sind.
Ich habe keine Ahnung warum es zwei IMP gibt und welches
davon in BASIC benutzt wird. Vielleicht schafft da mal ein
Wissender etwas Klarheit.
 {$cle}

Proc Bool

    Parameters A&, B&, Modus%
    Declare Ergebnis&
    Modus% = Modus% Mod 16  reduziert den Modus auf 0..15

    If Modus% = 0

        0  #  FALSE  #  Kontradiktion
        Ergebnis& = 0

    ElseIf Modus% = 1

        A & B  #  Konjunktion  #  AND  #  binäre Multiplikation

        AsmStart Bool1

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            and eax,ebx

        AsmEnd

    ElseIf Modus% = 2

        A & !B  #  Inhibition  #  Funktion des indirekten Durchschnitts

        AsmStart Bool2

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            not ebx
            and eax,ebx

        AsmEnd

    ElseIf Modus% = 3

        A  #  Transfer  #  quasi-gewöhnliche Form
        Ergebnis& = A&

    ElseIf Modus% = 4

        !A & B  #  Inhibition  #  Funktion des indirekten Durchschnitts

        AsmStart Bool4

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            not eax
            and eax,ebx

        AsmEnd

    ElseIf Modus% = 5

        B  #  Transfer  #  quasi-gewöhnliche Form
        Ergebnis& = B&

    ElseIf Modus% = 6

        (!A & B) | (A & !B)  #  Antivalenz  #  XOR  #  binäre Addition  #  (Zeichen: Plus im Kreis)

        AsmStart Bool6

            Parameters A&,B&
            Return Ergebnis&
            mov  edx,para1
            mov  ebx,para2
            push edx
            push ebx
            not  ebx
            and  edx,ebx
            pop  ebx
            pop  eax
            not  eax
            and  eax,ebx
            or   eax,edx

        AsmEnd

    ElseIf Modus% = 7

        A | B  #  Disjunktion  #  OR

        AsmStart Bool7

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            or  eax,ebx

        AsmEnd

    ElseIf Modus% = 8

        !(A | B)  #  Funktion von Peirce  #  NOR  #  inklusive inverse Funktion

        AsmStart Bool8

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            or  eax,ebx
            not eax

        AsmEnd

    ElseIf Modus% = 9

        (!A | B) & (A | !B)  #  Äquivalenz  #  EQV; (A <-> B)  #  (Zeichen= 3 waagerechte Striche)

        AsmStart Bool9

            Parameters A&,B&
            Return Ergebnis&
            mov  edx,para1
            mov  ebx,para2
            push edx
            push ebx
            not  ebx
            or   edx,ebx
            pop  ebx
            pop  eax
            not  eax
            or   eax,ebx
            and  eax,edx

        AsmEnd

    ElseIf Modus% = 10

        !B  #  Negation oder Komplement (quasi-gewöhnliche Form)

        AsmStart BoolA

            Parameters B&
            Return Ergebnis&
            mov eax,para1
            not eax

        AsmEnd

    ElseIf Modus% = 11

        A | !B  #  IMP  #  Implikation  #  (A -> B)

        AsmStart BoolB

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            not ebx
            or  eax,ebx

        AsmEnd

    ElseIf Modus% = 12

        !A  #  Negation oder Komplement (quasi-gewöhnliche Form)

        AsmStart BoolC

            Parameters A&
            Return Ergebnis&
            mov eax,para1
            not eax

        AsmEnd

    ElseIf Modus% = 13

        !A | B  #  IMP  #  Implikation  #  (A <- B)

        AsmStart BoolD

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            not eax
            or  eax,ebx

        AsmEnd

    ElseIf Modus% = 14

        !(A & B)  #  Funktion von Sheffer  #  NAND  #  inverse Durchschnittbildung

        AsmStart BoolE

            Parameters A&,B&
            Return Ergebnis&
            mov eax,para1
            mov ebx,para2
            and eax,ebx
            not eax

        AsmEnd

    ElseIf Modus% = 15

        1  #  TRUE  #  Tautologie
        Ergebnis& = 1

    EndIf

    Return Ergebnis&

EndProc

Cls
Set(Decimals,0)
Declare Wert1&,Wert2&,Erg&
Wert1& = %00001111
Wert2& = %01010101
Print A=,Bin$(Wert1&), und B=,Bin$(Wert2&);

WhileLoop 0,15

    Erg& = Bool( Wert1&, Wert2&, &loop)
    Print &loop;:,Bin$(Erg&)

EndWhile

WaitKey
End
 
Programmieren, das spannendste Detektivspiel der Welt.
13.12.2005  
 




Michael
Wodrich
Korrektur: bei Modus 15 muß natürlich -1 stehen.

Wenn man dann noch unten in die Testschleife folgendes einsetzt:
KompilierenMarkierenSeparieren
Print &loop;:,Bin$(Erg&);tab(15);MyBin$(Erg&,16,4)

und die folgende Funktion mit aufnimmt:
KompilierenMarkierenSeparieren
Proc MyBin$

    If %PCount > 2

        Parameters Wert&,Laenge%,Grp%

    Else

        Parameters Wert&,Laenge%
        Declare Grp%
        Grp% = 64

    EndIf

    Declare Ergebnis$,Maske&,GrpCnt%
    Clear Ergebnis$
    Maske& = 1
    GrpCnt% = Grp%

    While Laenge%

        Dec Laenge%
        Dec GrpCnt%
        Ergebnis$ = @If(Wert& & Maske&,1,0) + Ergebnis$

        If (GrpCnt% = 0) and (Laenge% > 0)

            Ergebnis$ = Chr$(32) + Ergebnis$
            GrpCnt% = Grp%

        EndIf

        Maske& = Maske& << 1

    EndWhile

    Return Ergebnis$

EndProc


...dann wird das Ganze auch etwas klarer.

Man sollte halt nicht direkt nach einer Nachtschicht versuchen Programme zu schreiben.

Schöne Grüße
Michael Wodrich

P.S.: für unseren Download-Bereich habe ich das Teil als ZIP angehängt.

261 kB
Kurzbeschreibung: Bool als Source + EXE
Hochgeladen:13.12.2005
Ladeanzahl41
Herunterladen
 
Programmieren, das spannendste Detektivspiel der Welt.
13.12.2005  
 



Mal für den stumpfen iF - hat sich die Problematik in Luft aufgelöst?
 
13.12.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.638 Betrachtungen

Unbenanntvor 0 min.
GDL23.07.2015
Michael Borowiak07.12.2011

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Michael Wodrich (5x)
iF (5x)
Frank Abbing (4x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie