English
Assembler Forum

BoolFunc

 
- Page 1 -



Michael
Wodrich
Irgendwas klemmt there, I get the part unfortunately not compiliert.

Error in line 120 because of fehlendem ENDIF.

here The BoolFunc.prf
(attempts with XPSE v0.1.52 and XPIA v2.1 from XPrfEdit)

edited: 
...below finds itself a working Version.
too in the Download Area under BoolFunc.zipper to find.

CompileMarkSeparation
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&)

<
s=s4 href='./../../Function-References/XProfan/endwhile/'>EndWhile WaitKey End

Best wishes
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
12/12/05  
 



 
- Page 1 -



Frank
Abbing
Hi,

I habs tested. The Error comes of XPSE, already before XPIA launched becomes. the fehlende ENDIF relating itself Yes on the Profancode.
XPIA anyway prepares whom Assemblercode and the Dll correctly.. there can I none Error discover.

@iF: I see no clear clinging...
 
12/12/05  
 




Frank
Abbing
Nochmal I.

here the erstellte new Profancode. working komischerweise, too with XPSE machine...
CompileMarkSeparation
________________________________________________________________________________________________________________
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/05  
 



...asmend without Klammerung...

not vain Klammer, without...
 
12/12/05  
 




Frank
Abbing
Hi,

see so did i not, ASMEND without Klammerung...
can you already say, what schief runs?
 
12/12/05  
 



asmend without Klammerung... working - with Klammerung however not.

you had The AsmEnd-Klammerung of course made up (which so did i very begrüße) - but that is unfortunately not same the the XPSE too with clear comes. unfortunately!

i'll here well debuggen must.
 
12/12/05  
 




Michael
Wodrich
even if I with Parameters and Return work and a fertiges Program zusammenbekomme:
The Results are unfortunately not The expected...
 
Programmieren, das spannendste Detektivspiel der Welt.
12/13/05  
 




Frank
Abbing
Michael Wodrich
even if I with Parameters and Return work and a fertiges Program zusammenbekomme:
The Results are unfortunately not The expected...


see I similar. with my Tests funktioniereten The new clinging everywhere. XPSE coming so immediate zurecht, otherwise had I the new XPIA-Version Yes yet none posted.
The Error must still elsewhere occur.
 
12/13/05  
 




Michael
Wodrich
i'm of course with the Ergebnissen always noh not pleased, but if one too the PROC one Return gönnt get one still something To see.
CompileMarkSeparation
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
class=s2>) EndWhile WaitKey End
 
Programmieren, das spannendste Detektivspiel der Welt.
12/13/05  
 




Michael
Wodrich
Korrektur: with mode 15 must naturally -1 stand.

If one then yet under into Testschleife the following einsetzt:
CompileMarkSeparation
Print &loop;:,Bin$(Erg&);tab(15);MyBin$(Erg&,16,4)
>

and the following function with aufnimmt:
CompileMarkSeparation
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


...then The whole thing is something klarer.

one ought to hold not directly after a night shift try programs To write.

Best wishes
Michael Wodrich

P.s.: for our Download-area have I the part as ZIP appended.

261 kB
Kurzbeschreibung: Bool as Source + EXE
Hochgeladen:12/13/05
Downloadcounter41
Download
 
Programmieren, das spannendste Detektivspiel der Welt.
12/13/05  
 



time for stumpfen iF - has The Problematik in breeze aufgelöst?
 
12/13/05  
 



 
- Page 2 -



Michael
Wodrich
No not integrally.

I had for Ergebnisrückgabe solely one Return forget.

The problem is first fixed, if itself too the first Codebeispiel fehlerfrei compilieren can. If still händisch the Return nachgetragen becomes, then should too The Results correctly rüberkommen (with mode 15 must yet The 1 in less 1 changed go).

If the runs is again everything in the Lot.

Best wishes
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
12/13/05  
 



hmkey
 
12/14/05  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

no Systemprofil laid out. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Please register circa a Posting To verfassen.
 

Topic-Options

2.621 Views

Untitledvor 0 min.
GDL07/23/15
Michael Borowiak12/07/11

Themeninformationen



Admins  |  AGB  |  Applications  |  Authors  |  Chat  |  Privacy Policy  |  Download  |  Entrance  |  Help  |  Merchantportal  |  Imprint  |  Mart  |  Interfaces  |  SDK  |  Services  |  Games  |  Search  |  Support

One proposition all XProfan, The there's!


My XProfan
Private Messages
Own Storage Forum
Topics-Remember-List
Own Posts
Own Topics
Clipboard
Log off
 Deutsch English Français Español Italia
Translations

Privacy Policy


we use Cookies only as Session-Cookies because of the technical necessity and with us there no Cookies of Drittanbietern.

If you here on our Website click or navigate, stimmst You ours registration of Information in our Cookies on XProfan.Net To.

further Information To our Cookies and moreover, How You The control above keep, find You in ours nachfolgenden Datenschutzerklärung.


all rightDatenschutzerklärung
i want none Cookie