kolibrios/programs/develop/SPForth/src/macroopt.f
Kirill Lipatov (Leency) 09488af869 KolSPForth12 uploaded to SVN
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-04-21 19:22:58 +00:00

5062 lines
138 KiB
Forth

\ Îïòèìèçèðóþùèé ìàêðîïîäñòàíîâøèê Ìàêñèìîâ Ì.Î.
\ http://wiki.forth.org.ru/optimizer
[UNDEFINED] C>S
[IF]
: C>S ( c -- n ) 0xFF AND [ 0x7F INVERT ] LITERAL XOR 0x80 + ;
[THEN]
BASE @ HEX
\ : REL! ( ADDR' ADDR -- )
\ TUCK - SWAP ! ;
: REL@ ( ADDR -- ADDR' )
DUP @ + ;
\ FALSE VALUE OPT?
TRUE VALUE OPT?
084 VALUE J_COD
: SET-OPT TRUE TO OPT? ;
: DIS-OPT FALSE TO OPT? ;
INLINEVAR
[IF]
0x20 VALUE MM_SIZE
0 VALUE OFF-EBP
0 VALUE OFF-EAX
0 VALUE :-SET
0 VALUE J-SET
0 VALUE LAST-HERE
0x44 CELLS DUP CONSTANT OpBuffSize
CREATE OP0 HERE >T DUP , 0 , SWAP ALLOT
DUP OpBuffSize + CELL- CONSTANT OPLast
CELL+ DUP CONSTANT OP1
CELL+ DUP CONSTANT OP2
CELL+ DUP CONSTANT OP3
CELL+ DUP CONSTANT OP4
CELL+ DUP CONSTANT OP5
CELL+ DUP CONSTANT OP6
CELL+ DUP CONSTANT OP7
CELL+ DUP CONSTANT OP8
DROP
: SetOP ( -- )
OP0 OP1 OpBuffSize CELL- CMOVE>
DP @ OP0 !
;
: ToOP0 ( OPn -- )
OP0 OpBuffSize CELL- CMOVE ;
0x11 CELLS DUP CONSTANT JpBuffSize
CREATE JP0 HERE DUP , OVER ALLOT
DUP ROT ERASE
CELL+ DUP CONSTANT JP1
CELL+ DUP CONSTANT JP2
CELL+ DUP CONSTANT JP3
CELL+ DUP CONSTANT JP4
DROP
[THEN]
: ClearJpBuff JP0 JpBuffSize ERASE ;
: J@ 1+ REL@ CELL+ ;
: SJ@ 1+ DUP C@ C>S + 1+ ;
: J_@
DUP C@ F0
AND 70 = IF SJ@ ELSE
DUP C@ EB = IF SJ@ ELSE
DUP C@ E9 = IF J@ ELSE
DUP W@ F0FF
AND 800F = IF 1+ J@ ELSE
HEX U. 1 ." J_@ ERR" ABORT
THEN THEN THEN THEN
;
: SetJP ( -- )
JP0 JpBuffSize + CELL- @ DUP
IF J_@
THEN
\ DP @ UMIN
J-SET UMAX TO J-SET
JP0 JP1 JpBuffSize CELL- CMOVE>
DP @ JP0 ! ;
\ : ToJP0 ( OPn -- )
\ JP0 JpBuffSize CELL- CMOVE
\ JP0 JpBuffSize + CELL- 0! ;
: ?SET DP @
DUP LAST-HERE <> IF DUP TO :-SET DUP TO J-SET THEN
DUP OP0 @ U< IF OP0 0! THEN
DUP OP1 @ U< IF OP1 0! THEN
DUP JP0 @ U< IF JP0 0! THEN
JP1 @ U< IF JP1 0! THEN
;
: SHORT? ( n -- -129 < n < 128 )
0x80 + 0x100 U<
;
M\ VECT DTST
\ \\\\\\\\\\
[DEFINED] [TTO] \ CR .( TTO=) DUP .
[IF]
GET-CURRENT
WORDLIST CONSTANT MACROOPT-WL
\ çàïèøåì àäðåñ èìåíè ñëîâàðÿ
' MACROOPT-WL EXECUTE CELL+ ( name_addr )
LAST @ SWAP !
ALSO ' MACROOPT-WL EXECUTE CONTEXT ! DEFINITIONS
TC-WL ALSO TC-IMM
[THEN]
\ \\\\\\\\\\\\
: EVEN-EAX OFF-EAX
IF M\ 1000 DTST
SetOP OFF-EAX DUP SHORT?
IF 0408D W, C,
ELSE 0808D W, ,
THEN \ LEA EAX, OFF-EBP [EAX]
0 TO OFF-EAX
M\ 1001 DTST
THEN
;
: EVEN-EBP OFF-EBP
IF SetOP OFF-EBP 06D8D W, C, \ LEA ebp, OFF-EBP [EBP]
0 TO OFF-EBP
THEN
;
: +>OFF-EBP ( C -- )
C>S OFF-EBP + TO OFF-EBP ;
: ADD|XOR|OR|AND= ( W -- FLAG )
CASE
DUP 4503 <> IF \ ADD EAX, X2 [EBP]
DUP 450B <> IF \ OR
DUP 4523 <> IF \ AND
DUP 4533 <> IF \ XOR
DROP FALSE EXIT
DUPENDCASE DROP TRUE ;
: DUP3B?[EBP] ( W -- W FLAG )
CASE
DUP 0E7C4 AND 04500 <> IF \ 010X.X101 00XX.X0XX
\ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP _L | E_X | X [EBP] , _L | E_X | X [EBP]
DUP E7FD AND 4589 <> IF \ 010X.X101 1000.10X1
\ MOV X [EBP], E(ABCD)X | E(ABCD)X , X [EBP]
\ DUP 5503 <> IF \ ADD EDX , 0 [EBP]
DUP 758B <> IF \ MOV ESI , X [EBP]
DUP EFFF AND 6DDB <> IF \ FLD | FSTP EXTENDED 0 [EBP]
DUP 45DB <> IF \ FILD DWORD FC [EBP]
DUP 65F7 <> IF \ MUL X [EBP]
DUP 6DF7 <> IF \ IMUL X [EBP]
DUP 04587 <> IF \ XCHG EAX , X [EBP]
FALSE EXIT
DUPENDCASE TRUE ;
: DUP3B? ( W -- W FLAG )
CASE
\ 11XX.X000 1000.0011
DUP C7FF AND C083 <> IF \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
DUP 0478B <> IF \ MOV EAX, X [EDI]
DUP 0488B <> IF \ MOV ECX, X [EAX]
DUP 0588B <> IF \ MOV EBX, X [EAX]
DUP 0508B <> IF \ MOV EDX, X [EAX]
DUP 0788B <> IF \ MOV EDI, X [EAX]
DUP 0708B <> IF \ MOV ESI, X [EAX]
DUP 0588D <> IF \ LEA EBX, X [EAX]
DUP 0508D <> IF \ LEA EDX, X [EAX]
DUP 05089 <> IF \ MOV X [EAX], EDX
DUP 05189 <> IF \ MOV X [ECX] , EDX
DUP 07589 <> IF \ MOV X [EAX], ESI
DUP 0F8C1 <> IF \ SAR EAX, # X
DUP 0E0C1 <> IF \ SHL EAX, # X
DUP 0E1C1 <> IF \ SHL ECX, # X
DUP 0E8C1 <> IF \ SHR EAX, # X
DUP 0408D <> IF \ LEA EAX , X [EAX]
DUP 0408B <> IF \ MOV EAX , X [EAX]
FALSE EXIT
DUPENDCASE TRUE ;
: DUP2B? ( W -- W FLAG )
CASE
DUP 0E4C5 AND 0C001 <> IF
\ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP E_X , E_X
\ DUP 01801 <> IF \ ADD [EAX], EBX
DUP 01001 <> IF \ ADD [EAX], EDX
DUP 0003 <> IF \ ADD EAX, [EAX]
DUP F633 <> IF \ XOR ESI, ESI
DUP 108B <> IF \ MOV EDX , [EAX]
DUP 0C0FF AND C085 <> IF \ TEST E__ , E__
\ 110X.X0XX 1000.10X1
DUP 0E4FC AND 0C088 <> IF \ MOV E(ABCD)X , E(ABCD)X | (ABCD)L , (ABCD)L
\ 00XX.X0XX 1000.100X
DUP 0C4FE AND 00088 <> IF \ MOV [E(ABCD)X] , E(ABCD)X | (ABCD)(HL)
DUP 0008B <> IF \ MOV EAX, [EAX]
DUP 028B <> IF \ MOV EAX, [EDX]
DUP 0C78B <> IF \ MOV EAX, EDI
DUP 0F88B <> IF \ MOV EDI, EAX
DUP 0F08B <> IF \ MOV ESI, EAX
DUP 0C88B <> IF \ MOV ECX , EAX
DUP 0D18B <> IF \ MOV EDX , ECX
DUP 0C68B <> IF \ MOV EAX, ESI
\ 111X.X0XX 1101.00XX
DUP 0E4FC AND 0E0D0 <> IF \ S(AH)(LR) (ABCD)L | E(ABCD)X, CL | 1
DUP 0C0DD <> IF \ FFREE ST
DUP F0FF AND C0D9 <> IF \ FLD ST(X) | FXCH ST(X)
\ 1100.XXXX.1101.1001
DUP FAFF AND E0D9 <> IF \ FCHS|FABS|FTST|FXAM
\ 1110.0X0X.1101.1001
DUP E8FF AND E8D9 <> IF \ FLD1 FLDL2T FLDL2E FLDPI FLDLG2 FLDLN2 FLDZ ???
\ 1110.1XXX.1101.1001
DUP F0FF AND F0D9 <> IF \ F2XM1 FYL2X FPTAN FPATAN
\ 1111.XXXX.1101.1001 \ FXTRACT FPREM1 FDECSTP FINCSTP
\ FPREM FYL2XP1 FSQRT FSINCOS
\ FRNDINT FSCALE FSIN FCOS
DUP E8FF AND 20DB <> IF \ FLD EXTENDED [E_X] | FST EXTENDED [E_X]
\ 001X.0XXX.1101.1011
DUP E8FF AND 00DD <> IF \ FLD DOUBLE [E_X] | FST DOUBLE [E_X]
\ 000X.0XXX.1101.1101
DUP F0FF AND C0DE <> IF \ FADDP ST(X) | FMULP ST(X)
DUP E0FF AND E0DE <> IF \ FSUBRP ST(X) | FSUBP ST(X)
\ 111X.XXXX.1101.1110 \ FDIVRP ST(X) | FDIVP ST(X)
DUP 00FF <> IF \ INC [EAX]
\ DUP 0C0FF <> IF \ INC EAX
\ DUP 0C3FF <> IF \ INC EBX
\ DUP 0C8FF <> IF \ DEC EAX
DUP 0D0F7 <> IF \ NOT EAX
DUP 0D1F7 <> IF \ NOT ECX
DUP 0D8F7 <> IF \ NEG EAX
DUP 0D9F7 <> IF \ NEG ECX
DUP 0DAF7 <> IF \ NEG EDX
DUP 0E9F7 <> IF \ IMUL ECX
DUP 0F1F7 <> IF \ DIV ECX
DUP 0F9F7 <> IF \ IDIV ECX
FALSE EXIT
DUPENDCASE TRUE ;
: DUP6B? ( W -- W FLAG )
CASE
\ X00X.X101 1000.10X1
DUP 67FD AND 0589 <> IF \ MOV X {[EBP]}, E(ACDB)X | E(ACDB)X , X {[EBP]}
DUP C3FF AND C081 <> IF \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
DUP 00501 <> IF \ ADD X , EAX
DUP 0503 <> IF \ ADD EAX, X
DUP 053B <> IF \ CMP EAX, X
DUP 873B <> IF \ CMP EAX, X [EDI]
DUP F281 <> IF \ XOR EDX , # 80000000
DUP 928D <> IF \ LEA EDX , [EDX+80000000H]
\ DUP 0589 <> IF \ MOV X , EAX
\ DUP 058B <> IF \ MOV EAX, X
DUP 808B <> IF \ MOV EAX, X [EAX]
DUP 808D <> IF \ LEA EAX, X [EAX]
DUP 8703 <> IF \ MOV EAX, X [EDI]
DUP 878B <> IF \ MOV EAX, X [EDI]
DUP 878D <> IF \ LEA EAX, X [EDI]
DUP 0C7 <> IF \ MOV [EAX], # X
DUP 0081 <> IF \ ADD [EAX], # X
DUP 05FF <> IF \ INC X
\ DUP FCFF AND C0C7 <> IF \ MOV EAX|EBX|ECX|EDX, # X
FALSE EXIT
DUPENDCASE TRUE ;
: DUP5B? ( C -- C FLAG )
DUP 0C7 AND 5 = \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
OVER 0FC AND 0B8 = OR \ MOV EAX|EBX|ECX|EDX, # X
OVER 0FD AND 0A1 = OR \ MOV EAX, X | X , EAX
;
: DUP7B? ( N -- N FLAG )
\ XX00.0101 0000.0100 1000.10X1
DUP 3FFFFD AND 050489 = \ MOV X [EAX*_] , EAX | MOV EAX , X [EAX*_]
\ XX00.0101 0000.0100 1000.1X01
OVER 3FFFFB AND 050489 = OR \ MOV X [EAX*_] , EAX | LEA EAX , X [EAX*_]
OVER 80B60F = OR \ MOVZX EAX, BYTE PTR [EAX]
OVER 45048D = OR \ LEA EAX, X [EAX*2]
;
0 VALUE TTTT
\ 0 VALUE ZZZZ \ VECT VVV
: ?ChEAX ( ADDR -- FALSE | TRUE )
CASE
DUP C@
DUP B8 <> IF \ MOV EAX, # X
DUP A1 <> IF \ MOV EAX, X
DROP
DUP W@
\ DUP ADD|XOR|OR|AND= 0= IF
DUP C033 <> IF \ XOR EAX, EAX
DUP C031 <> IF \ XOR EAX, EAX
DUP D889 <> IF \ MOV EAX, EBX
38FF AND
DUP 008B <> IF \ MOV EAX, ___
DUP 008D <> IF \ LEA EAX, ___
DROP
DUP @ FFFFFF AND
DUP 02048D <> IF \ LEA EAX, [EDX] [EAX]
2DROP TRUE EXIT
DUPENDCASE 2DROP FALSE ;
: ^?EAX= ( ADDR -- FALSE | TRUE )
\ FALSE
DUP ?ChEAX IF DROP TRUE EXIT THEN
DUP W@
DUP 00F9
AND 0089 <> IF 2DROP FALSE EXIT THEN
\ LEA MOV
CASE
FF00 AND
DUP 0100 AND
0100 <> IF \ MOV EAX,
DUP C200 <> IF \ MOV EAX, EDX
DUP D800 <> IF \ MOV EAX, EBX
DROP
DUP @ FFFF00 AND
DUP 240400 <> IF \ MOV EAX, [ESP]
DUP 244400 <> IF \ MOV EAX, X [ESP]
DUP 95048B <> IF \ 8B0495F0065A00 MOV EAX , 5A06F0 [EDX*4]
2DROP TRUE EXIT
DUPENDCASE 2DROP FALSE ;
\ DUP 8B00 = \ MOV EAX, [EAX]
: OP_SIZE ( OP - n )
DUP IF THEN DUP CELL- @ SWAP @ -
;
: OPexcise ( OPX -- )
DUP OP0 = IF @ DP ! OP1 ToOP0 EXIT THEN
>R
R@ CELL- @ R@ @ DP @ R@ CELL- @ - CMOVE
R@ OP_SIZE NEGATE
R@ OP0 DO DUP I +! CELL +LOOP
ALLOT
R@ CELL+ R@ OpBuffSize CELL- R> - OP0 + CMOVE
;
: ?OPlast ( OPX -- OPX flag )
DUP OP0 OpBuffSize + CELL- CELL- U> ;
: XX_STEP ( OPX -- OPX+CELL FALSE | { OPX | FALSE } TRUE )
\ Ïðîâåðêà íà íå èçìåíåíèå EAX
?OPlast
IF DROP FALSE TRUE EXIT THEN
DUP @
DUP :-SET U< IF 2DROP FALSE TRUE EXIT THEN
C@
CASE
DUP 3D <> IF \ CMP EAX, # X
DUP 3B <> IF \ CMP E_X , X
DUP A3 <> IF \ MOV X , EAX
DUP B9 <> IF \ MOV ECX , # X
DUP BA <> IF \ MOV EDX , # X
DUP BB <> IF \ MOV EBX , # X
DUP 50 <> IF \ PUSH EAX
DROP
DUP @ W@
DUP 04FF AND 04C7 <> IF \ MOV 4444 , # 5555
DUP 40FE AND 0088 <> IF \ MOV [EAX] , DL
DUP 4D89 <> IF \ MOV 4 [EBP] , ECX
DUP 558B <> IF \ MOV EDX , FC [EBP]
DUP 4C8B <> IF \ MOV ECX , FC [E__] [E__]
DUP 648D <> IF \ LEA ESP , 8 [ESP]
DUP 34FF AND 04FF <> IF \ INC 0 [ESP]
DUP C00B <> IF \ OR EAX, EAX
DUP D00B <> IF \ OR EDX, EAX
DUP D02B <> IF \ SUB EDX, EAX
DUP 0401 <> IF \ ADD [E_X]
DUP 06FD \ CMP X [EBP], # Z \ CMP 44444, # 55555
AND 0481 <> IF
DUP FFFD
AND 4589 =
IF OVER @ 2+ C@ OP0 @ 2+ C@ =
IF DROP TRUE
EXIT
THEN
458B = IF DROP FALSE TRUE EXIT THEN
CELL+ FALSE EXIT
THEN
2DROP
FALSE TRUE EXIT
DUPENDCASE DROP CELL+ FALSE ;
: ?EDX_[EBP] ( OPX - FLAG )
DUP @ @ FFFFFF AND
DUP 24048B = \ 8B0424 MOV EAX , [ESP]
IF 2DROP FALSE EXIT THEN
FFFF AND
DUP 458B XOR \ 8B4500 MOV EAX , 0 [EBP]
OVER 4589 XOR OR \ OPX N F MOV FC [EBP] , EAX
0= IF DROP
@ 2+ C@ OP0 @ 2+ C@ =
EXIT
THEN
NIP
DUP ADD|XOR|OR|AND=
IF DROP FALSE EXIT THEN
DUP E8C1 = \ C1E819 SHR EAX , 19
IF DROP FALSE EXIT THEN
DUP 418D = \ 8D41FF LEA EAX , FF [ECX]
IF DROP FALSE EXIT THEN
DUP 408D = \ 8D40FF LEA EAX , FF [EAX]
IF DROP FALSE EXIT THEN
DUP 878D = \ 8D873C100000 LEA EAX , 103C [EDI]
IF DROP FALSE EXIT THEN
DUP D0F7 = \ F7D0 NOT EAX
IF DROP FALSE EXIT THEN
DUP D8F7 = \ F7D8 NEG EAX
IF DROP FALSE EXIT THEN
DUP C123 = \ 23C1 AND EAX , ECX
IF DROP FALSE EXIT THEN
DUP C033 = \ XOR EAX , EAX
IF DROP FALSE EXIT THEN
DUP 808D = \ 8D8024475A00 LEA EAX , 5A4724 [EAX]
IF DROP FALSE EXIT THEN
DUP 088B = \ MOV ECX , [EAX]
IF DROP FALSE EXIT THEN
DUP C00B = \ 0BC0 OR EAX , EAX
IF DROP FALSE EXIT THEN
DUP 488D = \ 8D4820 LEA ECX , 20 [EAX]
IF DROP FALSE EXIT THEN
DUP E0D3 = \ D3E0 SHL EAX , CL
IF DROP FALSE EXIT THEN
FF AND
DUP A1 = \ A1047A5800 MOV EAX , 587A04
IF DROP FALSE EXIT THEN
DUP 58 = \ 58 POP EAX
IF DROP FALSE EXIT THEN
DUP B9 = \ B907000000 MOV ECX , # 7
IF DROP FALSE EXIT THEN
DROP TRUE
;
: MOV_EDX_[EBP] ( OPX - OPX' FALSE | FLAG TRUE )
?OPlast IF DROP FALSE TRUE EXIT THEN
DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN
DUP @ ?ChEAX 0= IF CELL+ FALSE EXIT THEN
DUP ?EDX_[EBP] 0= IF CELL+ FALSE EXIT THEN
DUP @ W@
DUP 448B = \ MOV EAX , 4 [EDX] [EAX*4]
IF DROP CELL+ FALSE EXIT THEN
DUP 1489 = \ MOV 59C2E4 [EAX*4] , EDX
IF DROP CELL+ FALSE EXIT THEN
DUP 8BCA = \ MOV ECX , EDX
IF DROP CELL+ FALSE EXIT THEN
DUP FFFD AND 5589 = \ OPX N F
IF DROP @ 2+ C@ OP0 @ 2+ C@ = TRUE EXIT
THEN
2DROP FALSE TRUE
;
: OPresize ( OPX n -- )
DUP >R
OVER OP0 ?DO DUP I +! CELL +LOOP
ALLOT
@ DUP R> + DUP DP @ - NEGATE MOVE
;
: OPinsert ( OPX n -- )
DUP >R
2DUP OPresize DROP
DUP
DUP CELL + OVER OP0 CC - OpBuffSize CELL- - NEGATE MOVE
R> SWAP +!
;
VARIABLE ?~EAX
VARIABLE SAVE-?~EAX
: ?~EAX{ ( FLAG -- )
?~EAX @ SAVE-?~EAX ! ?~EAX ! ;
: }?~EAX ( -- )
SAVE-?~EAX @ ?~EAX ! ;
: ?EAX>EBX ( OPX - OPX' FALSE | FALSE TRUE | OPX' TRUE TRUE )
\ TTTT 0= IF DROP FALSE TRUE EXIT THEN
\ ." $=" DUP @ @ U.
\ TTTT IF HEX DUP @ U. THEN
\ DROP FALSE TRUE EXIT
?OPlast IF DROP FALSE TRUE EXIT THEN
DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN
DUP @ W@
DUP 4589 = \ OPX N F MOV FC [EBP] , EAX
OVER 458B = OR \ OPX N F MOV EAX , FC [EBP]
IF DROP DUP @ 2+ C@ OP0 @ 2+ C@ =
IF CELL- TRUE TRUE
ELSE DUP @ W@ 458B = IF ?~EAX 0! THEN
CELL+ FALSE
THEN EXIT
THEN
CASE
\ ." $=" DUP @ U.
DUP 083B <> \ CMP ECX , [EAX]
IF
DUP C83B <> \ CMP ECX , EAX
IF
DUP C13B <> \ CMP EAX , ECX
IF
DUP 508B <> \ MOV EDX , 4 [EAX]
IF
DUP 088B <> \ MOV ECX , [EAX]
IF
DUP 098B <> \ MOV ECX , [ECX]
IF
DUP C88B <> \ MOV ECX , EAX
IF
DUP 0889 <> \ MOV [EAX] , ECX
IF
DUP 1089 <> \ MOV [EAX] , EDX
IF
DUP 4889 <> \ MOV 4 [EAX] , ECX
IF
0 ?~EAX{
DUP 408D <> \ LEA EAX , 1 [EAX]
IF
DUP 808D <> \ LEA EAX , 1 [EAX]
IF
DUP 008B <> \ MOV EAX , [EAX]
IF
\ TTTT IF HEX ." M=" DUP U. THEN
DUP C18B <> \ MOV EAX , ECX
IF
TRUE ?~EAX !
DUP D8F7 <> \ NEG EAX
IF
}?~EAX
DROP
DUP @ @ FFFFFF AND
DUP 240C8B <> \ MOV ECX , [ESP]
IF
DUP 8D0489 <> \ MOV X [ECX*4] , EAX
IF
0 ?~EAX{
DUP 24048B <> \ MOV EAX , [ESP]
IF
TRUE ?~EAX !
DUP 24442B <> \ SUB EAX , 4 [ESP]
IF
}?~EAX
0xFFFF AND
OVER @ 2+ C@ OP0 @ 2+ C@
\ TTTT IF HEX ." N=" 2DUP U. U. THEN
=
IF 2DROP FALSE TRUE EXIT
THEN
DUP 4D8B <> \ MOV ECX , [EBP]
IF
DUP 5589 <> \ MOV [EBP] , EDX
IF
2DROP FALSE TRUE EXIT
DUPENDCASE DROP CELL+ FALSE ;
: EAX>EBX0 ( OPX - OPX' FLAG )
DUP OP0 = IF TRUE EXIT THEN
\ TTTT IF 1 EMIT DUP U. DUP @ U. THEN
DUP @ W@
DUP 508B = \ MOV EDX , [EAX+4]
IF DROP CELL- FALSE EXIT THEN
DUP 088B = \ MOV ECX , [EAX]
IF DROP CELL- FALSE EXIT THEN
DUP 098B = \ MOV ECX , [ECX]
IF DROP CELL- FALSE EXIT THEN
DUP 4D8B = \ MOV ECX , [EBP]
IF DROP CELL- FALSE EXIT THEN
DUP 5589 = \ MOV 0 [EBP] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP C88B = \ MOV ECX , EAX
IF DROP CELL- FALSE EXIT THEN
DUP 0889 = \ MOV [EAX] , ECX
IF DROP CELL- FALSE EXIT THEN
DUP 1089 = \ MOV [EAX] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP 4889 = \ MOV 4 [EAX] , ECX
IF DROP CELL- FALSE EXIT THEN
DUP 408D = \ LEA EAX , 1 [EAX]
IF DROP
58 OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP 808D = \ LEA EAX , 1 [EAX]
IF DROP
98 OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP 008B = \ MOV EAX , [EAX]
IF DROP
18 OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP C18B = \ MOV EAX , ECX
IF DROP
D9 OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP 458B = \ MOV EAX , [EBP+X]
IF DROP
5D OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP D8F7 = \ NEG EAX
IF DROP
DB OVER @ 1+ C! CELL- FALSE EXIT
THEN
DROP
DUP @ @ FFFFFF AND
DUP 8D0489 = \ MOV X [ECX*4] , EAX
IF DROP CELL- FALSE EXIT THEN
DUP 24048B = \ MOV EAX , [ESP]
IF DROP
1C OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP 240C8B = \ MOV ECX , [ESP]
IF DROP CELL- FALSE EXIT THEN
\ BASE @ >R HEX DUP U. R> BASE !
FF AND
DUP 3B = \ CMP
IF DROP CELL- FALSE EXIT THEN
HEX U. U. ." EAX>EBX0" ABORT
;
: EAX>EBX ( OPX - OPX' FLAG )
DUP OP0 = IF TRUE EXIT THEN
DUP @ W@ \ ." #=" DUP U.
DUP 508B = \ MOV EDX , [EAX+4]
IF DROP
53 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 083B = \ CMP ECX , [EAX]
IF DROP
0B OVER @ 1+ W! CELL- FALSE EXIT
THEN
DUP C83B = \ CMP ECX , EAX
IF DROP
CB OVER @ 1+ W! CELL- FALSE EXIT
THEN
DUP C13B = \ CMP EAX , ECX
IF DROP
D9 OVER @ 1+ W! CELL- FALSE EXIT
THEN
DUP 088B = \ MOV ECX , [EAX]
IF DROP
0B OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 458B = \ MOV EAX , [EBP+X]
IF DROP
5D OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 098B = \ MOV ECX , [ECX]
IF DROP CELL- FALSE EXIT THEN
DUP 4D8B = \ MOV ECX , [EBP]
IF DROP CELL- FALSE EXIT THEN
DUP 5589 = \ MOV 0 [EBP] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP C88B = \ MOV ECX , EAX
IF DROP
CB OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 0889 = \ MOV [EAX] , ECX
IF DROP
0B OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 1089 = \ MOV [EAX] , EDX
IF DROP
13 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 4889 = \ MOV 4 [EAX] , ECX
IF DROP
4B OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 4589 = \ OPX N F MOV FC [EBP] , EAX
IF DROP
5D OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 408D = \ LEA EAX , 1 [EAX]
IF DROP
5B OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 808D = \ LEA EAX , X [EAX]
IF DROP
9B OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 008B = \ MOV EAX , [EAX]
IF DROP
1B OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP C18B = \ MOV EAX , ECX
IF DROP
D9 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP D8F7 = \ NEG EAX
IF DROP
DB OVER @ 1+ C! CELL- FALSE EXIT
THEN
DROP
DUP @ @ FFFFFF AND
DUP 8D0489 = \ MOV X [ECX*4] , EAX
IF DROP
1C OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 24048B = \ MOV EAX , [ESP]
IF DROP
1C OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 240C8B = \ MOV ECX , [ESP]
IF DROP CELL- FALSE EXIT THEN
DUP 24442B = \ SUB EAX , [ESP+4]
IF DROP
5C OVER @ 1+ C! CELL- FALSE EXIT
THEN
HEX U. U. ." EAX>EBX" ABORT
;
: ?EAX>ECX ( OPX - OPX' FALSE | FALSE TRUE | OPX' TRUE TRUE )
\ ZZZZ 0= IF DROP FALSE TRUE EXIT THEN
\ DROP FALSE TRUE EXIT
?OPlast IF DROP FALSE TRUE EXIT THEN
DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN
\ TTTT IF HEX DUP @ U. THEN
DUP @ W@
DUP 4589 = \ OPX N F MOV FC [EBP] , EAX
OVER 458B = OR \ OPX N F MOV EAX , FC [EBP]
IF DROP DUP @ 2+ C@ OP0 @ 2+ C@ =
IF CELL- TRUE TRUE
ELSE DUP @ W@ 458B = IF ?~EAX 0! THEN
CELL+ FALSE
THEN EXIT
THEN
DUP 5589 = \ OPX N F MOV FC [EBP] , EDX
IF DROP DUP @ 2+ C@ OP0 @ 2+ C@ =
IF DROP FALSE TRUE
ELSE CELL+ FALSE
THEN EXIT
THEN
CASE
0 ?~EAX{
\ 8B00 MOV EAX , [EAX]
\ 3B05E3745400 CMP EAX , 5474E3 ( :-SET+5 )
DUP 3AFF AND 028B <> \ MOV EAX , [EDX]
IF
DUP 008B <> \ MOV EAX , [EAX]
IF
DUP 408D <> \ LEA EAX , 1 [EAX]
IF
DUP 408B <> \ MOV EAX , 1 [EAX]
IF
DUP 428D <> \ LEA EAX , 1 [EDX]
IF
\ DUP 808D <> \ LEA EAX , X [EAX]
\ IF
DUP C28B <> \ MOV EAX , EDX
IF
TRUE ?~EAX !
DUP C00B <> \ OR EAX , EAX
IF
DUP C01B <> \ SBB EAX , EAX
IF
DUP F8D1 <> \ SAR EAX , 1
IF
DUP E8C1 <> \ SHR EAX , 1
IF
DUP D8F7 <> \ NEG EAX
IF
DUP D0F7 <> \ NOT EAX
IF
DUP D0F7 <> \ NOT EAX
IF
DUP 4503 <> \ ADD EAX , 0 [EBP]
IF
DUP 0523 <> \ AND EAX , 587744 ( D+5 )
IF
DUP E0C1 <> \ SHL EAX , 7
IF
DUP C223 <> \ AND EAX , EDX
IF
}?~EAX
DUP 508B <> \ MOV EDX , [EAX+4]
IF
DUP 053B <> \ CMP EAX , 5474E3 ( :-SET+5 )
IF
DUP 103B <> \ CMP EDX , [EAX]
IF
DUP 558B <> \ OPX N F MOV F8 [EBP] , EDX
IF
DUP 158B <> \ MOV EDX , 587A88
IF
DUP D08B <> \ MOV EDX , EAX
IF
DUP 0501 <> \ MOV ADD 555555 , EAX
IF
DUP 5089 <> \ MOV C [EAX] , EDX
IF
DUP 1089 <> \ MOV [EAX] , EDX
IF
DUP 80C6 <> \ MOV BYTE [EAX] , # X
IF
DUP 45C7 <> \ MOV FC [EBP] , # 1
IF
FF AND
DUP 50 <> \ PUSH EAX
IF
DUP A3 <> \ MOV 1000 , EAX
IF
0 ?~EAX{
DUP B8 <> \ MOV EAX , # 1000
IF
DUP A1 <> \ MOV EAX , 1000
IF
TRUE ?~EAX !
DUP 25 <> \ AND EAX , # X
IF
}?~EAX
DUP BA <> \ MOV EDX , # 1000
IF
DUP 3D <> \ CMP EAX , # 1000
IF
DROP
DUP @ @
0 ?~EAX{
DUP 0244B60F <> \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX]
IF
FFFFFF AND
DUP 85048D <> \ LEA EAX , 0 [EAX*4]
IF
DUP 85048B <> \ MOV EAX , X [EAX*4]
IF
DUP 80B60F <> \ MOVZX EAX , BYTE PTR X [EAX]
IF
DUP 40B70F <> \ MOVZX EAX , WORD PTR X [EAX]
IF
DUP 00B70F <> \ MOVZX EAX , WORD [EAX]
IF
DUP 82448B <> \ MOV EAX , 4 [EDX] [EAX*4]
IF
DUP 24048B <> \ MOV EAX , [ESP]
IF
DUP 24448B <> \ MOV EAX , [ESP+4]
IF
TRUE ?~EAX !
DUP 24442B <> \ SUB EAX , [ESP+4]
IF
}?~EAX
DUP 24043B <> \ CMP EAX , [ESP]
IF
DUP 24443B <> \ CMP EAX , 20 [ESP]
IF
DUP 24548B <> \ MOV EDX , C [ESP]
IF
2DROP FALSE TRUE EXIT
DUPENDCASE DROP CELL+ FALSE ;
: EAX>ECX0 ( OPX - OPX' FLAG )
DUP OP0 = IF TRUE EXIT THEN
DUP @ W@
DUP EFFF AND 4589 = \ OPX N F
IF DROP CELL- FALSE EXIT THEN
DUP 0501 = \ ADD [444444H] , EAX
IF DROP CELL- FALSE EXIT THEN
DUP 5589 = \ MOV X [EBP] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP 38FF AND 008B = \ MOV EAX , ___
IF DROP
0800 OVER @ +! CELL- TRUE EXIT
THEN
DUP C28B = \ MOV EAX , EDX
IF DROP
CA OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP 808D = \ LEA EAX , 1 [EAX]
IF DROP
88 OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP 408D = \ LEA EAX , 1 [EAX]
IF DROP
48 OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP 408B = \ MOV EAX , 1 [EAX]
IF DROP
48 OVER @ 1+ C! CELL- TRUE EXIT
THEN
DUP FF AND 8B = \ MOV ~EAX , ___
IF DROP CELL- FALSE EXIT THEN
DUP 38FF AND 008D = \ LEA EAX , ___
IF DROP
0800 OVER @ +! CELL- TRUE EXIT
THEN
DUP 428D = \ LEA EAX , 1 [EDX]
IF DROP
0800 OVER @ +! CELL- TRUE EXIT
THEN
DUP C00B = \ OR EAX , EAX
IF DROP CELL- FALSE EXIT THEN
DUP 5089 = \ MOV C [EAX] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP 1089 = \ MOV [EAX] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP 80C6 = \ MOV BYTE [EAX] , # X
IF DROP CELL- FALSE EXIT THEN
DUP 45C7 = \ MOV FC [EBP] , # 1
IF DROP CELL- FALSE EXIT THEN
DROP
DUP @ @
DUP 0244B60F = \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX]
IF DROP
4C OVER @ 2+ C! CELL- TRUE EXIT
THEN
FFFFFF AND
DUP 80B60F = \ MOVZX EAX , BYTE PTR X [EAX]
IF DROP
88 OVER @ 2+ C! CELL- TRUE EXIT
THEN
DUP 40B70F = \ MOVZX EAX , WORD PTR x [EAX]
IF DROP
48 OVER @ 2+ C! CELL- TRUE EXIT
THEN
DUP 00B70F = \ MOVZX EAX , WORD PTR [EAX]
IF DROP
08 OVER @ 2+ C! CELL- TRUE EXIT
THEN
\ DUP 24442B = \ SUB EAX , [ESP+4]
\ IF DROP
\ 4C OVER @ 1+ C! CELL- TRUE EXIT
\ THEN
FF AND
DUP 50 = \ PUSH EAX
IF DROP CELL- FALSE EXIT THEN
DUP B8 = \ MOV EAX , # 1000
IF DROP
B9 OVER @ C! CELL- TRUE EXIT
THEN
DUP BA = \ MOV EDX , # 1000
IF DROP CELL- FALSE EXIT THEN
DUP 3D = \ CMP EAX , # 1000
IF DROP CELL- FALSE EXIT THEN
DUP 3B = \ CMP
IF DROP CELL- FALSE EXIT THEN
DUP A3 = \ MOV 1000 , EAX
IF DROP CELL- FALSE EXIT THEN
DUP A1 = \ MOV EAX , 1000
IF DROP DUP 1 OPresize
0D8B OVER @ W! CELL- TRUE EXIT
THEN
HEX U. DUP @ @ U. U. ." EAX>ECX0" ABORT
;
: EAX>ECX ( OPX - OPX' F | T )
DUP OP0 = IF TRUE EXIT THEN
DUP @ W@
\ 8B00 MOV EAX , [EAX]
\ 3B05E3745400 CMP EAX , 5474E3 ( :-SET+5 )
DUP 5589 = \ MOV X [EBP] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP 3AFF AND 028B = \ MOV EAX , [EDX]
IF DROP
0800 OVER @ +! CELL- FALSE EXIT
THEN
DUP 458B = \ MOV EAX , [EBP+X]
IF DROP
4D OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 008B = \ MOV EAX , [EAX]
IF DROP
09 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP D08B = \ MOV EDX , EAX
IF DROP
D1 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP C28B = \ MOV EAX , EDX
IF DROP
CA OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP E0C1 = \ SHL EAX , 7
IF DROP
E1 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP C223 = \ AND EAX , EDX
IF DROP
CA OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 0501 = \ ADD [444444H] , EAX
IF DROP
0D01 OVER @ W! CELL- FALSE EXIT
THEN
DUP 508B = \ MOV EDX , [EAX+4]
IF DROP
51 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 053B = \ CMP EAX , 5474E3 ( :-SET+5 )
IF DROP
0D OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 103B = \ CMP EDX , [EAX]
IF DROP
11 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP C23B = \ CMP EAX , EDX
IF DROP
CA OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP C00B = \ OR EAX , EAX
IF DROP
C9 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP C01B = \ SBB EAX , EAX
IF DROP
C9 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP F8D1 = \ SAR EAX , 1
IF DROP
F9 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP E8C1 = \ SAR EAX , 1
IF DROP
E9 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 4589 = \ OPX N F MOV FC [EBP] , EAX
IF DROP
4D OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 5089 = \ MOV C [EAX] , EDX
IF DROP
51 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 1089 = \ MOV [EAX] , EDX
IF DROP
11 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 80C6 = \ MOV BYTE [EAX] , # X
IF DROP
81 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 408D = \ LEA EAX , 1 [EAX]
IF DROP
49 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 408B = \ MOV EAX , 1 [EAX]
IF DROP
49 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 428D = \ LEA EAX , 1 [EDX]
IF DROP
0800 OVER @ +! CELL- FALSE EXIT
THEN
DUP 808D = \ LEA EAX , 1 [EAX]
IF DROP
89 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP C28B = \ MOV EAX , EDX
IF DROP
CA OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP D8F7 = \ NEG EAX
IF DROP
D9 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP D0F7 = \ NOT EAX
IF DROP
D1 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP D0F7 = \ NOT EAX
IF DROP
D1 OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 4503 = \ ADD EAX , 0 [EBP]
IF DROP
4D OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 0523 = \ AND EAX , 587744 ( D+5 )
IF DROP
0D OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 558B = \ OPX N F MOV F8 [EBP] , EDX
IF DROP CELL- FALSE EXIT THEN
DUP 158B = \ MOV EDX , 587A88
IF DROP CELL- FALSE EXIT THEN
DUP 45C7 = \ MOV FC [EBP] , # 1
IF DROP CELL- FALSE EXIT THEN
DROP
DUP @ @
DUP 0244B60F = \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX]
IF DROP
0A4C OVER @ 2+ W! CELL- TRUE EXIT
THEN
FFFFFF AND
DUP 85048D = \ LEA EAX , 0 [EAX*4]
IF DROP
8D0C OVER @ 1+ W! CELL- FALSE EXIT
THEN
DUP 85048B = \ MOV EAX , X [EAX*4]
IF DROP
8D0C OVER @ 1+ W! CELL- FALSE EXIT
THEN
DUP 80B60F = \ MOVZX EAX , BYTE PTR X [EAX]
IF DROP
89 OVER @ 2+ C! CELL- FALSE EXIT
THEN
DUP 40B70F = \ MOVZX EAX , WORD PTR x [EAX]
IF DROP
49 OVER @ 2+ C! CELL- FALSE EXIT
THEN
DUP 00B70F = \ MOVZX EAX , WORD PTR [EAX]
IF DROP
09 OVER @ 2+ C! CELL- FALSE EXIT
THEN
DUP 82448B = \ MOV EAX , 4 [EDX] [EAX*4]
IF DROP
8A4C OVER @ 1+ W! CELL- FALSE EXIT
THEN
DUP 24048B = \ MOV EAX , [ESP]
IF DROP
0C OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 24448B = \ MOV EAX , [ESP+4]
IF DROP
4C OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 24043B = \ CMP EAX , [ESP]
IF DROP
0C OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 24443B = \ CMP EAX , 20 [ESP]
IF DROP
4C OVER @ 1+ C! CELL- FALSE EXIT
THEN
DUP 24548B = \ MOV EDX , C [ESP]
IF DROP CELL- FALSE EXIT THEN
DUP 24442B = \ SUB EAX , [ESP+4]
IF DROP
4C OVER @ 1+ C! CELL- FALSE EXIT
THEN
FF AND
DUP 50 = \ PUSH EAX
IF DROP
51 OVER @ C! CELL- FALSE EXIT
THEN
DUP B8 = \ MOV EAX , # 1000
IF DROP
B9 OVER @ C! CELL- FALSE EXIT
THEN
DUP A3 = \ MOV 1000 , EAX
IF DROP DUP 1 OPresize
0D89 OVER @ W! CELL- FALSE EXIT
THEN
DUP A1 = \ MOV EAX , # 1000
IF DROP DUP 1 OPresize
0D8B OVER @ W! CELL- FALSE EXIT
THEN
DUP 25 = \ AND EAX , # X
IF DROP DUP 1 OPresize
E181 OVER @ W! CELL- FALSE EXIT
THEN
DUP BA = \ MOV EDX , # 1000
IF DROP CELL- FALSE EXIT THEN
DUP 3D = \ CMP EAX , # 1000
IF DROP DUP 1 OPresize
F981 OVER @ W! CELL- FALSE EXIT
THEN
U. DUP @ @ U. U. ." EAX>ECX" ABORT
;
: -EBPLIT ( n OPX -- n OPX' )
DUP @ :-SET U> 0= IF EXIT THEN
BEGIN
?OPlast IF EXIT THEN
DUP @ W@ 6D8D = IF EXIT THEN \ LEA EBP , X [EBP]
DUP @ C@ E8 = IF EXIT THEN \ CALL
DUP @ C@ E9 = IF EXIT THEN \ JMP
DUP @ C@ F0
AND 70 = IF EXIT THEN \ Jx
DUP @ C@ EB = IF EXIT THEN
DUP @ W@ F0FF
AND 800F = IF EXIT THEN
2DUP @ 2+ C@ = IF EXIT THEN
CELL+ DUP @ :-SET U> 0=
UNTIL ;
1 [IF]
: -EBPCLR ( FLAG OPX -- FLAG' )
DUP @ :-SET U< IF DROP EXIT THEN
OFF-EBP CELL- TO OFF-EBP
BEGIN
?OPlast IF DROP EXIT THEN
DUP @ W@ 6D8D = IF DROP EXIT THEN
DUP @ C@ E8 = IF DROP EXIT THEN \ CALL
DUP @ C@ E9 = IF DROP EXIT THEN \ JMP
DUP @ C@ F0
AND 70 = IF DROP EXIT THEN \ Jx
DUP @ C@ EB = IF DROP EXIT THEN
DUP @ W@ F0FF
AND 800F = IF DROP EXIT THEN
DUP @ @ FFFFFF AND 85448B = \ MOV EAX , FC [EBP] [EAX*4]
IF DROP EXIT THEN
\ DUP @ 2+ C@ DUP U. OFF-EBP FF AND DUP U. =
DUP @ 2+ C@ OFF-EBP FF AND =
IF DUP @ W@ E7FF AND 4589 = \ MOV X [EBP] , EAX|EDX|EBX|ECX
OVER @ W@ 45C7 = OR \ MOV F8 [EBP] , # 2710
IF M\ 20A DTST
\ ." ^" DUP @ U. :-SET U. \ OPexcise NIP TRUE SWAP CELL-
DUP OPexcise NIP TRUE SWAP CELL-
ELSE DROP EXIT
THEN
THEN
CELL+ DUP @ :-SET U<
UNTIL DROP ;
[ELSE]
: -EBPCLR ( FLAG OPX -- FLAG' )
OFF-EBP CELL- TO OFF-EBP
BEGIN
OFF-EBP SWAP -EBPLIT NIP
?OPlast IF DROP EXIT THEN
:-SET OVER @ U<
WHILE DUP @ 2+ C@ OFF-EBP FF AND =
IF DUP @ W@ E7FF AND 4589 = \ MOV X [EBP] , EAX|EDX|EBX|ECX
IF M\ 20A DTST
DUP OPexcise NIP TRUE SWAP \ CELL-
ELSE DROP EXIT
THEN
ELSE
DUP @ @ FFFFFF AND 85448B = \ MOV EAX , FC [EBP] [EAX*4]
IF DROP EXIT THEN
CELL+
?OPlast IF DROP EXIT THEN
DUP @ :-SET U< IF DROP EXIT THEN
THEN
REPEAT DROP
;
[THEN]
: T?EAX>ECX ( FALSE | OPX' TRUE -- ... )
IF CELL+ CELL+ FALSE
ELSE FALSE TRUE
THEN ;
: F?EAX>ECX ( FLAG -- ... )
IF \ TRUE TRUE
?~EAX @
IF DROP FALSE
ELSE TRUE
THEN TRUE
ELSE FALSE
THEN ;
: ECX:=EAX ( OPX -- OPX- )
DUP 2 OPinsert
C88B OVER CELL+ @ W! \ MOV ECX , EAX
\ CELL-
;
: EBX:=EAX ( OPX -- OPX- )
DUP 2 OPinsert
D88B OVER CELL+ @ W! \ MOV EBX , EAX
\ CELL-
;
TRUE VALUE ~BR-OPT
: ?EAX:=ECX ( -- )
?~EAX @
IF SetOP 8B C, C1 C, \ MOV EAX , ECX
THEN ;
: DO_EAX>ECX ( -- FLAG )
OP1
BEGIN ?EAX>ECX
DUP 0= \ TTTT AND
IF DROP CELL-
?OPlast IF DROP FALSE EXIT THEN
DUP @ :-SET U< IF DROP FALSE EXIT THEN
DUP @ W@ 4D89 = \ OPX N F MOV FC [EBP] , ECX
IF DUP @ 2+ C@
OP0 @ 2+ C@ =
IF M\ 410 DTST
DROP ?~EAX 0!
OP0 2 OPinsert
C18B OP1 @ W! \ MOV EAX , ECX
OP0 TRUE TRUE
ELSE DROP FALSE TRUE
THEN
ELSE CELL+ FALSE
THEN
THEN
UNTIL DUP >R
IF M\ 40E DTST
?~EAX @
IF ECX:=EAX
ELSE BEGIN EAX>ECX0 UNTIL
THEN BEGIN EAX>ECX UNTIL
DROP
OP1 ToOP0
-3 ALLOT
M\ 40F DTST
THEN R>
;
M\ VARIABLE VPPP : PPPP DUP VPPP @ <> IF 0 @ THEN ;
VECT FPOP
: ?EAX=RULES ( ADDR -- ADDR' FLAG )
BEGIN OP1 @ :-SET
\ TTTT IF ." T=" 2DUP HEX U. U. THEN
U< IF TRUE EXIT THEN
OP1 @ ?ChEAX 0=
~BR-OPT AND
\ OP1 @ W@ ADD|XOR|OR|AND= OR
WHILE M\ 0 DTST
OP1 OPexcise
M\ 1 DTST
REPEAT
OP1 @ @ FC458B58 = \ POP EAX MOV EAX , FC [EBP]
IF M\ F0 DTST
0424648D OP1 @ !
OP1 ToOP0
FALSE M\ F1 DTST
EXIT
THEN
M\ PPPP
OP2 @ :-SET U< 0= IF \ GOTO OP2>
OP2 @ C@ B8 = \ MOV EAX , # 44444
IF
OP1 @ @ FFFFFF AND 240401 = \ ADD [ESP] , EAX
IF M\ B0E DTST
OP2 @ 1+ @
240481 OP2 @ ! \ ADD [ESP] , #
OP2 @ 3 + !
2 OP1 +!
OP0 @ 2@ OP1 @ 2!
OP1 ToOP0
FALSE -1 ALLOT M\ B0F DTST
EXIT
THEN
M\ PPPP
OP1 @ W@ 00C7 = \ MOV [EAX] , # X
IF M\ C0E DTST
OP1 @ 2+ @
OP2 @ 1+ @
05C7 OP2 @ W! \ MOV 44444 , # X
OP2 @ 2+ ! OP2 @ 6 + !
5 OP1 +!
OP0 @ 2@ OP1 @ 2!
OP1 ToOP0
FALSE -1 ALLOT M\ C0F DTST
EXIT
THEN
THEN
M\ PPPP
OP2 @ ?ChEAX
OP1 @ W@ 5589 XOR \ 8955FC MOV FC [EBP] , EDX
OP1 @ W@ 1501 <> AND \ 011544444400 ADD 444444 , EDX
OP1 @ W@ 1589 <> AND OR \ 891544444400 MOV 444444 , EDX
\ EAX=
0= IF M\ C2 DTST
OP2 OPexcise
FALSE M\ C3 DTST
EXIT
THEN
THEN \ LAB: OP2>
OP0 @ W@ 458B = \ MOV EAX , X [EBP]
IF
OP1 \ ." $"
BEGIN XX_STEP
UNTIL
IF M\ 90E DTST
OP1 ToOP0 -3 ALLOT FALSE M\ 90F DTST
EXIT
THEN
DO_EAX>ECX IF FALSE EXIT THEN
TRUE ?~EAX !
OP1
BEGIN ?EAX>EBX
UNTIL
IF M\ 80E DTST
?~EAX @
IF EBX:=EAX
ELSE BEGIN EAX>EBX0 UNTIL
THEN BEGIN EAX>EBX UNTIL
DROP
OP1 ToOP0
FALSE
-3 ALLOT M\ 80F DTST
EXIT
THEN
:-SET OP2 @ U< IF \ GOTO OP2 MOV EAX , X [EBP]
OP2 @ W@ 5589 XOR \ 8955FC MOV FC [EBP] , EDX
OP1 @ W@ 889 XOR OR \ 8908 MOV [EAX] , ECX
\ MOV EAX , X [EBP]
OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR \ X2=X0
0= IF M\ 11E DTST
C28B OP0 @ W! \ MOV EAX , EDX
-1 ALLOT
FALSE M\ 11F DTST
EXIT
THEN
\ $ DUP >R
OP2 @ W@ 4589 XOR \ MOV X2 [EBP] , EAX
OP1 @ C@ 50 XOR OR \ PUSH EAX
\ OP0 @ W@ 458B XOR OR \ MOV EAX , X0 [EBP]
OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0= \ X2=X0
IF M\ 1E DTST
50 OP2 @ C!
OP2 ToOP0
-6 ALLOT
FALSE M\ 1F DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ C@ BA XOR OR \ MOV EDX , # 1000
OP1 @ W@ 1089 XOR OR \ MOV [EAX] , EDX
\ MOV EAX , FC [EBP]
0= IF M\ 52 DTST
OP2 1 OPresize
00C7 OP2 @ W! \ MOV [EAX] , # 1000
OP1 OPexcise
FALSE M\ 53 DTST
EXIT
THEN
:-SET OP4 @ U< IF \ GOTO OP4 MOV EAX , X [EBP]
DUP C@ 0C3 XOR
\ CR ." XX"
OP4 @ W@ 4D89 XOR OR \ 567F5A 894DF8 MOV F8 [EBP] , ECX
OP3 @ W@ 1089 XOR OR \ 567F5D 8910 MOV [EAX] , EDX
OP2 @ W@ 558B XOR OR \ 567F5F 8B55F8 MOV EDX , F8 [EBP]
OP1 @ W@ 5089 XOR OR \ 567F62 895004 MOV 4 [EAX] , EDX
\ OP0 @ W@ 458B XOR OR \ 567F65 8B45FC MOV EAX , FC [EBP]
OP4 @ 2+ C@ OP2 @ 2+ C@ XOR OR \ X0=X2 \ ÃÐÓÁÎ
0= IF M\ 232 DTST
OP2 OPexcise
4889 OP1 @ W! \ MOV [EAX+4] , ECX
FALSE M\ 233 DTST
EXIT
THEN
THEN \ L: OP4 MOV EAX , X [EBP]
THEN \ L: OP2 MOV EAX , X [EBP]
THEN
DUP C@ C3 XOR
OP0 @ C@ A1 XOR OR \ MOV EAX , X
0= IF OP1
BEGIN ?EAX>ECX
IF T?EAX>ECX
ELSE CELL- ?OPlast >R
DUP @ :-SET U< R> OR
IF DROP FALSE TRUE
ELSE DUP >R
R@ CELL- @ CELL- @
OP0 @ 1+ @ =
IF R@ @ C@ FD AND A1 = \ MOV { EAX , X } | { X ,EAX }
DUP
IF F?EAX>ECX
ELSE 2DROP FALSE TRUE
THEN
ELSE DROP FALSE TRUE
THEN RDROP
THEN
THEN
UNTIL
IF M\ F0E DTST
CELL- \ DROP TRUE EXIT
BEGIN EAX>ECX0 UNTIL
BEGIN EAX>ECX UNTIL
DROP \ ." #"
OP1 ToOP0
FALSE
-5 ALLOT M\ F0F DTST
EXIT
THEN
THEN
M\ PPPP
DUP C@ C3 XOR
OP0 @ C@ 58 XOR OR \ POP EAX
0= IF OP1 \ TTTT IF ." ?EAX>ECX" THEN
BEGIN ?EAX>ECX
IF T?EAX>ECX
ELSE CELL-
?OPlast
OVER @ :-SET U< OR
OVER @ @ FF00FF AND 24008B = OR \ 8B0424 MOV ___ , [ESP]
IF DROP FALSE TRUE
ELSE DUP @ C@ 50 XOR \ PUSH EAX , X
\ 0= F?EAX>ECX
0= IF TRUE TRUE
ELSE CELL+ FALSE
THEN
THEN
THEN
UNTIL
IF M\ CA DTST \ ." $"
DUP OPexcise
CELL- \ DROP TRUE EXIT
?~EAX @
IF ECX:=EAX
ELSE BEGIN EAX>ECX0 UNTIL
THEN BEGIN EAX>ECX UNTIL
DROP
OP1 ToOP0
FALSE
-1 ALLOT
\ ?EAX:=ECX
M\ CB DTST
EXIT
THEN
THEN
OP1 @ @ 24048B50 = \ 50 PUSH EAX
\ 8B0424 MOV EAX , [ESP]
IF M\ E2 DTST
OP0 OPexcise
FALSE M\ E3 DTST
EXIT
THEN
DUP C@ C3 XOR
OP1 @ W@ D08B XOR OR \ 8BD0 MOV EDX , EAX
OP0 @ @ FFFFFF AND 95048B XOR OR \ 8B0495F0065A00 MOV EAX , 5A06F0 [EDX*4]
0= IF M\ 13C DTST
OP1 OPexcise
85 OP0 @ 2+ C! \ MOV EAX , 5982D8 [EAX*4]
FALSE M\ 13D DTST
EXIT
THEN
OP1 @ 2+ @
OP0 @ 1+ @ XOR
OP1 @ W@ 589 XOR OR \ 890577770700 MOV 77777 , EAX
OP0 @ C@ A1 XOR OR \ A177770700 MOV EAX , 77777
0= IF M\ 150 DTST
OP0 OPexcise
FALSE M\ 151 DTST
EXIT
THEN
OP2 @ :-SET U< IF TRUE EXIT THEN M\ PPPP
OP1 @ C@ A3 = \ MOV ' VVVV >BODY , EAX
IF OP2 @ C@ B8 = \ MOV EAX, # X
IF M\ 20E DTST
OP2 @ 1+ @ OP1 @ 1+ @
OP2 @ 2+ ! OP1 @ 1+ !
05C7 OP2 @ W!
OP0 @ OP1 !
FALSE
OP1 ToOP0 M\ 20F DTST
EXIT
THEN
OP2 @ W@ C033 = \ XOR EAX , EAX
IF M\ 30E DTST
3 ALLOT
OP0 @ @ OP0 @ 3 + !
05C7 OP2 @ W!
OP1 @ 1+ @ OP1 @ !
OP1 @ CELL+ 0!
OP1 @ 08 + OP1 !
FALSE
OP1 ToOP0 M\ 30F DTST
EXIT
THEN
OP3 @ :-SET U< IF TRUE EXIT THEN M\ PPPP
OP3 @ 1+ @
OP1 @ 1+ @ XOR
OP3 @ C@ 0A1 XOR OR \ MOV EAX , XX \ MOV XX , EAX \ EAX=
0= IF
OP2 @ C@ 025 = \ AND EAX , # ZZ
IF
M\ 530 DTST
OP3 @ 1+ @
OP2 @ 1+ @
OP3 OPexcise
OP2 OPexcise
OP1 OPexcise
OP0 0A OPinsert
2581 OP1 @ ! OP1 @ 6 + ! OP1 @ 2+ !
FALSE M\ 531 DTST
EXIT
THEN
OP2 @ W@ 408D =
IF
OP2 @ 2+ C@ FF = \ LEA EAX , FF [EAX]
IF
M\ 632 DTST
OP3 01 OPresize
0DFF OP3 @ W!
OP2 OPexcise
OP1 OPexcise
FALSE M\ 633 DTST
EXIT
THEN
THEN
THEN TRUE EXIT
THEN
\ $ 4444 TO VVVV
OP2 @ C@ A1 XOR \ MOV EAX , 44444
OP1 @ C@ 3D XOR OR \ CMP EAX , # 55555
0= IF M\ 218 DTST
OP2 @ 1+ @ OP2 @ 2+ !
3D81 OP2 @ W! \ CMP 44444 , # 55555
OP0 @ OP1 !
OP1 ToOP0
FALSE
EXIT M\ 219 DTST
THEN
\ OP0 @ C@ 58 = \ POP EAX
\ IF
OP1 @ C@ 50 = \ PUSH EAX
IF
\ 444 >R
OP2 @ C@ B8 = \ MOV EAX , # 5
IF M\ 1A DTST
68 OP2 @ C!
OP0 @ 2@ OP1 @ 2!
OP1 ToOP0
FALSE -1 ALLOT M\ 1B DTST
EXIT
THEN
THEN
OP1 @ W@ 4589 = \ MOV X [EBP], EAX EAX=
IF
\ 444 555
OP2 @ C@ B8 = \ MOV EAX , 5
IF M\ 1C DTST
OP2 @ 1+ @
45C7 OP2 @ W!
OP1 @ 2+ C@ OP2 @ 2+ C!
OP2 @ 3 + !
2 OP1 +!
OP0 @ 2@ OP1 @ 2!
OP1 ToOP0
FALSE -1 ALLOT M\ 1D DTST
EXIT
THEN
THEN
\ THEN
M\ PPPP
OP2 @ C@ B8 XOR \ MOV EAX , # 789
OP1 @ W@ C88B XOR OR \ MOV ECX , EAX
\ EAX=
0= IF M\ 830 DTST
B9 OP2 @ C!
OP1 OPexcise
FALSE M\ 831 DTST
EXIT
THEN
OP2 @ W@ 878D XOR \ LEA EAX , 1448 [EDI]
OP1 @ W@ 00FF XOR OR \ INC [EAX]
\ EAX=
0= IF M\ 930 DTST
FF OP2 @ C!
OP1 OPexcise
FALSE M\ 931 DTST
EXIT
THEN
OP2 @ @ FFFFFF AND 8D048D XOR \ LEA EAX , X [ECX*4]
OP1 @ W@ 1089 XOR OR \ MOV [EAX] , EDX
\ EAX=
0= IF M\ 5E DTST
1489 OP2 @ W! \ MOV [44444H+ECX*4], EDX
OP1 OPexcise
FALSE M\ 5F DTST
EXIT
THEN
M\ PPPP
DUP C@ 0C3 XOR
OP2 @ W@ D08B XOR OR \ MOV EDX , EAX
OP1 @ @ FFFFFF AND 8D1489 XOR OR \ MOV X [ECX*4] , EDX
\ EAX=
0= IF M\ 60 DTST
OP2 OPexcise
0489 OP1 @ W! \ MOV [44444H+ECX*4], EAX
FALSE M\ 61 DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 5589 XOR OR \ MOV F8 [EBP] , EDX
OP1 @ W@ 4589 XOR OR \ MOV F4 [EBP] , EAX
OP0 @ W@ 458B XOR OR \ MOV EAX , F8 [EBP]
0= IF M\ 64 DTST
C28B OP0 @ W! \ MOV EAX , EDX
-1 ALLOT
FALSE M\ 65 DTST
EXIT
THEN
OP2 @ W@ C033 XOR \ 57DD80 33C0 XOR EAX , EAX
OP1 @ W@ 4589 XOR OR \ 57DD82 8945F8 MOV F8 [EBP] , EAX
\ EAX=
0= IF M\ 6C DTST
OP2 OPexcise
OP0 4 OPresize 4 OP0 +!
45C7 OP1 @ W! OP1 @ 3 + 0! \ MOV F8 [EBP] , # 0
FALSE M\ 6D DTST
EXIT
THEN
OP2 @ @ 45C7D08B XOR \ MOV EDX , EAX MOV F8 [EBP] , # X
OP0 @ W@ C28B XOR OR \ MOV EAX , EDX
0= IF M\ 6E DTST
OP0 OPexcise
FALSE M\ 6F DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ C@ BA XOR OR \ MOV EDX , # 0
OP1 @ W@ 1088 XOR OR \ MOV [EAX] , DL
\ EAX=
0= IF M\ 70 DTST
OP2 @ 1+ C@
OP2 OPexcise
OP1 1 OPresize
00C6 OP1 @ W! \ MOV BYTE PTR [EAX] , 44H
OP1 @ 2+ C!
FALSE M\ 71 DTST
EXIT
THEN
OP2 @ W@ 808D XOR \ LEA EAX , X [EAX]
OP1 @ W@ 00C6 XOR OR \ MOV [EAX] , # 0
\ EAX=
0= IF M\ 72 DTST
80C6 OP2 @ W!
OP1 @ 2+ C@ OP1 @ C!
1 OP1 +!
OP1 OPexcise
FALSE M\ 73 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ D18B XOR OR \ 596C15 8BD1 MOV EDX , ECX
OP1 @ W@ 1089 XOR OR \ 596C17 8910 MOV [EAX] , EDX
\ EAX=
0= IF M\ 72 DTST
OP2 OPexcise
0889 OP1 @ W!
FALSE M\ 73 DTST
EXIT
THEN
OP2 @ @ FFFFFF AND 24448B XOR \ MOV EAX , 30 [ESP]
OP1 @ W@ F7FF AND 44FF XOR OR \ FF4424 INC DEC 30 [ESP]
\ EAX=
0= IF M\ 8A DTST
OP2 OPexcise
FALSE M\ 8B DTST
EXIT
THEN
OP2 @ C@ B8 XOR \ MOV EAX , # 1
OP1 @ @ FFFFFF AND 21C8D XOR OR \ LEA EBX , [EDX] [EAX]
\ EAX=
0= IF M\ AA DTST
OP2 1 OPresize
9A8D OP2 @ W!
OP1 OPexcise
FALSE M\ AB DTST
EXIT
THEN
OP2 @ C@ BA XOR \ MOV EDX , # 7FFFFFEE
OP1 @ W@ 9A8D XOR OR \ LEA EBX , 1 [EDX]
\ EAX=
0= IF M\ AC DTST
OP1 @ 2+ @
OP1 OPexcise
OP0 5 OPinsert
BB OP1 @ C! \ MOV EBX , #
OP2 @ 1+ @ + OP1 @ 1+ !
FALSE M\ AD DTST
EXIT
THEN
OP2 @ W@ C28B XOR \ 8BC2 MOV EAX , EDX
OP1 @ @ C28BC00B XOR OR \ 0BC0 OR EAX , EAX
\ 8BC2 MOV EAX , EDX
0= IF M\ C4 DTST
OP2 OPexcise
C28BD20B OP1 @ ! \ OR EDX , EDX MOV EAX , EDX
FALSE M\ C5 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ D18B XOR OR \ 58270A 8BD1 MOV EDX , ECX
OP1 @ W@ 4589 XOR OR \ 58270C 8945F8 MOV F8 [EBP] , EAX
OP0 @ W@ C28B XOR OR \ 58270F 8BC2 MOV EAX , EDX
0= IF M\ D4 DTST
OP2 OPexcise
C18B OP0 @ W! \ MOV EAX , ECX
FALSE M\ D5 DTST
EXIT
THEN
DUP C@ C3 XOR
\ 8BD0 MOV EDX , EAX
OP2 @ @ 501D08B XOR \ 010544440400 ADD 44444 , EAX
OP2 @ @ 589D08B <> AND OR \ 890544440400 MOV 44444 , EAX
OP0 @ W@ 458B XOR OR \ 8B4500 MOV EAX , 0 [EBP]
0= IF M\ D4 DTST
OP2 OPexcise
FALSE M\ D5 DTST
EXIT
THEN
OP2 @ @ 1589D08B = \ 8BD0 MOV EDX , EAX
\ 891555550500 MOV 55555 , EDX
IF M\ E8 DTST
0589 OP1 @ W! \ MOV 5800E0 , EAX
FALSE M\ E9 DTST
EXIT
THEN
OP2 @ W@ 408D XOR \ 8D4020 LEA EAX , 20 [EAX]
OP1 @ @ 458BC88B XOR OR \ 8BC8 MOV ECX , EAX
\ 8B45F8 MOV EAX , F8 [EBP]
0= IF M\ F2 DTST
488D OP2 @ W! \ LEA ECX , 20 [EAX]
OP1 OPexcise
FALSE M\ F3 DTST
EXIT
THEN
OP2 @ ?ChEAX
OP2 @ ^?EAX= AND
OP1 @ C@ B9 XOR OR \ 587AC6 B919000000 MOV ECX , # 19
\ EAX=
0= IF M\ FE DTST
OP2 OPexcise
FALSE M\ FF DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 5589 XOR OR \ 8955E8 MOV E8 [EBP] , EDX
OP1 ?EDX_[EBP] OR
OP0 @ W@ 458B XOR OR \ 8B45E8 MOV EAX , E8 [EBP]
0= IF M\ BC DTST
C28B OP0 @ W! \ MOV EAX , EDX
-1 ALLOT
FALSE M\ BD DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ @ 9788D08B XOR OR \ 8BD0 MOV EDX , EAX
\ 88973C100000 MOV 103C [EDI] , DL
\ EAX=
0= IF M\ 112 DTST
OP2 OPexcise
8788 OP1 @ W! \ MOV 103C [EDI] , AL
FALSE M\ 113 DTST
EXIT
THEN
OP2 @ C@ 50 XOR \ 50 PUSH EAX
OP1 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX
OP0 @ W@ 48B XOR OR \ 8B0424 MOV EAX , [ESP]
0= IF M\ 164 DTST
OP0 OPexcise
FALSE M\ 165 DTST
EXIT
THEN
M\ PPPP
OP3 @ :-SET U< IF TRUE EXIT THEN
\ $ SWAP 4444
OP2 @ W@ C28B = \ MOV EAX , EDX
IF OP1 @ W@ 4589 = \ MOV X [EBP] , EAX
IF M\ 60E DTST
1000 OP1 @ +! \ MOV X [EBP] , EDX
FALSE OP2 OPexcise M\ 60F DTST
EXIT
THEN
THEN
OP3 @ @ 408DC48B XOR \ MOV EAX , ESP LEA EAX , 8 [EAX]
OP1 @ W@ E08B XOR OR \ MOV ESP , EAX
0= IF M\ 8A DTST
-1 OP2 +!
24648D00 OP2 @ 1- ! \ LEA ESP , 8 [ESP]
OP3 OPexcise
OP1 OPexcise
FALSE M\ 8B DTST
EXIT
THEN
OP3 @ W@ C88B = \ 581B54 8BC8 MOV ECX , EAX
IF
DUP C@ C3 XOR
\ OP3 @ W@ C88B XOR OR \ 587733 8BC8 MOV ECX , EAX
OP2 @ W@ 428D XOR OR \ 587735 8D4201 LEA EAX , 1 [EDX]
OP1 @ W@ 4589 XOR OR \ 587738 894500 MOV 0 [EBP] , EAX
OP0 @ W@ C18B XOR OR \ 58773B 8BC1 MOV EAX , ECX
0= IF M\ 142 DTST
OP3 OPexcise
OP0 OPexcise
528D OP1 @ W! \ LEA EDX , 1 [EDX]
5589 OP0 @ W! \ MOV 0 [EBP] , EDX
FALSE M\ 143 DTST
EXIT
THEN
OP5 @ J-SET U< 0= IF \ GOTO 5SET
OP5 @ W@ C18B XOR \ 581B4C 8BC1 MOV EAX , ECX
OP4 @ W@ 840F XOR OR \ 581B4E 0F8400000000 JE 581B54 ( zz+14 )
0= IF M\ B0 DTST
OP3 OPexcise
FALSE M\ B1 DTST
EXIT
THEN THEN \ 5SET:
THEN
DUP C@ 0C3 XOR
OP3 @ @ C103D8F7 XOR OR \ F7D8 NEG EAX
\ 03C1 ADD EAX , ECX
OP1 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX
OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX
0= IF M\ CE DTST
OP3 OPexcise
C82B OP2 @ W! \ SUB ECX , EAX
4D89 OP1 @ W! \ MOV 0 [EBP] , ECX
FALSE M\ CF DTST
EXIT
THEN
OP3 @ @ C82BD08B XOR \ 8BD0 MOV EDX , EAX
\ 2BC8 SUB ECX , EAX
OP1 @ W@ 4D89 XOR OR \ 894D00 MOV 0 [EBP] , ECX
OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX
0= IF M\ D0 DTST
DUP C@ 0C3 =
IF OP3 OPexcise THEN
OP0 OPexcise
FALSE M\ D1 DTST
EXIT
THEN
DUP C@ C3 XOR
OP3 @ @ 418DD08B XOR OR \ 8BD0 MOV EDX , EAX
\ 8D41FF LEA EAX , FF [ECX]
OP1 @ W@ 4589 XOR OR \ 8945F8 MOV F8 [EBP] , EAX
OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX
0= IF M\ EA DTST
OP3 OPexcise
OP0 OPexcise
498D OP1 @ W! \ LEA ECX , FF [ECX]
4D89 OP0 @ W! \ MOV F8 [EBP] , ECX
FALSE M\ EB DTST
EXIT
THEN
OP3 @ 2+ C@
OP0 @ 2+ C@ XOR
OP3 @ W@ 5589 XOR OR \ 8955E8 MOV E8 [EBP] , EDX
OP2 ?EDX_[EBP] OR
OP1 ?EDX_[EBP] OR
OP0 @ W@ 458B XOR OR \ 8B45E8 MOV EAX , E8 [EBP]
0= IF M\ BC DTST
C28B OP0 @ W! \ MOV EAX , EDX
-1 ALLOT
FALSE M\ BD DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ C@ BA XOR OR \ BA2C000000 MOV EDX , # 2C
OP1 @ @ 458B1001 XOR OR \ 0110 ADD [EAX] , EDX
\ 8B45FC MOV EAX , FC [EBP]
0= IF M\ 14C DTST
OP1 OPexcise
OP1 1 OPresize
0081 OP1 @ W! \ ADD [EAX] , # 2C
FALSE M\ 14D DTST
EXIT
THEN
OP2 @ C@ B8 XOR \ 57DDE3 B844440400 MOV EAX , # 44444
OP1 @ W@ 81 XOR OR \ 57DDE8 81002C000000 ADD [EAX] , # 2C
OP0 @ W@ 458B XOR OR \ 57DDEE 8B45FC MOV EAX , FC [EBP]
0= IF M\ 14E DTST
OP2 @ 1+ @ OP2 @ 2+ !
OP1 @ 2+ @ OP1 @ 1+ !
0581 OP2 @ W! \ ADD 44444 , # 2C
5 OP1 +!
OP1 OPexcise
FALSE M\ 14F DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 45C7 XOR OR \ MOV F8 [EBP] , # 3
OP1 @ C@ B9 XOR OR \ MOV ECX , # 4
OP0 @ W@ 458B XOR OR \ MOV EAX , F8 [EBP]
0= IF M\ 3E DTST
OP2 @ 3 + @ OP2 @ 1+ !
B8 OP2 @ C!
OP1 0 OPinsert -2 OP2 +!
OP2 OPexcise \ MOV EAX , # 3
4589 OP0 @ W! \ MOV F8 [EBP] , EAX
FALSE M\ 3F DTST
EXIT
THEN
OP3 @ :-SET U< IF TRUE EXIT THEN
OP3 @ C@ A1 XOR \ 57E2D7 A108E15700 MOV EAX , 57E108
OP2 @ W@ 4589 XOR OR \ 57E2DC 8945EC MOV EC [EBP] , EAX
OP1 @ W@ D08B XOR OR \ 57E2DF 8BD0 MOV EDX , EAX
\ EAX=
0= IF M\ 152 DTST
OP3 1 OPresize
158B OP3 @ W! \ MOV EDX , 57E108
5589 OP2 @ W! \ MOV EC [EBP] , EDX
OP1 OPexcise
FALSE M\ 153 DTST
EXIT
THEN
OP3 @ C@ 58 XOR \ POP EAX
OP2 @ @ FFFFFF AND FF408D XOR OR \ LEA EAX , FF [EAX]
OP1 @ C@ 50 XOR OR \ PUSH EAX
\ EAX=
0= IF M\ D30 DTST
\ OP2 1 OPresize
240CFF OP2 @ ! \ DEC DWORD PTR [ESP]
OP3 OPexcise
OP1 OPexcise
FALSE M\ D31 DTST
EXIT
THEN
DUP C@ C3 XOR
OP3 @ @ 458BD08B XOR OR \ 8BD0 MOV EDX , EAX MOV EAX , 0 [EBP]
OP1 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX
OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX
0= IF M\ 166 DTST
OP3 OPexcise
OP0 OPexcise
558B OP1 @ W! \ MOV EDX , 0 [EBP]
5589 OP0 @ W! \ MOV FC [EBP] , EAX
FALSE M\ 167 DTST
EXIT
THEN
DUP C@ C3 XOR
OP3 @ W@ D08B XOR OR \ 5822F8 8BD0 MOV EDX , EAX
OP2 @ W@ 458B XOR OR \ 5822FA 8B4508 MOV EAX , 8 [EBP]
OP1 @ W@ 1089 XOR OR \ 5822FD 8910 MOV [EAX] , EDX
OP0 @ W@ 458B XOR OR \ 5822FF 8B450C MOV EAX , C [EBP]
0= IF M\ 156 DTST
OP3 OPexcise
558B OP2 @ W! \ MOV EDX , 8 [EBP]
0289 OP1 @ W! \ MOV [EDX] , EAX
FALSE M\ 157 DTST
EXIT
THEN
OP4 @ :-SET U< IF TRUE EXIT THEN
OP5 @ :-SET U< IF TRUE EXIT THEN
OP5 @ C@ B8 XOR \ 596994 B812000000 MOV EAX , # 12
OP4 @ W@ 4589 XOR OR \ 596999 8945F4 MOV F4 [EBP] , EAX
OP3 @ W@ 4589 XOR OR \ 59699C 8945F0 MOV F0 [EBP] , EAX
OP2 @ C@ BA XOR OR \ 59699F BA00000080 MOV EDX , # 80000000
OP1 @ W@ D02B XOR OR \ 5969A4 2BD0 SUB EDX , EAX
\ EAX=
0= IF M\ A6 DTST
OP5 @ 1+ @ NEGATE OP2 @ 1+ +!
OP1 OPexcise
FALSE M\ A7 DTST
EXIT
THEN
TRUE
;
\ : SSSSSS ;
\ TRUE VALUE ?C-JMP
FALSE VALUE ?C-JMP
\ $ - óêàçûâàåò íà ôðàãìåíò èñõîäíîãî òåêñòà, îïòèìèçèðóåìûé
\ äàííûì ìåòîäîì
: OPT-RULES ( ADDR -- ADDR' FLAG )
BEGIN M\ -1 DTST
OP0 @ :-SET U< IF TRUE EXIT THEN
OP0 @ W@ 408D = \ LEA EAX, X [EAX]
WHILE M\ 2 DTST
OP0 @ 2+ C@ C>S OFF-EAX + TO OFF-EAX
OP1 ToOP0
-3 ALLOT M\ 3 DTST
REPEAT M\ DUP VPPP !
OP0 @ C@ 05 = ~BR-OPT AND \ ADD EAX, # X
IF M\ 4 DTST
OP0 @ 1+ @ OFF-EAX + TO OFF-EAX
OP1 ToOP0
FALSE -5 ALLOT M\ 5 DTST
EXIT
THEN
M\ PPPP
OP0 @ W@ 808D = \ LEA EAX, X [EAX]
IF M\ 6 DTST
OP0 @ 2+ @ OFF-EAX + TO OFF-EAX
OP1 ToOP0
-6 ALLOT FALSE M\ 7 DTST
EXIT
THEN
OFF-EAX
OP0 @ W@ C033 = AND \ XOR EAX , EAX
IF M\ 4A DTST
B8 OP0 @ C!
OFF-EAX OP0 @ 1+ !
0 TO OFF-EAX
3 ALLOT FALSE M\ 4B DTST
EXIT
THEN
M\ PPPP
OP0 @ @ 3FFFFF AND
05048D = \ LEA EAX, X [EAX*_]
IF
\ $ 4444 CELLS
OP1 @ :-SET U< 0=
IF
OP1 @ C@ B8 XOR \ MOV EAX, # X1
OP0 @ 3 + @ \ X=0
OR 0=
IF M\ 8 DTST
OP1 @ 1+ @ OP0 @ @ C00000 AND 16 RSHIFT
LSHIFT
OP1 @ 1+ !
OP1 ToOP0 \ FIX
FALSE -7 ALLOT M\ 9 DTST
EXIT
THEN
THEN
\ $ CELLS 4444 +
OFF-EAX OP0 @ 3 + +!
0 TO OFF-EAX
THEN
M\ PPPP
OP0 @ C@ B8 = \ MOV EAX, # X
IF OFF-EAX OP0 @ 1+ +!
0 TO OFF-EAX
OP0 @ 1+ @ 0= \ MOV EAX, # 0
IF M\ A DTST
C033 OP0 @ W! \ XOR EAX, EAX
-3 ALLOT
\ FALSE EXIT
M\ B DTST
THEN
OP1 @ :-SET U< IF TRUE EXIT THEN
DUP C@ 0C3 XOR
OP1 @ W@ 45C7 XOR OR 0= \ MOV F8 [EBP] , # 5
IF OP1 @ 2+ C@ C>S OFF-EBP U<
IF
M\ 10A DTST
OP1 OPexcise
\ FALSE EXIT
M\ 10B DTST
THEN
THEN
THEN
M\ PPPP
DUP C@ C3 =
IF OFF-EBP >R
5555 DP @ !
FALSE OP0 -EBPCLR OP0 -EBPCLR OP0 -EBPCLR OP0 -EBPCLR
IF M\ 20B DTST
R> TO OFF-EBP FALSE EXIT
THEN R> TO OFF-EBP
THEN
OFF-EAX
OP0 @ W@ C28B = \ MOV EAX , EDX
OP0 @ W@ C18B = OR AND \ MOV EAX , ECX
IF M\ D6 DTST
OFF-EAX DUP SHORT?
IF 0418D C18B - OP0 @ +! C,
ELSE 0828D C28B - OP0 @ +! ,
THEN \ LEA EAX, OFF-EBP [EDX]
0 TO OFF-EAX
FALSE M\ D7 DTST
EXIT
THEN
OP0 @ 2+ @ 5 XOR
OP0 @ W@ C069 XOR OR \ 59A095 69C005000000 IMUL EAX , EAX , # 5
0= IF M\ 8E DTST
80048D OP0 @ ! \ MOV EAX , [EAX*4+EAX]
-3 ALLOT
FALSE M\ 8F DTST
EXIT
THEN
OP0 @ W@ D28B = \ MOV EDX, EDX \ C-DO
IF OP0 OPexcise TRUE EXIT
THEN
OP0 @ @ 1004583 = \ 587890 83450001 ADD 0 [EBP] , # 1
IF M\ 146 DTST
45FF OP0 @ W! \ INC 0 [EBP]
-1 ALLOT
FALSE M\ 147 DTST
EXIT
THEN
M\ PPPP
OP1 @ :-SET U< IF TRUE EXIT THEN
?~EAX 0!
OP1 @ @ 00FFFFFD AND 244489 XOR \ MOV 8 [ESP] , EAX
OP0 @ @ FFFFFFFD AND
OP1 @ @ FFFFFFFD AND XOR OR \ MOV EAX , 8 [ESP]
0= IF M\ 1F0 DTST
OP1 ToOP0
-4 ALLOT
FALSE M\ 1F1 DTST
EXIT
THEN
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR
OP1 @ W@ 5089 XOR OR \ MOV C [EAX] , EDX
OP0 @ W@ 408B XOR OR \ MOV EAX , C [EAX]
0= IF M\ 2F0 DTST
C28B OP0 @ W! \ MOV EAX , EDX
-1 ALLOT
FALSE M\ 2F1 DTST
EXIT
THEN
M\ PPPP
OP1 @ @ 008B0889 = \ MOV [EAX] , ECX MOV EAX , [EAX]
IF M\ F0 DTST
C18B OP0 @ W!
FALSE M\ F1 DTST
EXIT
THEN
OP0 @ C@ 58 XOR \ POP EAX
OP0 @ ^?EAX= AND 0=
\ OP0 @ ^?EAX= 0=
IF ?EAX=RULES EXIT
THEN
OP1 @ @ 4503C033 = \ XOR EAX , EAX ADD EAX , F8 [EBP]
IF M\ 10C DTST
OP1 OPexcise
8B OP0 @ C! \ MOV EAX , F8 [EBP]
FALSE M\ 10D DTST
EXIT
THEN
M\ PPPP
OP1 @ @ 048DC033 = \ XOR EAX , EAX LEA EAX , 57B680 [EAX*4]
IF OP0 @ 2+ C@ 85 =
IF M\ 62 DTST
OP1 OPexcise
B8 OP0 @ C! \ MOV EAX , # 57B680
OP0 @ 3 + @ OP0 @ 1+ !
-2 ALLOT
FALSE M\ 63 DTST
EXIT
THEN
THEN
?C-JMP
IF OP0 @ C@ C3 XOR
OP1 @ C@ E8 XOR OR 0= \ CALL X RET
IF M\ 0C DTST
OP1 @ 1+!
OP1 ToOP0
FALSE -6 ALLOT
SetJP 5 ALLOT M\ 0D DTST
EXIT
THEN
THEN
\ TRUE EXIT
\ $ CELLS 444 + @
OP1 @ W@ 38FF AND 008D = \ LEA EAX , ____
IF OP0 @ W@ 008B = \ MOV EAX , [EAX]
IF
M\ 0E DTST
8B OP1 @ C!
OP1 ToOP0
FALSE -2 ALLOT M\ 0F DTST
EXIT
THEN
OP0 @ @ FFFEFF AND 00B60F = \ MOVZX EAX , BYTE|WORD PTR [EAX]
\ LEA EAX , ____
IF
M\ 10E DTST
OP0 @ W@ OP1 @ 2@ ( 2DUP U. U. ) OP1 @ 1+ ( 0 IF THEN ) 2!
OP1 @ W!
OP1 ToOP0
FALSE -2 ALLOT M\ 10F DTST
EXIT
THEN
THEN
OP0 @ W@ 4589 XOR \ MOV X [EBP], EAX
OP0 @ 2+ C@
OP1 @ 2+ C@ XOR OR 0= \ (FALG &( X1=X ))
IF
OP1 @ W@ 458B = \ MOV EAX, 1X [EBP] \ $ DROP DUP
IF M\ 10 DTST
OP1 ToOP0
FALSE -3 ALLOT M\ 11 DTST
EXIT
THEN
THEN
OP1 @ C@ B8 = \ MOV EAX, # X \ eax=
IF OP0 @ W@
DUP D8F7 = \ NEG EAX
IF DROP M\ 14 DTST
OP1 @ 1+ @ NEGATE OP1 @ 1+ ! \ MOV EAX, # -X
OP1 ToOP0
FALSE -2 ALLOT M\ 15 DTST
EXIT
THEN
DUP D0F7 = \ MOV EAX, # X NOT EAX
IF DROP M\ 16 DTST
OP1 @ 1+ @ INVERT OP1 @ 1+ ! \ MOV EAX, # ~X
OP1 ToOP0
FALSE -2 ALLOT M\ 17 DTST
EXIT
THEN
DUP 008B = \ MOV EAX, # X MOV EAX, [EAX]
IF DROP M\ 18 DTST
A1 OP1 @ C! \ MOV EAX, X
OP1 ToOP0
FALSE -2 ALLOT M\ 19 DTST
EXIT
THEN
DROP
OP0 @ @ FFFFFF AND 85448B = \ MOV EAX, # X MOV EAX , X1 [EBP] [EAX*4]
IF M\ 518 DTST
OP0 @ 3 + C@
OP1 @ 1+ @ CELLS +
458B OP1 @ W! \ MOV EAX , X [EBP]
OP1 @ 2+ C!
OP1 ToOP0
FALSE -6 ALLOT M\ 519 DTST
EXIT
THEN
THEN
OP1 @ W@ 5589 XOR \ MOV X1 [EBP] , EDX
OP0 @ W@ 4503 XOR OR \ ADD EAX , X0 [EBP]
OP1 @ 2+ C@ OP0 @ 2+ C@ XOR OR \ X1=X0
0= IF M\ 418 DTST
02048D OP0 @ ! \ lea EAX, [EAX+EDX]
FALSE M\ 419 DTST
EXIT
THEN
OP1 @ W@ 4D89 XOR \ MOV 4 [EBP] , ECX
OP0 @ W@ 558B XOR OR \ MOV EDX , 4 [EBP]
OP1 @ 2+ C@ OP0 @ 2+ C@ XOR OR \ X1=X0
0= IF M\ 418 DTST
D18B OP0 @ W! \ MOV EDX , ECX
-1 ALLOT
FALSE M\ 419 DTST
EXIT
THEN
M\ PPPP
OP1 @ W@ 408D XOR \ LEA EAX , Y [EAX]
OP0 @ @ 85048D FFFFFF AND XOR OR 0= \ LEA EAX , X [EAX*4]
IF M\ 30E DTST
OP1 @ 2+ C@ C>S CELLS OP0 @ 3 + +!
FALSE
OP1 OPexcise M\ 30F DTST
EXIT
THEN
OP1 @ @ FFFFFF AND 85048D XOR \ LEA EAX , X [EAX*4]
OP0 @ @ FFFFFF AND 02048D XOR OR \ MOV EAX , [EDX] [EAX]
OP1 @ 3 + @ 80 + FFFFFF00 AND OR 0=
IF M\ 50E DTST
8244 OP1 @ 1+ W!
OP1 ToOP0
FALSE
-6 ALLOT M\ 50F DTST
EXIT
THEN
OP0 @ W@ FFFD AND 5589 = \ MOV EDX , X [EBP]
IF OP1
BEGIN MOV_EDX_[EBP]
UNTIL
IF M\ A0E DTST
OP1 ToOP0
FALSE
-3 ALLOT M\ A0F DTST
EXIT
THEN
THEN
DUP C@ 0C3 XOR
OP1 @ W@ 4589 XOR OR \ 5695B0 8945FC MOV FC [EBP] , EAX
OP0 @ W@ 6DF7 XOR OR \ 5695B3 F76DFC IMUL FC [EBP]
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR OR
OP0 @ 2+ C@ C>S OFF-EBP > OR
0= IF M\ 32A DTST
E8F7 OP1 @ W!
OP1 ToOP0
FALSE -4 ALLOT M\ 32B DTST
EXIT
THEN
M\ PPPP
OP0 @ W@ E7FF AND 4589 = \ TTTT AND \ MOV X [EBP] , EAX|EDX|EBX|ECX
IF OFF-EBP >R OP0 @ 2+ C@ C>S CELL+ TO OFF-EBP
FALSE OP1 -EBPCLR
IF R> TO OFF-EBP FALSE EXIT THEN
R> TO OFF-EBP
THEN
OP1 @ W@ CA8B XOR \ 8BCA MOV ECX , EDX
OP0 @ @ FFFFFF AND 88048D XOR OR \ 8D0488 LEA EAX , [EAX] [ECX*4]
0= IF M\ 42A DTST
90048D OP0 @ !
FALSE M\ 42B DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ W@ CA8B XOR OR \ 8BCA MOV ECX , EDX
OP0 @ @ FFFFFF AND 90048D XOR OR \ 8D0488 LEA EAX , [EAX] [EDX*4]
0= IF M\ 62A DTST
OP1 OPexcise
FALSE M\ 62B DTST
EXIT
THEN
OP1 @ @ FFFFFF AND 8D0C8D XOR \ 8D0C8D00000000 LEA ECX , 0 [ECX*4]
OP1 @ 3 + @ XOR
OP0 @ @ FFFFFF AND 1048D XOR OR \ 8D0401 LEA EAX , [ECX] [EAX]
0= IF M\ 52A DTST
88048D OP1 @ !
OP1 ToOP0
FALSE -7 ALLOT M\ 52B DTST
EXIT
THEN
OP1 @ C@ B8 XOR \ MOV EAX , # 58DDE8
OP0 @ @ FFFFFF AND 90048D XOR OR \ LEA EAX , [EAX] [EDX*4]
0= IF M\ 4C DTST
OP1 @ 1+ @
OP1 OPexcise
95 OP0 @ 2+ C! ,
FALSE M\ 4D DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ @ 048DD9F7 XOR OR \ NEG ECX LEA EAX , [ECX] [EAX]
0= IF M\ 90 DTST
C12B OP1 @ W!
OP1 ToOP0
FALSE -3 ALLOT M\ 91 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ @ FFFFFF AND 244C8B XOR OR \ MOV ECX , 20 [ESP]
OP0 @ W@ C12B XOR OR \ 59A13C 2BC1 SUB EAX , ECX
0= IF M\ 92 DTST
442B OP1 @ W! \ SUB EAX , 20 [ESP]
OP1 ToOP0
FALSE -2 ALLOT M\ 93 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ W@ D8B XOR OR \ MOV ECX , 599825
OP0 @ W@ C12B XOR OR \ SUB EAX , ECX
0= IF M\ 92 DTST
052B OP1 @ W! \ SUB EAX , 599825
OP1 ToOP0
FALSE -2 ALLOT M\ 93 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ C@ B8 XOR OR \ 59A227 B841000000 MOV EAX , # 1000
OP0 @ C@ A3 XOR OR \ 59A22C A375995900 MOV 599975 ( Char1Glob+5 ) , EAX
0= IF M\ 98 DTST
OP1 @ 1+ @ OP0 @ 1+ @
OP1 @ 2+ ! OP0 @ 1+ !
05C7 OP1 @ W! \ MOV 599975 , # 1000
OP1 ToOP0
FALSE M\ 99 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ C@ B8 XOR OR \ MOV EAX , # 2000
OP0 @ @ FFFFFF AND 244489 XOR OR \ MOV 1C [ESP] , EAX
0= IF M\ A8 DTST
OP1 @ 1+ @ ,
OP1 OPexcise
C7 OP0 @ C! \ MOV 1C [ESP] , # 2000
FALSE M\ A9 DTST
EXIT
THEN
OP1 @ C@ B8 XOR \ B8E0005800 MOV EAX , # 5800E0
OP0 @ W@ 1001 XOR OR \ 0110 ADD [EAX] , EDX
0= IF M\ E4 DTST
OP1 @ 1+ @
1501 OP0 @ W! , \ ADD 5800E0 , EDX
FALSE M\ E5 DTST
EXIT
THEN
OP1 @ C@ B8 XOR \ 580185 B855550500 MOV EAX , # 55555
OP0 @ W@ 1089 XOR OR \ 58018A 8910 MOV [EAX] , EDX
0= IF M\ EE DTST
OP1 @ 1+ @
1589 OP0 @ W! , \ MOV 5800E0 , EDX
FALSE M\ EF DTST
EXIT
THEN
OP1 @ @ 1501D08B = \ 8BD0 MOV EDX , EAX
\ 011560015800 ADD 580160 , EDX
IF M\ E6 DTST
0501 OP0 @ W! \ ADD 5800E0 , EAX
FALSE M\ E7 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ @ 0A4CB60F XOR OR \ MOVZX ECX , BYTE PTR 2 [EDX] [ECX]
OP0 @ W@ C133 XOR OR \ XOR EAX , ECX
0= IF M\ A0 DTST
OP0 OPexcise
0A443200 OP0 @ !
OP0 @ 1+ @ OP0 @ ! \ XOR AL , BYTE PTR [EAX+EDX+44H]
-1 ALLOT
FALSE M\ A1 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ @ FFFFFF AND 850C8D XOR OR \ LEA ECX , 58E188 ( rson+5 ) [EAX*4]
OP0 @ W@ 1189 XOR OR \ 596738 8911 MOV [ECX] , EDX
0= IF M\ A2 DTST
OP0 OPexcise
1489 OP0 @ W!
FALSE M\ A3 DTST
EXIT
THEN
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR
OP1 @ W@ 5589 XOR OR \ 8955F8 MOV F8 [EBP] , EDX
0= IF
OP0 @ W@ 450B = \ 0B45F8 OR EAX , F8 [EBP]
IF M\ B2 DTST
C20B OP0 @ W! \ OR EAX , EDX
-1 ALLOT
FALSE M\ B3 DTST
EXIT
THEN
OP0 @ W@ 453B = \ 3B45F8 CMP EAX , F8 [EBP] !!!
IF M\ BE DTST
C23B OP0 @ W! \ CMP EAX , EDX
-1 ALLOT
FALSE M\ BF DTST
EXIT
THEN
THEN
OP1 @ W@ C28B XOR \ 8BC2 MOV EAX , EDX
OP0 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX
0= IF M\ C0 DTST
5589 OP0 @ W! \ 8955FC MOV FC [EBP] , EDX
FALSE M\ C1 DTST
EXIT
THEN
DUP C@ C3 XOR
OP1 @ W@ D08B XOR OR \ 8BD0 MOV EDX , EAX
OP0 @ W@ 45C7 XOR OR \ C7450001000000 MOV 0 [EBP] , # 1
0= IF M\ C6 DTST
OP1 OPexcise
FALSE M\ C7 DTST
EXIT
THEN
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR
OP1 @ W@ 4589 XOR OR \ 58251C 894500 MOV 0 [EBP] , EAX
OP0 @ W@ 45C7 XOR OR \ 58251F C7450001000000 MOV 0 [EBP] , # 1
0= IF M\ C6 DTST
OP1 OPexcise
FALSE M\ C7 DTST
EXIT
THEN
DUP C@ C3 XOR
OP1 @ @ 0501D08B XOR OR \ 8BD0 MOV EDX , EAX
\ 011510025800 ADD 580210 , EAX
0= IF M\ E8 DTST
OP1 OPexcise
FALSE M\ E9 DTST
EXIT
THEN
DUP C@ C3 XOR
OP1 @ C@ B9 XOR OR \ B94C025800 MOV ECX , # 58024C
OP0 @ W@ 1C7 XOR OR \ C70189ABCDEF MOV [ECX] , # EFCDAB89
0= IF M\ EC DTST
OP0 @ 2+ @ OP1 @ 1+ @
OP1 @ 2+ ! OP0 @ 1+ !
05C7 OP1 @ W! \ MOV 58024C , # EFCDAB89
OP1 ToOP0
-1 ALLOT
FALSE M\ ED DTST
EXIT
THEN
OP1 @ C@ B8 XOR \ 587294 B801000000 MOV EAX , # 1
OP0 @ W@ C88B XOR OR \ 587299 8BC8 MOV ECX , EAX
0= IF M\ F6 DTST
OP1 @ 1+ @
OP0 @ 1+ !
B9 OP0 @ C! \ MOV ECX , # 1
3 ALLOT
FALSE M\ F7 DTST
EXIT
THEN
OP1 @ C@ B9 XOR \ B901000000 MOV ECX , # 1
OP0 @ W@ D9F7 XOR OR \ F7D9 NEG ECX
0= IF M\ F8 DTST
OP1 @ 1+ @ NEGATE
OP1 @ 1+ !
OP1 ToOP0
-2 ALLOT
FALSE M\ F9 DTST
EXIT
THEN
DUP C@ C3 XOR
OP1 @ C@ B9 XOR OR \ B919000000 MOV ECX , # 19
OP0 @ W@ F7FF AND E0D3 XOR OR \ D3E8 SHR|SHL EAX , CL
0= IF M\ 100 DTST
OP1 @ 1+ @
OP1 OPexcise
C1 OP0 @ C! C,
FALSE M\ 101 DTST
EXIT
THEN
OP1 @ C@ B8 XOR \ B801000000 MOV EAX , # 1
OP0 @ @ FFFFFF AND 85048B XOR OR \ 8B04851CDE5700 MOV EAX , 57DE1C [EAX*4]
0= IF M\ 148 DTST
A1 OP1 @ C! \ MOV EAX , 1
OP0 @ 3 + @
OP1 @ 1+ @ CELLS + OP1 @ 1+ !
OP0 OPexcise
FALSE M\ 149 DTST
EXIT
THEN
OP1 @ W@ C033 XOR \ 33C0 XOR EAX , EAX
OP0 @ @ FFFFFF AND 85048B XOR OR \ 8B04851CDE5700 MOV EAX , 57DE1C [EAX*4]
0= IF M\ 348 DTST
2 OP0 +!
A1 OP0 @ C! \ MOV EAX , 57DE1C
OP1 OPexcise
FALSE M\ 349 DTST
EXIT
THEN
OP1 @ C@ B8 XOR \ B803000000 MOV EAX , # 3
OP0 @ W@ F7FF AND E0C1 XOR OR \ C1E804 SH[R|L] EAX , 4
0= IF M\ 48 DTST
OP1 @ 1+ @
OP0 @ 2+ C@ OP0 @ W@ 0x800 AND IF RSHIFT ELSE LSHIFT THEN
OP1 @ 1+ !
OP0 OPexcise
FALSE M\ 49 DTST
EXIT
THEN
DUP C@ C3 XOR
OP1 @ W@ CA8B XOR OR \ 582148 8BCA MOV ECX , EDX
OP0 @ W@ C12B XOR OR \ 58214A 2BC1 SUB EAX , ECX
0= IF M\ 180 DTST
C22B OP1 @ W! \ SUB EAX , ECX
OP0 OPexcise
FALSE M\ 181 DTST
EXIT
THEN
M\ PPPP
OP2 @ :-SET
\ TTTT IF ." T=" 2DUP HEX U. U. THEN
U< IF TRUE EXIT THEN
\ $ - DUP
OP2 @ W@ D8F7 XOR
OP1 @ W@ 4501 XOR OR 0=
IF M\ 118 DTST
OP2 OPexcise
29 OP1 @ C!
FALSE
EXIT M\ 119 DTST
THEN
\ $ - -
OP2 @ @ 4503D8F7 XOR \ NEG EAX ADD EAX, X [EBP]
OP0 @ W@ D8F7 XOR OR 0= \ NEG EAX
IF M\ 20 DTST
OP1 @ @ 452B OR OP2 @ ! \ SUB EAX, X [EBP]
OP2 ToOP0
-4 ALLOT
FALSE M\ 21 DTST
EXIT
THEN
M\ PPPP
OP0 @ W@ ADD|XOR|OR|AND= \ $ 4444 OR
IF
OP2 @ W@ 4589 XOR \ MOV X1 [EBP], EAX
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR 0=
IF
OP1 @ W@
DUP 0878B = \ MOV EAX, X [EDI]
IF DROP M\ 22 DTST
OP0 @ C@ 8700 + OP2 @ W!
OP1 @ 2+ @ OP2 @ 2+ !
OP2 ToOP0
FALSE -6 ALLOT M\ 23 DTST
EXIT
THEN
\ MOV X1 [EBP], EAX
DUP 0458B = \ MOV EAX , X [EBP]
\ ADD|XOR|OR|AND=
IF DROP M\ 122 DTST
OP0 @ C@ 4500 + OP1 @ W!
OP1 ToOP0
FALSE -3 ALLOT M\ 123 DTST
EXIT
THEN
FF AND
\ MOV X1 [EBP], EAX
DUP 0B8 = \ MOV EAX, # X
\ ADD|XOR|OR|AND=
IF DROP M\ 24 DTST
OP0 @ C@ 2+ OP1 @ C!
OP1 ToOP0
FALSE -3 ALLOT M\ 25 DTST
EXIT
THEN
\ MOV X1 [EBP], EAX
DUP 0A1 = \ MOV EAX, X
\ ADD|XOR|OR|AND=
IF DROP M\ 26 DTST
OP0 @ C@ 500 +
OP1 @ 1+ @ OP1 @ 2+ !
OP1 @ W!
OP1 ToOP0
FALSE -2 ALLOT M\ 27 DTST
EXIT
THEN
DROP
THEN
OP2 @ W@ 45C7 XOR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR
OP1 @ C@ B8 XOR OR 0= \ MOV EAX , # 4
\ ADD|XOR|OR|AND=
IF M\ 124 DTST
OP2 @ 3 + @ OP1 @ 1+ @
C300 OP0 @ 2+ ! OP0 @ EXECUTE
OP1 @ 1+ ! DROP
OP1 ToOP0
FALSE -3 ALLOT M\ 125 DTST
EXIT
THEN
OP1 @ W@ 4D89 XOR \ MOV F4 [EBP] , ECX
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR OR 0= \ ADD|XOR|OR|AND=
IF M\ 12 DTST
C1 OP0 @ 1+ C! \ XOR EAX , ECX
FALSE -1 ALLOT M\ 13 DTST
EXIT
THEN
\ ADD|XOR|OR|AND=
OP0 @ 2+ C@ OP1 -EBPLIT NIP
DUP @ W@ 45C7 = \ MOV F8 [EBP] , # 2710
OVER @ 2+ C@ OP0 @ 2+ C@ = AND
IF OP0 @ W@ 4503 = \ ADD EAX , F8 [EBP]
IF M\ 46 DTST
@ 3 + @ OFF-EAX + TO OFF-EAX
OP1 ToOP0
FALSE -3 ALLOT M\ 47 DTST
EXIT
THEN
THEN
DROP
OP0 @ 2+ C@
OP1 @ 2+ C@ XOR
OP1 @ W@ 45C7 XOR OR \ 599B95 C745F401000000 MOV F4 [EBP] , # 1
\ ADD|XOR|OR|AND=
0= IF M\ 8C DTST
OP0 @ C@ 2+ OP0 @ C!
2 ALLOT
OP1 @ 3 + @ OP0 @ 1+ !
FALSE M\ 8D DTST
EXIT
THEN
THEN
M\ PPPP
\ OP0 @ W@ 4D8B =
OP0 @ W@ 558B = \ MOV EDX , X [EBP]
IF \ OP-1 MOV EAX , FC [EBP]
OP0 @ 2+ C@ OP1 -EBPLIT NIP
DUP @ W@ 45C7 = \ MOV F8 [EBP] , # 2710
OVER @ 2+ C@ OP0 @ 2+ C@ = AND
IF M\ 50 DTST
-2 ALLOT
BA OP0 @ C!
@ 3 + @ ,
FALSE M\ 51 DTST
EXIT
THEN
DROP
THEN
OP0 @ W@ 4539 = \ CMP X [EBP] , EAX
IF
OP1 @ W@ 5589 XOR \ MOV X [EBP] , EDX
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR OR 0= \
IF M\ 128 DTST
D03B OP0 @ W!
FALSE -1 ALLOT M\ 129 DTST
EXIT
THEN
OP1 @ C@ 0B8 XOR \ MOV EAX, # X
OP2 @ W@ 4589 XOR OR \ MOV X1 [EBP], EAX
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR 0=
IF M\ 28 DTST
3D OP2 @ C!
OP1 @ 1+ @ OP2 @ 1+ !
OP2 ToOP0
FALSE -6 ALLOT M\ 29 DTST
EXIT
THEN
\ $ 4444 @ U<
OP1 @ C@ 0A1 XOR \ MOV EAX, # X
OP2 @ W@ 4589 XOR OR \ MOV X1 [EBP], EAX
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR 0=
IF M\ 2A DTST
053B OP2 @ W!
OP1 @ 1+ @ OP2 @ 2+ !
OP2 ToOP0
FALSE -5 ALLOT M\ 2B DTST
EXIT
THEN
THEN
DUP W@ 458B XOR \ MOV EAX , FC [EBP]
OP0 @ W@ 1089 XOR OR \ MOV [EAX] , EDX
OP1 @ W@ 558B XOR OR 0= \ MOV EDX , X [EBP] \ !?
IF \ OP-1 MOV EAX , FC [EBP]
OP2 @ W@ 408D = \ LEA EAX , 4 [EAX] \ $ CELL+ !
IF M\ 430 DTST
OP2 @ 2+ C@
OP2 OPexcise
5089 OP0 @ W! C,
FALSE M\ 431 DTST
EXIT
THEN
OP3 @ :-SET U< IF TRUE EXIT THEN
\ $ 44444 !
OP3 @ 2+ C@
OP1 @ 2+ C@ =
IF OP3 @ W@ 4589 = \ MOV X [EBP] , EAX
IF OP2 @ C@ B8 = \ MOV EAX, X
IF M\ 30 DTST
A3 OP3 @ C!
OP2 @ 1+ @ OP3 @ 1+ !
OP3 ToOP0
FALSE -8 ALLOT M\ 31 DTST
EXIT
THEN
OP2 @ W@ 878D = \ LEA EAX, X [EDI]
IF M\ 230 DTST \ ???
OP3 OPexcise
8789 OP2 @ W! \ MOV X [EDI] , EAX
OP2 ToOP0
FALSE -5 ALLOT M\ 231 DTST
EXIT
THEN
THEN
OP3 @ W@ 45C7 = \ MOV X [EBP] , # 44444
IF OP2 @ C@ B8 = \ TTTT AND \ MOV EAX, X
IF M\ 130 DTST
-4000 OP3 @ +!
OP3 @ 3 + @ OP2 @ 1+ @ OP3 @ 2+ !
OP3 @ 6 + !
OP3 ToOP0
FALSE -7 ALLOT M\ 131 DTST
EXIT
THEN
OP2 @ W@ 878D = \ LEA EAX, X [EDI]
IF M\ 330 DTST \ ???
87C7 OP3 @ W!
OP3 @ 3 + @ OP2 @ 2+ @ OP3 @ 2+ !
OP3 @ 6 + !
OP3 ToOP0
FALSE -8 ALLOT M\ 331 DTST
EXIT
THEN
THEN
THEN
THEN
M\ PPPP
OP2 @ W@ 5589 XOR \ MOV F8 [EBP] , EDX
OP1 @ @ FFFFFF AND 85048D XOR OR \ LEA EAX , Y [EAX*X] ãðóáî
OP0 @ W@ 4503 XOR OR
OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0= \ X2=X0
IF M\ 318 DTST
048D OP0 @ W! 2 OP0 @ 2+ C!
FALSE
EXIT M\ 319 DTST
THEN
OP2 @ W@ 04D89 XOR \ MOV X [EBP] , ECX
OP1 @ ?ChEAX \ MOV EAX , ____
OP1 @ W@ 5589 <> AND OR \ MOV FC [EBP] , EDX
OP0 @ W@ 558B XOR OR \ MOV EDX , X [EBP]
OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0=
IF M\ 630 DTST
D1 OP0 @ 1+ C!
FALSE -1 ALLOT M\ 631 DTST
EXIT
THEN
OP1 @ @ 008BC28B = \ MOV EAX , EDX MOV EAX , [EAX]
IF M\ 730 DTST
028B OP1 @ W!
OP1 ToOP0
FALSE -2 ALLOT M\ 731 DTST
EXIT
THEN
DUP C@ C3 =
IF
OP1 @ W@ D18B XOR \ MOV EDX , ECX
OP0 @ W@ 1089 XOR OR 0= \ MOV [EAX] , EDX
IF M\ 30E DTST
0889 OP1 @ W!
OP1 ToOP0
FALSE
-2 ALLOT M\ 40F DTST
EXIT
THEN
THEN
M\ PPPP
DUP C@ 0C3 XOR
OP1 @ C@ B8 XOR OR \ MOV EAX , # 400
OP0 @ W@ 6DF7 XOR OR \ IMUL F8 [EBP]
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR
0= IF
OP2 @ W@ 45C7 = \ MOV F8 [EBP] , # C8
IF M\ E30 DTST
OP2 @ 3 + @
OP1 @ 1+ @ * OP1 @ 1+ !
OP1 ToOP0
FALSE -3 ALLOT M\ E31 DTST
EXIT
THEN
OP2 @ W@ 4589 = \ MOV F8 [EBP] , EAX
IF M\ D0E DTST
OP1 @ 1+ @
OP1 OPexcise
-3 ALLOT
69 C, C0 C, , \ IMUL EAX,EAX,44444H
FALSE M\ D0F DTST
EXIT
THEN
THEN
DUP C@ 0C3 XOR
OP1 @ C@ A1 XOR OR \ MOV EAX , 569598 ( X+5 )
OP0 @ W@ 6DF7 XOR OR \ IMUL FC [EBP]
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR
\ OP0 @ 2+ C@ C>S OFF-EBP > OR
0= IF
OP2 @ W@ 4589 = \ MOV FC [EBP] , EAX
IF M\ 12A DTST
2DF7 OP2 @ W!
OP1 @ 1+ @ OP2 @ 2+ !
OP2 ToOP0
FALSE -5 ALLOT M\ 12B DTST
EXIT
THEN
OP2 @ W@ 45C7 = \ MOV F8 [EBP] , # 123
IF M\ 22A DTST
B8 OP2 @ C!
OP2 @ 3 + @ OP2 @ 1+ !
-2 OP1 +!
2DF7 OP1 @ W!
OP1 @ 3 + @ OP1 @ 2+ !
OP1 ToOP0
FALSE -4 ALLOT M\ 22B DTST
EXIT
THEN
THEN
OP2 @ W@ 4589 XOR \ MOV FC [EBP] , EAX
OP1 @ @ 4503008B XOR OR \ MOV EAX , [EAX] ADD EAX , FC [EBP]
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR
0= IF M\ 830 DTST
03 OP1 @ C!
OP1 ToOP0
FALSE -3 ALLOT M\ 831 DTST
EXIT
THEN
M\ PPPP
DUP C@ 0C3 XOR
OP2 @ W@ 558B XOR OR \ MOV EDX , 0 [EBP]
OP1 @ W@ CA8B XOR OR \ MOV ECX , EDX
OP0 @ C@ 51 XOR OR \ PUSH ECX
0= IF M\ A30 DTST
75FF OP2 @ W!
OP2 ToOP0
FALSE -3 ALLOT M\ A31 DTST
EXIT
THEN
OP2 @ W@ 4589 XOR \ MOV 0 [EBP] , EAX
OP1 @ @ FFBFFF AND 24048B XOR OR \ MOV EAX , [ESP(+4)]
OP0 @ W@ 4503 XOR OR \ ADD EAX , 0 [EBP]
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR
0= IF M\ B30 DTST
03 OP1 @ C!
OP1 ToOP0
FALSE -3 ALLOT M\ C31 DTST
EXIT
THEN
OP2 @ W@ 5589 XOR \ MOV F8 [EBP] , EDX
OP1 @ ?ChEAX OR \ MOV EAX , [EAX]
OP0 @ W@ 558B XOR OR \ MOV EDX , F8 [EBP]
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR
0= IF M\ C30 DTST
OP1 ToOP0
FALSE -3 ALLOT M\ C31 DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 4589 XOR OR \ 579DE0 8945FC MOV FC [EBP] , EAX
OP1 @ C@ 25 XOR OR \ 579DE3 2555555555 AND EAX , # 55555555
OP0 @ W@ 558B XOR OR \ 579DE8 8B55FC MOV EDX , FC [EBP]
0= IF M\ C32 DTST
OP2 OPexcise
OP1 02 OPinsert
D08B OP2 @ W! \ MOV EDX , EAX
OP1 ToOP0
FALSE -3 ALLOT M\ C33 DTST
EXIT
THEN
M\ PPPP
OP0 @ W@ ADD|XOR|OR|AND=
IF
TRUE ?~EAX !
OP1
BEGIN ?EAX>ECX
UNTIL
\ DUP IF ?~EAX @ IF 2DROP FALSE THEN
\ THEN
IF M\ AE DTST
?~EAX @
IF ECX:=EAX
ELSE BEGIN EAX>ECX0 UNTIL
THEN BEGIN EAX>ECX UNTIL
DROP
OP0 @ W@ 4503 = \ TTTT AND \ ADD EAX , X [EBP]
IF 01048D OP0 @ ! ELSE \ LEA EAX, [EAX+ECX]
0C1 OP0 @ 1+ C! -1 ALLOT \ OR EAX,ECX
THEN FALSE M\ AF DTST
EXIT
THEN M\ PPPP
TRUE ?~EAX !
OP1 \ TTTT IF ." ?EAX>EBX" THEN
BEGIN ?EAX>EBX \ TTTT IF ." F=" DUP . THEN
UNTIL
\ DUP IF ?~EAX @ IF 2DROP FALSE THEN
\ THEN
IF M\ AE DTST
?~EAX @ \ ." {#}"
IF EBX:=EAX
ELSE BEGIN EAX>EBX0 UNTIL
THEN BEGIN EAX>EBX UNTIL
DROP
OP0 @ W@ 4503 = \ TTTT AND \ ADD EAX , X [EBP]
IF 03048D OP0 @ ! ELSE \ LEA EAX, [EAX+EBX]
OP0 @ W@ 4539 = \ CMP F8 [EBP] , EAX
IF C33B OP0 @ W! -1 ALLOT ELSE \ CMP EAX , EBX
OP0 @ W@ 453B = \ CMP EAX , F8 [EBP]
IF D83B OP0 @ W! -1 ALLOT ELSE \ CMP EBX , EAX
0C3 OP0 @ 1+ C! -1 ALLOT \ OR EAX,EBX
THEN THEN THEN FALSE M\ AF DTST
EXIT
THEN M\ PPPP
OP1 @ @ 4503D8F7 = \ NEG EAX \ ADD EAX , 4 [EBP]
IF OP2 @ W@ 458B = \ MOV EAX , X [EBP]
IF M\ D0E DTST
OP1 OPexcise
OP1 @ 2+ C@ OP0 @ 2+ C@
OP1 @ 2+ C! OP0 @ 2+ C!
2B OP0 @ C!
FALSE M\ D0F DTST
EXIT
THEN
OP2 @ C@ A1 = \ MOV EAX , X
IF M\ D0E DTST
OP2 @ 1+ @
OP2 OPexcise
OP1 OPexcise
8B OP0 @ C!
SetOP 2B C, 5 C, ,
FALSE M\ D0F DTST
EXIT
THEN
THEN
THEN
M\ PPPP
OP2 @ W@ FFFD AND 4589 XOR \ MOV F8 [EBP] , EAX
OP1 @ W@ FFFD AND 4589 XOR OR \ MOV EAX , F8 [EBP]
OP2 @ 2+ C@
OP1 @ 2+ C@ XOR OR
0= IF M\ E30 DTST
OP1 OPexcise
FALSE M\ E31 DTST
EXIT
THEN
OP2 @ @ 458BC28B = \ MOV EAX , EDX MOV EAX , 0 [EBP]
IF M\ 44 DTST
OP2 OPexcise
FALSE M\ 45 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ C@ B9 - FE AND OR \ MOV EDX , # 1000 MOV ECX , # 1000
OP0 @ W@ 1189 XOR OR \ MOV [ECX] , EDX
0= IF M\ 54 DTST
OP1 @ C@ BA =
IF 01C7 \ MOV [ECX] , # 1000
ELSE 1589 \ MOV 1000 , [EDX]
THEN
OP1 1 OPresize
OP1 @ W!
OP0 OPexcise
FALSE M\ 55 DTST
EXIT
THEN
DUP C@ C3 XOR
OP1 @ C@ B9 XOR OR \ MOV ECX , # 1000
OP0 @ W@ 4D89 XOR OR \ MOV X [EBP] , ECX
0= IF M\ 58 DTST
OP1 @ 1+ @
OP1 OPexcise
45C7 OP0 @ W! , \ MOV FC [EBP] , # 1000
FALSE M\ 59 DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ @ FFFFFF AND 8D0C8D XOR OR \ LEA ECX , 5898B8 ( rson+5 ) [ECX*4]
OP0 @ W@ 01C7 XOR OR \ MOV [ECX] , # 1000
0= IF M\ 56 DTST
04C7 OP1 @ W! \ MOV X [ECX*4] , # 1000
OP0 @ 2+ @
OP0 OPexcise ,
FALSE M\ 57 DTST
EXIT
EXIT
THEN
DUP C@ 0C3 XOR
OP1 @ W@ C18B XOR OR \ MOV EAX , ECX
OP0 @ @ FFFFFF AND 85048D XOR OR \ LEA EAX , X [EAX*4]
0= IF M\ 5A DTST
OP1 OPexcise
8D OP0 @ 2+ C! \ LEA EAX , X [ECX*4]
FALSE M\ 5B DTST
EXIT
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 4589 XOR OR \ MOV F8 [EBP] , EAX
OP1 @ @ FFFFFF AND 8D048D XOR \ LEA EAX , X [ECX*4]
OP1 @ C@ B8 <> AND OR \ B801000000 MOV EAX , # 1
OP0 @ W@ 558B XOR OR \ MOV EDX , F8 [EBP]
0= IF M\ 5C DTST
OP1 2 OPinsert
D08B OP2 @ W! \ MOV EDX , EAX
OP0 OPexcise
FALSE M\ 5D DTST
EXIT
EXIT
THEN
OP0 @ 2+ C@
OP2 @ 2+ C@ XOR
OP2 @ W@ 4589 XOR OR \ MOV F8 [EBP] , EAX
OP1 @ @ FFFFFF AND 24448B XOR OR \ MOV EAX , 18 [ESP]
OP0 @ W@ 558B XOR OR \ MOV EDX , F8 [EBP]
0= IF M\ 9C DTST
OP1 2 OPinsert
D08B OP2 @ W! \ MOV EDX , EAX
OP0 OPexcise
FALSE M\ 9D DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP2 @ @ D9F7CA8B XOR OR \ MOV ECX , EDX NEG ECX
OP0 @ 1- @ 01048DD9 XOR OR \ LEA EAX , [ECX] [EAX]
0= IF M\ 66 DTST
OP2 OPexcise
02048DDA OP1 @ 1+ ! \ NEG EDX lea EAX, [EAX+EDX]
FALSE M\ 67 DTST
EXIT
THEN
OP2 @ @ 45C7D08B XOR \ MOV EDX , EAX MOV F8 [EBP] , # X
OP0 @ C@ BA XOR OR \ MOV EDX , # 0
0= IF M\ 6A DTST
OP2 OPexcise
FALSE M\ 6B DTST
EXIT
THEN
DUP C@ 0C3 XOR
OP2 @ C@ BA XOR OR \ MOV EDX , # 4
OP1 @ W@ 5501 XOR OR \ ADD 0 [EBP] , EDX
OP0 @ W@ 4513 XOR OR \ ADC EAX , FC [EBP]
0= IF M\ 82 DTST
OP0 4 OPresize 4 OP0 +!
OP2 @ 1+ @ OP2 OPexcise
OP1 @ 3 + ! 4581 OP1 @ W! \ ADD 0 [EBP] , # 4
FALSE M\ 83 DTST
EXIT
THEN
OP2 @ 3 + C@
OP0 @ 3 + C@ XOR
OP2 @ @ FFFFFF AND 24448B XOR OR \ MOV EAX , 30 [ESP]
OP0 @ @ FFFFFF AND 244489 XOR OR \ MOV 30 [ESP] , EAX
0= IF OP1 @ @ 8901408D = \ 8D4001 LEA EAX , 1 [EAX]
IF M\ 88 DTST
OP1 OPexcise
FF OP0 @ C!
FALSE M\ 89 DTST
EXIT
THEN
OP1 @ @ 89FF408D = \ 8D4001 LEA EAX , -1 [EAX]
IF M\ 94 DTST
OP1 OPexcise
4CFF OP0 @ W!
FALSE M\ 95 DTST
EXIT
THEN
THEN
DUP C@ C3 XOR
OP2 @ W@ 408D XOR OR \ LEA EAX , 1 [EAX]
OP1 @ @ FFFFFF AND 244403 XOR OR \ ADD EAX , 8 [ESP]
OP0 @ @ FFFFFF AND B60F XOR OR \ MOVZX EAX , BYTE PTR [EAX]
0= IF M\ 9E DTST
OP2 @ 2+ C@ OP2 OPexcise
548B OP1 @ W! \ MOV EDX , 8 [ESP]
-3 ALLOT
0244B60F , C, \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX]
FALSE M\ 9F DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 5589 XOR OR \ 8955F8 MOV F8 [EBP] , EDX
OP1 @ W@ D8F7 XOR \ F7D8 NEG EAX
OP1 @ W@ D0F7 <> AND \ F7D0 NOT EAX
OP1 @ C@ 58 <> AND \ 58 POP EAX
OP1 @ W@ C123 <> AND OR \ 23C1 AND EAX , ECX
OP0 @ W@ ADD|XOR|OR|AND= 0=
OP0 @ W@ 458B <> AND OR
\ OP0 @ W@ 4503 XOR OR \ 0345F8 ADD EAX , F8 [EBP]
0= IF M\ 1B6 DTST
C2 OP0 @ 1+ C! \ ADD EAX , EDX
-1 ALLOT
FALSE M\ 1B7 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ 4D8B XOR OR \ 8B4D00 MOV ECX , 0 [EBP]
OP1 @ @ 4D89C82B XOR OR \ 2BC8 SUB ECX , EAX
\ 894D00 MOV 0 [EBP] , ECX
0= IF M\ B6 DTST
4529 OP2 @ W! \ SUB 0 [EBP] , EAX
OP2 ToOP0
-5 ALLOT
FALSE M\ B7 DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 458B XOR OR \ 58266F 8B4500 MOV EAX , 0 [EBP]
OP1 @ W@ 558B XOR OR \ 582672 8B5504 MOV EDX , 4 [EBP]
OP0 @ W@ 4589 XOR OR \ 582675 894500 MOV 0 [EBP] , EAX
0= IF M\ D2 DTST
OP0 OPexcise
FALSE M\ D3 DTST
EXIT
THEN
OP2 @ W@ 458B XOR \ 8B4500 MOV EAX , 0 [EBP]
OP1 @ W@ 5589 XOR OR \ 895500 MOV 0 [EBP] , EDX
OP0 @ W@ C88B XOR OR \ 8BC8 MOV ECX , EAX
0= IF M\ F4 DTST
4D8B OP2 @ W! \ MOV ECX , 0 [EBP]
C18B OP0 @ W! \ MOV EAX , ECX
FALSE M\ F5 DTST
EXIT
THEN
OP2 @ C@ B8 XOR \ B801000000 MOV EAX , # 1
OP2 @ 1+ @ SHORT? 0= OR
OP1 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP]
OP0 @ W@ 48D XOR OR \ 8D0402 LEA EAX , [EDX] [EAX]
0= IF M\ FC DTST
OP2 @ 1+ @
OP2 OPexcise
428D OP0 @ W! \ LEA EAX , 1 [EDX]
OP0 @ 2+ C!
FALSE M\ FD DTST
EXIT
THEN
OP2 @ W@ 558B XOR \ 5876BB 8B5500 MOV EDX , 0 [EBP]
OP1 @ W@ 428D XOR OR \ 5876BE 8D4201 LEA EAX , 1 [EDX]
OP0 @ W@ 4589 XOR OR \ 5876C1 894500 MOV 0 [EBP] , EAX
0= IF M\ FC DTST
OP1 @ 2+ C@
OP1 OPexcise
4583 OP0 @ W! C, \ ADD EAX , 1 [EDX]
FALSE M\ FD DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 4589 XOR OR \ 8945EC MOV EC [EBP] , EAX
OP1 ?EDX_[EBP] OR
OP0 @ W@ 558B XOR OR \ 8B55EC MOV EDX , EC [EBP]
0= IF M\ 104 DTST
OP0 OPexcise
OP0 02 OPinsert
D08B OP1 @ W! \ MOV EDX , EAX
FALSE M\ 105 DTST
EXIT
THEN
OP2 @ W@ D08B XOR \ 5A5408 8BD0 MOV EDX , EAX
OP1 @ @ FFFFFF AND 95048D XOR \ 8D0495D8825900 LEA EAX , 5982D8 [EDX*4]
OP1 @ @ FFFFFF AND 95048B <> AND OR \ 8B0495D8825900 MOV EAX , 5982D8 [EDX*4]
OP0 @ W@ 558B XOR OR \ 5A5411 8B55F8 MOV EDX , F8 [EBP]
0= IF M\ 138 DTST
OP2 OPexcise
85 OP1 @ 2+ C! \ LEA EAX , 5982D8 [EAX*4]
FALSE M\ 139 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ @ E1C1CA8B XOR OR \ 8BCA MOV ECX , EDX
\ C1E107 SHL ECX , 7
OP0 @ W@ C10B XOR OR \ 0BC1 OR EAX , ECX
0= IF M\ 108 DTST
OP2 OPexcise
E2C1 OP1 @ W! \ SHL EDX , 7
C20B OP0 @ W! \ OR EAX , EDX
FALSE M\ 109 DTST
EXIT
THEN
OP2 @ @ 878DD08B XOR \ 8BD0 MOV EDX , EAX
\ 8D873C100000 LEA EAX , 103C [EDI]
OP0 @ W@ 1088 XOR OR \ 8810 MOV [EAX] , DL
0= IF M\ 110 DTST
OP1 @ 2+ @
9788 OP1 @ W! \ MOV 103C [EDI] , DL
878D OP0 @ W! \ LEA EAX , 103C [EDI]
,
FALSE M\ 111 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ @ 5589D98B XOR OR \ 58809A 8BD9 MOV EBX , ECX
\ 58809C 8955EC MOV EC [EBP] , EDX
OP0 @ W@ C323 XOR OR \ 58809F 23C3 AND EAX , EBX
0= IF M\ 116 DTST
OP2 OPexcise
C123 OP0 @ W! \ AND EAX , ECX
FALSE M\ 117 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ 4D8B XOR OR \ 8B4DF0 MOV ECX , F0 [EBP]
OP1 @ @ 23F05589 XOR OR \ 8955F0 MOV F0 [EBP] , EDX
\ 23C1 AND EAX , ECX
0= IF M\ 11E DTST
OP0 OPexcise
4523 OP1 @ W! \ AND EAX , F0 [EBP]
FALSE M\ 11D DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ 558B XOR OR \ 5881D2 8B55EC MOV EDX , EC [EBP]
OP1 @ @ BF04523 XOR OR \ 5881D5 2345F0 AND EAX , F0 [EBP]
OP0 @ W@ C20B XOR OR \ 5881D8 0BC2 OR EAX , EDX
0= IF M\ 120 DTST
OP2 @ 2+ C@
OP2 OPexcise
450B OP0 @ W! \ OR EAX , EC [EBP]
C,
FALSE M\ 11D DTST
EXIT
THEN
OP2 @ 2+ C@
OP1 @ 2+ C@ XOR
OP2 @ W@ 5589 XOR OR \ 8955F0 MOV F0 [EBP] , EDX
OP1 @ W@ 4523 XOR OR \ 2345F0 AND EAX , F0 [EBP]
0= IF M\ 126 DTST
OP1 OPexcise
OP0 2 OPinsert
C223 OP1 @ W! \ AND EAX , EDX
FALSE M\ 127 DTST
EXIT
THEN
OP2 @ 2+ C@
OP1 @ 2+ C@ XOR
OP2 @ W@ 4D89 XOR OR \ 894DFC MOV FC [EBP] , ECX
OP1 @ W@ 4523 XOR OR \ 2345FC AND EAX , FC [EBP]
0= IF M\ 13E DTST
OP1 OPexcise
OP0 2 OPinsert
C123 OP1 @ W! \ AND EAX , ECX
FALSE M\ 13F DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ 2+ C@ C>S OFF-EBP U< 0= OR
OP2 @ W@ 558B XOR OR \ 58838C 8955F8 MOV EDX , F4 [EBP]
OP1 @ @ C20BC123 XOR OR \ 58838F 23C1 AND EAX , ECX
\ 588391 0BC2 OR EAX , EDX
0= IF M\ 12C DTST
OP2 @ 2+ C@
OP2 OPexcise
450B OP0 @ W! \ OR EAX , F8 [EBP]
C,
FALSE M\ 12D DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ @ C123CA8B XOR OR \ 8BCA MOV ECX , EDX
\ 23C1 AND EAX , ECX
OP0 @ W@ 450B XOR OR \ 0B45F4 OR EAX , F4 [EBP]
0= IF M\ 1F2 DTST
OP2 OPexcise
C223 OP1 @ W! \ AND EAX , EDX
FALSE M\ 1F3 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ 4D8B XOR OR \ 5884C1 8B4DF8 MOV ECX , F8 [EBP]
OP1 @ @ C10BCA23 XOR OR \ 5884C4 23CA AND ECX , EDX
OP0 @ W@ C10B XOR OR \ 5884C6 0BC1 OR EAX , ECX
0= IF M\ 1F4 DTST
OP1 OPexcise
5523 OP1 @ W! \ AND EDX , F8 [EBP]
C20B OP0 @ W! \ OR EAX , EDX
FALSE M\ 1F5 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ 558B XOR OR \ 587860 8B5500 MOV EDX , 0 [EBP]
OP1 @ W@ 528D XOR OR \ 587863 8D5201 LEA EDX , 1 [EDX]
OP0 @ W@ 5589 XOR OR \ 587866 895500 MOV 0 [EBP] , EDX
0= IF M\ 144 DTST
OP1 @ 2+ C@
OP2 OPexcise
OP1 OPexcise
4583 OP0 @ W! \ ADD 0 [EBP] , # 1
C,
FALSE M\ 145 DTST
EXIT
THEN
DUP C@ C3 XOR
\ OP2 @ W@ 5589 XOR OR \ 8B5500 EDX , MOV 0 [EBP]
OP2 @ W@ 558B XOR OR \ 8B5500 EDX , MOV 0 [EBP]
OP1 @ W@ E0D3 XOR OR \ D3E0 SHL EAX , CL
\ OP1 ?EDX_[EBP] OR \ D3E0 SHL EAX , CL
OP0 @ W@ C20B XOR OR \ 0BC2 OR EAX , EDX
0= IF M\ 14A DTST
OP2 @ 2+ C@
OP2 OPexcise
45 OP0 @ 1+ C! \ OR EAX , 0 [EBP]
C,
FALSE M\ 14B DTST
EXIT
THEN
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX
OP1 @ W@ 458B XOR OR \ 8B4500 MOV EAX , 0 [EBP]
OP0 @ W@ 558B XOR OR \ 8B55FC MOV EDX , FC [EBP]
0= IF M\ 162 DTST
OP1 ToOP0 -3 ALLOT
OP0 2 OPinsert
D08B OP1 @ W!
FALSE M\ 163 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ 4D8B XOR OR \ 582055 8B4D04 MOV ECX , 4 [EBP]
OP1 @ W@ 5589 XOR OR \ 582058 895504 MOV 4 [EBP] , EDX
OP0 @ @ FFFFFF AND 1048D XOR OR \ 58205B 8D0401 LEA EAX , [ECX] [EAX]
0= IF M\ 168 DTST
4503 OP2 @ W! \ ADD EAX , 4 [EBP]
OP0 OPexcise
FALSE M\ 169 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ W@ 558B XOR OR \ 582202 8B5500 MOV EDX , 0 [EBP]
OP1 @ W@ 4503 XOR OR \ 582205 034504 ADD EAX , 4 [EBP]
OP0 @ W@ C22B XOR OR \ 582208 2BC2 SUB EAX , EDX
0= IF M\ 170 DTST
OP2 @ 2+ C@
OP2 OPexcise
452B OP0 @ W! C, \ SUB EAX , 0 [EBP]
FALSE M\ 171 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ 2+ C@
OP1 @ 2+ C@ = OR
OP2 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP]
OP1 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX
OP0 @ @ FFFFFF AND 2048D XOR OR \ 8D0402 LEA EAX , [EDX] [EAX]
0= IF M\ 158 DTST
OP2 @ 2+ C@
OP2 OPexcise
4503 OP0 @ W! \ ADD EAX , 0 [EBP]
OP0 @ 2+ C!
FALSE M\ 159 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR
OP2 @ 2+ C@
OP1 @ 2+ C@ = OR
OP2 @ W@ 4589 XOR OR \ 571DD0 8945FC MOV FC [EBP] , EAX
OP1 @ W@ 4503 XOR OR \ 571DD3 034500 ADD EAX , 0 [EBP]
OP0 @ W@ 6DF7 XOR OR \ 571DD6 F76DFC IMUL FC [EBP]
0= IF M\ 160 DTST
OP2 OPexcise
OP1 2 OPinsert
C88B OP2 @ W! \ MOV ECX , EAX
E9F7 OP0 @ W! \ IMUL ECX
FALSE -1 ALLOT M\ 161 DTST
EXIT
THEN
DUP C@ C3 XOR
OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OR
OP2 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX
OP1 @ W@ AF0F XOR OR \ 0FAFC2 IMUL EAX , EDX
OP0 @ W@ 4503 XOR OR \ 034500 ADD EAX , 0 [EBP]
0= IF M\ 248 DTST
OP2 OPexcise
OP1 2 OPinsert
C88B OP2 @ W! \ MOV ECX , EAX
C103 OP0 @ W! \ ADD EAX , ECX
FALSE -1 ALLOT M\ 141 DTST
EXIT
THEN
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR
OP2 @ W@ C28B XOR OR \ 571EED 8BC2 MOV EAX , EDX
OP1 @ W@ 5589 XOR OR \ 571EEF 8955FC MOV FC [EBP] , EDX
OP0 @ W@ 6DF7 XOR OR \ 571EF2 F76DFC IMUL FC [EBP]
0= IF M\ 182 DTST
EAF7 OP0 @ W! \ IMUL EDX
FALSE -1 ALLOT M\ 183 DTST
EXIT
THEN
( !!!!!!!!!!
DUP C@ C3 XOR
OP1 @ @ EAF7C28B XOR OR \ 8BC2 MOV EAX , EDX
\ F7EA IMUL EDX
0= IF M\ 184 DTST
OP1 OPexcise
C2AF0F OP0 @ ! \ IMUL EAX , EDX
FALSE 1 ALLOT M\ 185 DTST
EXIT
THEN
)
OP3 @ :-SET U< IF TRUE EXIT THEN
M\ PPPP
OP3 @ @ D08BC28B = \ MOV EAX , EDX MOV EDX , EAX
IF M\ 42 DTST
OP2 OPexcise
FALSE M\ 43 DTST
EXIT
THEN
OP1 @ W@ 453B = \ CMP EAX , X [EBP]
IF OP0 @ @ FFFCFF AND C09C0F = \ SETLE AL
IF
\ $ 4444 <
OP2 @ C@ 0B8 XOR \ MOV EAX, # X
OP3 @ W@ 4589 XOR OR \ MOV X1 [EBP], EAX
OP3 @ 2+ C@
OP1 @ 2+ C@ XOR OR 0=
IF M\ 2C DTST
3D OP3 @ C!
OP2 @ 1+ @ OP3 @ 1+ !
2 OP2 +!
OP0 @ @ 300 XOR OP2 @ ! \ SETGE AL
OP2 ToOP0
FALSE -6 ALLOT M\ 2D DTST
EXIT
THEN
\ $ 4444 @ <
OP2 @ C@ 0A1 XOR \ MOV EAX, # X
OP3 @ 2+ C@
OP1 @ 2+ C@ XOR OR 0=
IF
OP3 @ W@ 4589 = \ MOV X1 [EBP], EAX
IF M\ 2E DTST
053B OP3 @ W!
OP2 @ 1+ @ OP3 @ 2+ !
3 OP2 +!
OP0 @ @ 300 XOR OP2 @ ! \ SETGE AL
OP2 ToOP0
FALSE -5 ALLOT M\ 2F DTST
EXIT
THEN
OP3 @ W@ 45C7 = \
IF M\ 12E DTST
3D81 OP3 @ W!
OP3 @ 3 + @
OP2 @ 1+ @ OP3 @ 2+ ! OP3 @ 6 + !
3 OP2 +!
OP0 @ @ OP2 @ !
OP2 ToOP0
FALSE -5 ALLOT M\ 12F DTST
EXIT
THEN
THEN
THEN
THEN
DUP @ 458B1089 XOR \ MOV [EAX], EDX MOV EAX , X [EBP]
OVER 5 + @ C3086D8D XOR OR \ LEA EBP, 8 [EBP] RET
OP0 @ W@ D18B XOR OR 0= \ MOV EDX , ECX
IF M\ 51E DTST
0889 OP0 @ W! \ MOV [EAX] , ECX
2+ FALSE M\ 51F DTST
EXIT
THEN
M\ PPPP
OP3 @ W@ 4589 XOR \ 8945FC MOV FC [EBP] , EAX
OP2 @ C@ B8 XOR OR \ B8189D5700 MOV EAX , # 579D18
OP1 @ W@ 558B XOR OR \ 8B55FC MOV EDX , FC [EBP]
OP0 @ @ FFFFFF AND 90048D XOR OR \ 8D0490 LEA EAX , [EAX] [EDX*4]
OP3 @ 2+ C@ OP1 @ 2+ C@ XOR OR \ X0=X2
0= IF M\ 840 DTST
OP2 @ 1+ @ 85048D OP2 @ !
OP2 @ 3 + !
OP2 ToOP0
FALSE -4 ALLOT M\ 841 DTST
EXIT
THEN
OP3 @ W@ 558B XOR \ MOV EDX , FC [EBP]
OP2 @ W@ 4589 XOR OR \ MOV FC [EBP] , EAX
OP1 @ W@ C28B XOR OR \ MOV EAX , EDX
OP0 @ W@ 558B XOR OR \ MOV EDX , FC [EBP]
OP3 @ 2+ C@ OP2 @ 2+ C@ XOR OR
OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR
0= IF M\ F30 DTST
OP3 OPexcise
OP2 OPexcise
D08B OP1 @ W! \ MOV EDX , EAX
458B OP0 @ W! \ MOV EAX , FC [EBP]
DO_EAX>ECX DROP
SetOP 89 C, 55 C, OP0 @ 2+ C@ C, \ MOV FC [EBP] , EDX
FALSE M\ F31 DTST
EXIT
THEN
OP3 @ 2+ C@
OP0 @ 2+ C@ XOR
OP3 @ W@ 4589 XOR OR \ 57BF16 8945FC MOV FC [EBP] , EAX
OP2 @ W@ C033 XOR OR \ 57BF19 33C0 XOR EAX , EAX
OP1 @ W@ 4581 XOR OR \ 57BF1B 814500BA040000 ADD 0 [EBP] , # 4BA
OP0 @ W@ 4513 XOR OR \ 57BF22 1345FC ADC EAX , FC [EBP]
0= IF M\ 84 DTST
OP2 OPexcise
D083 OP0 @ ! \ ADC EAX , # 0
FALSE M\ 85 DTST
EXIT
THEN
OP3 @ 2+ C@
OP0 @ 2+ C@ XOR
OP3 @ W@ 4589 XOR OR \ 59690C 8945F0 MOV F0 [EBP] , EAX
OP2 @ C@ B8 XOR OR \ 59690F B801000000 MOV EAX , # 1
OP1 @ C@ BA XOR OR \ 596914 BA00000080 MOV EDX , # 80000000
OP0 @ W@ 552B XOR OR \ 596919 2B55F0 SUB EDX , F0 [EBP]
0= IF M\ A4 DTST
OP2 @ 1+ @
OP2 OPexcise
D02B OP0 @ ! \ SUB EDX , EAX
-1 ALLOT
SetOP B8 C, ,
FALSE M\ A5 DTST
EXIT
THEN
OP3 @ 2+ C@
OP0 @ 2+ C@ XOR
OP3 @ W@ 4589 XOR OR \ 8945F8 MOV F8 [EBP] , EAX
OP2 ?EDX_[EBP] OR
OP1 ?EDX_[EBP] OR
OP0 @ W@ 558B XOR OR \ 8B55F8 MOV EDX , F8 [EBP]
0= IF M\ EC DTST
OP2 2 OPinsert
D08B OP3 @ W! \ MOV EDX , EAX
OP0 OPexcise
FALSE M\ ED DTST
EXIT
THEN
OP3 @ 2+ C@
OP0 @ 2+ C@ XOR
OP3 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX
OP2 @ C@ B8 XOR OR \ B801000000 MOV EAX , # 1
OP1 @ C@ B9 XOR OR \ B9FFFFFFFF MOV ECX , # FFFFFFFF
OP0 @ W@ 4D03 XOR OR \ 034DFC ADD ECX , FC [EBP]
0= IF M\ FA DTST
OP2 @ 1+ @
OP2 OPexcise
C803 OP0 @ W! \ ADD ECX , EAX
-1 ALLOT
SetOP B8 C, ,
FALSE M\ FB DTST
EXIT
THEN
OP3 @ C@ A1 XOR \ 587C37 A1D8795800 MOV EAX , 5879D8 ( C+5 )
OP2 @ W@ D08B XOR OR \ 587C3C 8BD0 MOV EDX , EAX
OP1 @ C@ A1 XOR OR \ 587C3E A1E4795800 MOV EAX , 5879E4 ( D+5 )
OP0 @ W@ 4589 XOR OR \ 587C43 8945EC MOV EC [EBP] , EAX
0= IF M\ 114 DTST
OP2 OPexcise
OP2 1 OPresize
158B OP2 @ W!
FALSE M\ 115 DTST
EXIT
THEN
OP3 @ 2+ C@
OP1 @ 2+ C@ XOR
OP1 @ 2+ C@
OP0 @ 2+ C@ XOR OR
OP3 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX
OP2 @ W@ 428D XOR OR \ 8D4201 LEA EAX , 1 [EDX]
OP1 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP]
OP0 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX
0= IF M\ 140 DTST
OP3 OPexcise
OP2 2 OPinsert
C88B OP3 @ W! \ MOV ECX , EAX
OP1 OPexcise
OP0 2 OPinsert
D18B OP1 @ W! \ MOV EAX , ECX
FALSE M\ 141 DTST
EXIT
THEN
OP4 @ :-SET U< IF TRUE EXIT THEN
\ $ 10 LSHIFT
OP4 @ W@ 4589 XOR \ MOV X0 [EBP] , EAX
OP3 @ C@ B8 XOR OR \ MOV EAX, # 10
OP2 @ @ 458BC88B XOR OR \ MOV ECX, EAX \ !? MOV EAX, X2 [EBP]
OP0 @ W@ F7FF AND E0D3 XOR OR \ SHL|SHR EAX , CL
OP4 @ 2+ C@ OP1 @ 2+ C@ XOR OR \ X0=X2
0=
IF M\ 32 DTST
OP0 @ W@ 0012 - OP4 @ W!
OP3 @ 1+ @ OP4 @ 2+ C!
OP4 ToOP0
FALSE -C ALLOT M\ 33 DTST
EXIT
THEN
OP1 @ @ FFFFFF AND 82448D XOR \ LEA EAX , 0 [EDX] [EAX*4]
OP0 @ W@ 0889 XOR OR \ MOV [EAX] , ECX
0=
IF M\ 132 DTST
4C89 OP1 @ W!
OP1 ToOP0
FALSE -2 ALLOT M\ 133 DTST
EXIT
THEN
OP4 @ 2+ C@
OP3 @ 2+ C@ XOR
OP3 @ 2+ C@
OP0 @ 2+ C@ XOR OR
OP4 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP]
OP3 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX
OP2 @ @ C203D8F7 XOR OR \ F7D8 NEG EAX
\ 03C2 ADD EAX , EDX
OP0 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP]
0= IF M\ C8 DTST
4D OP4 @ 1+ C! \ MOV ECX , 0 [EBP]
\ MOV 0 [EBP] , EAX
D08B OP2 @ W! \ MOV EDX , EAX
C103D8F7 OP1 @ ! \ NEG EAX
\ ADD EAX , ECX
FALSE -1 ALLOT M\ C9 DTST
EXIT
THEN
OP4 @ W@ 5589 XOR \ 895500 MOV 0 [EBP] , EDX
OP3 @ W@ 558B XOR OR \ 8B55FC MOV EDX , FC [EBP]
OP2 @ W@ 4D8B XOR OR \ 8B4D00 MOV ECX , 0 [EBP]
0= IF M\ C8 DTST
OP3 2 OPinsert
CA8B OP4 @ W! \ MOV ECX , EDX
OP2 OPexcise
FALSE M\ C9 DTST
EXIT
THEN
DUP C@ C3 XOR
OP3 @ 2+ C@
OP0 @ 2+ C@ XOR OR
OP3 @ W@ 4589 XOR OR \ 571FEA 894500 MOV 0 [EBP] , EAX
OP2 @ W@ C28B XOR OR \ 571FED 8BC2 MOV EAX , EDX
OP1 @ W@ EAF7 XOR OR \ 571FEF F7EA IMUL EDX
OP0 @ W@ 4503 XOR OR \ 571FF1 034500 ADD EAX , 0 [EBP]
0= IF M\ 1C8 DTST
OP2 OPexcise
OP1 OPexcise
OP0 3 OPinsert
AF0F OP1 @ W!
D2 OP1 @ 2+ C! \ IMUL EDX , EDX
C203 OP0 @ W! \ ADD EAX , EDX
FALSE
-1 ALLOT
M\ 1C9 DTST
EXIT
THEN
OP5 @ :-SET U< IF TRUE EXIT THEN
M\ PPPP
TRUE
;
: -EVEN-EBP
OP0 @ :-SET U< IF EXIT THEN
OP0 @ W@ 06D8D = \ LEA ebp, OFF-EBP [EBP]
IF OP0 @ 2+ C@ +>OFF-EBP
OP1 ToOP0
-3 ALLOT EXIT
THEN ;
: OPT_ ( -- )
BEGIN
\ M\ -D DTST
OPT-RULES UNTIL
\ M\ -F DTST
EVEN-EAX ;
: DO_OPT ( ADDR -- ADDR' )
OPT? IF OPT_ THEN ;
: INLINE? ( CFA -- CFA FLAG )
DUP BEGIN
2DUP
MM_SIZE - U> 0= IF DROP FALSE EXIT THEN
DUP C@ \ CFA CFA+OFF N'
DUP 0C3 = IF 2DROP TRUE EXIT THEN \ RET
DUP5B? M_WL DROP 5 + REPEAT
\ 0100.X0XX
DUP 0F4
AND 40 = M_WL DROP 1+ REPEAT \ INC|DEC E(ACDB)X
DUP 099 = M_WL DROP 1+ REPEAT \ CDQ
\ 1110.11XX
OS\ DUP FC
OS\ AND EC = M_WL DROP 1+ REPEAT \ IN|OUT EAX AL, DX | DX, EAX EL
OS\ DUP CD = M_WL DROP 2+ REPEAT \ INTX
DROP
DUP W@ \ CFA CFA+OFF N'
DUP3B?[EBP] M_WL DROP 3 + REPEAT
DUP3B? M_WL DROP 3 + REPEAT
DUP 06D8D = M_WL DROP 3 + REPEAT \ LEA EBP, OFF-EBP [EBP]
DUP 0C583 = M_WL DROP 3 + REPEAT \ ADD EBP, # OFF-EBP
DUP 0ED83 = M_WL DROP 3 + REPEAT \ SUB EBP, # X
DUP2B? M_WL DROP 2+ REPEAT
DUP 0EC87 = M_WL DROP 2+ REPEAT \ XCHG EBP , ESP
DUP C58B = M_WL DROP 2+ REPEAT \ MOV EAX, EBP
\ DUP 0E3FF = M_WL DROP 2+ REPEAT \ JMP EBX
DUP6B? M_WL DROP 6 + REPEAT
DUP 45C7 = M_WL DROP 7 + REPEAT \ MOV X [EBP] , # X
DUP 05C7 = M_WL DROP A + REPEAT \ MOV X , # Y
DUP 0581 = M_WL DROP A + REPEAT \ ADD X , # Y
DROP
DUP @
DUP 0424448B = M_WL DROP 4 + REPEAT
DUP 0424448D = M_WL DROP 4 + REPEAT
DUP 8BE08B5B =
IF OVER 3 + 2@ \ 1 TO TTTT
E3FF046D 8D00458B D= \ RP!
IF 2DROP TRUE EXIT THEN
THEN
FFFFFF AND
DUP C09D0F = M_WL DROP 3 + REPEAT \ SETGE AL
DUP C09E0F = M_WL DROP 3 + REPEAT \ SETLE AL
DUP 90048D = M_WL DROP 3 + REPEAT \ LEA EAX , [EAX] [EDX*4]
DUP 02048D = M_WL DROP 3 + REPEAT \ LEA EAX, [EDX] [EAX]
DUP 40B70F = M_WL DROP 4 + REPEAT \ MOVZX EAX , WORD PTR FE [EAX]
\ CMPXCHG [EAX] , AL| EAX
\ LSS EAX , [EAX]
\ BTR [EAX] , EAX
\ LFS EAX , [EAX]
\ LGS EAX , [EAX]
\ MOVZX EAX , BYTE|WORD PTR [EAX]
\ 0000.0000 1011.1XXX 0000.1111
DUP FFF8FF
AND 00B00F = M_WL DROP 3 + REPEAT \ MOVZX EAX, WORD PTR [EAX]
DUP 20488B = M_WL DROP 3 + REPEAT \ MOV ECX , [EAX+20H]
DUP 20488D = M_WL DROP 3 + REPEAT \ LEA ECX , [EAX+20H]
DUP 85448B = M_WL DROP 4 + REPEAT \ MOV EAX, X [EBP] [EAX*4]
DUP 02048D = M_WL DROP 4 + REPEAT \ LEA EAX , [EDX] [EAX]
\ XX00.0101 0000.0100 1000.1XX1
DUP7B? WHILE DROP 7 + REPEAT
2DROP FALSE
;
: MACRO? INLINE? ;
\ ÌÀÊÐÎÏÎÄÑÒÀÍÎÂÙÈÊ
: +EBP DUP C@ C>S OFF-EBP + C, 1+ ;
: 1_,_STEP SetOP DROP DUP C@ C, 1+ ;
: 2_,_STEP SetOP DROP DUP W@ W, 2+ ;
: 3_,_STEP 2_,_STEP DUP C@ C, 1+ ;
: 4_,_STEP_ DUP @ , CELL+ ;
: 4_,_STEP SetOP DROP 4_,_STEP_ ;
: 5_,_STEP 1_,_STEP 4_,_STEP_ ;
: 6_,_STEP 2_,_STEP 4_,_STEP_ ;
: 7_,_STEP 3_,_STEP 4_,_STEP_ ;
: A_,_STEP 2_,_STEP 4_,_STEP_ 4_,_STEP_ ;
: 0A_,_STEP DUP DUP @ + DP @ - , CELL+ ;
: 1A_,_STEP 1_,_STEP 0A_,_STEP ;
: 2A_,_STEP 2_,_STEP 0A_,_STEP ;
: _INLINE, ( CFA -- )
\ ." ^" DUP H.
BEGIN
DO_OPT
DUP @ \ CFA N'
DUP 8BE08B5B = DUP
IF DROP OVER 3 + 2@ E3FF046D 8D00458B D= \ RP!
THEN M_WL DROP SetOP
8B C, E0 C, \ MOV ESP, EAX
DROP 'DROP
REPEAT
FF AND \ CFA N'
DUP 0C3 = IF 2DROP EXIT THEN \ RET
DUP5B? M_WL 5_,_STEP REPEAT \ ADD EAX, # X
\ 010X.XXXX
DUP E0 AND 40 = M_WL 1_,_STEP REPEAT \ INC|DEC|PUSH|POP E_X
\ FS: GS: D16: A16: INSB INSD OUTSB OUTSD
\ 0110.X1XX
DUP F4 AND 64 = M_WL 1_,_STEP REPEAT
DUP 099 = M_WL 1_,_STEP REPEAT \ CDQ
OS\ DUP FC
OS\ AND EC = M_WL 1_,_STEP REPEAT \ IN|OUT EAX AL, DX | DX, EAX EL
OS\ DUP CD = M_WL 2_,_STEP REPEAT \ INTX
\ DUP 0BB = M_WL 5_,_STEP REPEAT \ MOV EBX, # X
\ JO JNO JB JAE JE JNE JBE JA JS JNS JP JNP JL JGE JLE JG
\ 0111.XXXX
DUP F0 AND 70 = M_WL 2_,_STEP REPEAT
DUP 0E8 = M_WL 1A_,_STEP REPEAT \ CALL
DUP 0E9 = M_WL 1A_,_STEP REPEAT \ JMP
DROP
DUP W@
DUP3B?[EBP] M_WL 2_,_STEP +EBP REPEAT
DUP3B? M_WL 3_,_STEP REPEAT
DUP2B? M_WL 2_,_STEP REPEAT
DUP 0C48B = M_WL 2_,_STEP REPEAT \ MOV EAX , ESP
DUP C58B = M_WL EVEN-EBP 2_,_STEP REPEAT \ MOV EAX, EBP
DUP 0EC87 = M_WL EVEN-EBP 2_,_STEP REPEAT \ XCHG EBP , ESP
DUP 06D8D = M_WL DROP DUP 2 + C@ +>OFF-EBP
3 + REPEAT \ LEA EBP, OFF-EBP [EBP]
DUP 0C583 = M_WL DROP DUP 2 + C@ +>OFF-EBP
3 + REPEAT \ ADD EBP, # OFF-EBP
DUP 0ED83 = M_WL DROP DUP 2 + C@ C>S NEGATE +>OFF-EBP
3 + REPEAT \ SUB EBP, # OFF-EBP
DUP 0C483 = M_WL 3_,_STEP REPEAT \ ADD ESP, # X
DUP6B? M_WL 6_,_STEP REPEAT \ MOV EAX, # X
DUP 0E3FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ JMP EBX
\ DUP 0D3FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ CALL EBX
\ DUP 0E2FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ JMP EDX
DUP 0D2FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ CALL EDX
DUP 810F = M_WL 2A_,_STEP REPEAT \ JO [ESP]
DUP 45C7 = M_WL 2_,_STEP +EBP 4_,_STEP_ REPEAT \ MOV X [EBP] , # X
DUP 05C7 = M_WL A_,_STEP REPEAT \ MOV X , # Y
DUP 0581 = M_WL A_,_STEP REPEAT \ ADD X , # Y
DROP
DUP @
DUP 0424448B = M_WL DROP SetOP \ MOV EAX, 4 [ESP]
8B C, 04 C, 24 C, \ MOV EAX, [ESP]
4 +
REPEAT
DUP 0424448D = M_WL DROP SetOP \ LEA EAX, 4 [ESP]
8B C, C4 C, \ MOV EAX, ESP
4 +
REPEAT
FFFFFF AND
DUP C09D0F = M_WL 3_,_STEP REPEAT \ SETGE AL
DUP C09E0F = M_WL 3_,_STEP REPEAT \ SETLE AL
DUP 90048D = M_WL 3_,_STEP REPEAT \ LEA EAX , [EAX] [EDX*4]
DUP 02048D = M_WL 3_,_STEP REPEAT \ LEA EAX, [EDX] [EAX]
DUP 40B70F = M_WL 4_,_STEP REPEAT \ MOVZX EAX , WORD PTR FE [EAX]
DUP 240401 = M_WL 3_,_STEP REPEAT \ ADD [ESP] , EAX
\ CMPXCHG [EAX] , AL| EAX
\ LSS EAX , [EAX]
\ BTR [EAX] , EAX
\ LFS EAX , [EAX]
\ LGS EAX , [EAX]
\ MOVZX EAX , BYTE|WORD PTR [EAX]
\ 0000.0000 1011.1XXX 0000.1111
DUP FFF8FF
AND 00B00F = M_WL 3_,_STEP REPEAT
DUP 244403 = M_WL 4_,_STEP REPEAT \ ADD EAX, X [ESP]
DUP 24442B = M_WL 4_,_STEP REPEAT \ SUB EAX, X [ESP]
DUP 24448B = M_WL 4_,_STEP REPEAT \ MOV EAX, X [ESP]
DUP 85448B = M_WL 3_,_STEP +EBP REPEAT \ MOV EAX, X [EBP] [EAX*4]
DUP 24048B = M_WL 3_,_STEP REPEAT \ MOV EAX, 0 [ESP]
DUP 20488B = M_WL 3_,_STEP REPEAT \ MOV ECX , [EAX+20H]
DUP 20488D = M_WL 3_,_STEP REPEAT \ LEA ECX , [EAX+20H]
DUP 021C8D = M_WL 3_,_STEP REPEAT \ LEA EBX, [EDX] [EAX]
DUP 85048D = M_WL 7_,_STEP REPEAT \ LEA EAX, X [EAX*4]
DUP 2404FF = M_WL 3_,_STEP REPEAT \ INC [ESP]
DUP 18B60F = M_WL 3_,_STEP REPEAT \ MOVZX EBX, BYTE PTR [EAX]
DUP7B? WHILE 7_,_STEP REPEAT
HEX U. ." @COD, ERROR" ABORT
;
: XC_J
J_COD FE AND 4 = IF EXIT THEN
J_COD DUP 0x8 AND
IF 3
ELSE 5
THEN XOR TO J_COD ;
[DEFINED] [TTO]
[IF]
PREVIOUS PREVIOUS SET-CURRENT
[THEN]
: OPT_CLOSE
EVEN-EBP DP @ TO LAST-HERE ;
: OPT_INIT ?SET -EVEN-EBP ;
: INLINE, ( CFA -- ) OPT_INIT _INLINE, OPT_CLOSE ;
: MACRO, INLINE, ;
: ?BR-OPT-RULES ( cfa -- cfa' flag )
\ ZZZZ IF ." z=" OP1 @ @ U. THEN
OP0 @ :-SET U< IF TRUE EXIT THEN
M\ -3 DTST
OP0 @ C@ 05 = \ ADD EAX, # X
IF M\ 404 DTST
OP0 @ 1+ @ OFF-EAX + TO OFF-EAX
OP1 ToOP0
FALSE -5 ALLOT M\ 405 DTST
EXIT
THEN
DUP 'DROP XOR
OFF-EAX OR
OP0 @ W@ 4589 XOR OR 0= \ MOV X [EBP] , EAX
IF M\ 436 DTST
DP @ TO LAST-HERE INLINE,
M\ 437 DTST
['] NOOP FALSE EXIT
THEN
DUP 'DROP =
OFF-EAX 0=
OP0 @ C@ A1 = AND AND \ MOV EAX , 44444
IF M\ 434 DTST
0 W,
OP0 @ 1+ @ OP0 @ 2+ !
3D83 OP0 @ W! \ CMP 44444, # 0
FALSE M\ 435 DTST
EXIT
THEN
OFF-EAX 0=
OP0 @ @ FFFFFF AND 24048B = AND \ MOV EAX , [ESP]
IF M\ 534 DTST
1 ALLOT
243C83 OP0 @ ! \ CMP DWORD PTR [ESP], 0
FALSE M\ 535 DTST
EXIT
THEN
DUP 'DROP XOR
OP0 @ W@ 458B XOR OR 0= \ MOV EAX , 0 [EBP]
IF M\ 334 DTST
7D83 OP0 @ W! \ CMP X [EBP], # Z
FALSE 0 C, M\ 335 DTST
EXIT
THEN
DUP 'DROP XOR
OP0 @ W@ C20B XOR OR \ 0BC2 OR EAX , EDX
0= IF M\ B4 DTST
D00B OP0 @ W! \ OR EDX , EAX
FALSE M\ B5 DTST
EXIT
THEN
OP0 @ W@ 408D = \ LEA EAX, X [EAX]
IF M\ 234 DTST
C083 OP0 @ W! \ ADD EAX, # X
FALSE M\ 235 DTST
EXIT
THEN
OP0 @ W@ 808D = \ LEA EAX, X [EAX]
IF M\ 34 DTST
05 OP0 @ C!
OP0 @ 2+ @ OP0 @ 1+ ! \ ADD EAX, # X
TRUE -1 ALLOT M\ 35 DTST
EXIT
THEN
DUP 'DROP XOR
OP0 @ @ FFFFFF AND 1FF8C1 XOR OR 0= \ SAR EAX , 1F
IF M\ 13A DTST
OP1 ToOP0
8D J_COD 1 AND XOR TO J_COD
FALSE -3 ALLOT M\ 13B DTST
EXIT
THEN
DUP 'DROP XOR
OP0 @ C@ 35 XOR OR 0= \ XOR EAX, # X
IF M\ 134 DTST
3D OP0 @ C! \ CMP EAX, # X
FALSE M\ 135 DTST
EXIT
THEN
DUP 'DROP XOR
OP0 @ @ FFFFFF AND 240433 XOR OR 0= \ XOR EAX , [ESP]
IF M\ 134 DTST
3B OP0 @ C! \ CMP EAX , [ESP]
FALSE M\ 135 DTST
EXIT
THEN
OP0 @ W@ 4539 XOR \ CMP X [EBP] , EAX
0= IF M\ 76 DTST
3B OP0 @ C! \ CMP EAX, X [EBP]
XC_J
FALSE M\ 77 DTST
EXIT
THEN
OP1 @ :-SET U< IF TRUE EXIT THEN
\ $ 0<> IF
DUP 'DROP XOR
OP1 @ @ C01BD8F7 XOR OR 0= \ NEG EAX \ SBB EAX, EAX
IF M\ 36 DTST
OP2 ToOP0
\ 084 TO J_COD
FALSE -4 ALLOT M\ 37 DTST
EXIT
THEN
\ $ 0= IF
DUP 'DROP XOR
OP1 @ @ 1B01E883 XOR OR \ SUB EAX , # 1
OP0 @ W@ C01B XOR OR 0= \ SBB EAX , EAX
IF M\ 38 DTST
\ OP2 @ W@ U.
OP2 ToOP0
J_COD 1 XOR TO J_COD
FALSE -5 ALLOT M\ 39 DTST
EXIT
THEN
\ $ U< IF
DUP 'DROP XOR
OP1 @ C@ 3D <>
OP1 @ C@ 3B <> AND
\ OP1 @ W@ 053B <> AND
\ OP1 @ W@ D03B <> AND \ CMP EDX , EAX
OP1 @ @ FFFD AND
4539 <> AND \ CMP X [EBP] , EAX
OP0 @ W@ C01B XOR OR OR 0= \ SBB EAX , EAX
IF M\ 3A DTST
OP1 ToOP0
83 J_COD 1 AND XOR TO J_COD
FALSE -2 ALLOT M\ 3B DTST
EXIT
THEN
OP1 @ @ FFFFFF AND 240C8B XOR \ MOV ECX , [ESP]
OP0 @ W@ C13B XOR OR 0= \ CMP EAX , ECX
IF M\ 33A DTST
043B OP1 @ W!
OP1 ToOP0
FALSE -2 ALLOT M\ 33B DTST
EXIT
THEN
OP1 @ @ FFFFFF AND 240C8B XOR \ MOV ECX , [ESP]
OP0 @ W@ C133 XOR OR 0= \ XOR EAX , ECX
IF M\ 33A DTST
0433 OP1 @ W! \ XOR ECX , [ESP]
OP1 ToOP0
FALSE -2 ALLOT M\ 33B DTST
EXIT
THEN
OP1 @ @ C13BCA8B = \ MOV ECX , EDX CMP EAX , ECX
IF M\ 33A DTST
C23B OP1 @ W! \ CMP EAX , EDX
OP1 ToOP0
FALSE -2 ALLOT M\ 33B DTST
EXIT
THEN
OP1 @ W@ 558B XOR \ MOV EDX , 0 [EBP]
OP0 @ W@ C23B XOR OR 0= \ CMP EAX , EDX
IF M\ 43A DTST
453B OP1 @ W! \ CMP EAX , 0 [EBP]
OP1 ToOP0
FALSE -2 ALLOT M\ 43B DTST
EXIT
THEN
DUP 'DROP XOR
OP1 @ @ C83B008B XOR OR \ MOV EAX , [EAX] CMP ECX , EAX
0= IF M\ 43A DTST
083B OP1 @ W! \ CMP ECX , [EAX]
OP1 ToOP0
FALSE -2 ALLOT M\ 43B DTST
EXIT
THEN
DUP 'DROP XOR
OP1 @ @ D03B008B XOR OR \ MOV EAX , [EAX] CMP EDX , EAX
0= IF M\ 43A DTST
103B OP1 @ W! \ CMP EDX , [EAX]
OP1 ToOP0
FALSE -2 ALLOT M\ 43B DTST
EXIT
THEN
DUP 'DROP XOR
OP1 @ @ C13B008B XOR OR \ MOV EAX , [EAX] CMP EAX , ECX
0= IF M\ 80 DTST
083B OP1 @ W! \ CMP ECX , [EAX]
XC_J
OP1 ToOP0
FALSE -2 ALLOT M\ 81 DTST
EXIT
THEN
OP1 @ C@ B9 XOR \ MOV ECX , # 3
OP0 @ W@ C133 XOR OR \ XOR EAX , ECX
0= IF M\ 40 DTST
3D OP1 @ C! \ CMP EAX , # 1
OP1 ToOP0
FALSE -2 ALLOT M\ 41 DTST
EXIT
THEN
\ ZZZZ IF ." Z=" OP1 @ @ U. OP1 @ W@ U. OP0 @ W@ U. THEN
OP1 @ W@ 558B XOR \ MOV EDX , 0 [EBP]
OP0 @ W@ C23B XOR OR \ CMP EAX , EDX
0= IF M\ 68 DTST
453B OP1 @ C! \ CMP EAX , 0 [EBP]
OP1 ToOP0
FALSE -2 ALLOT M\ 69 DTST
EXIT
THEN
OP1 @ C@ B9 XOR \ 57B523 B901000000 MOV ECX , # 1
OP0 @ W@ C83B XOR OR \ 57B528 3BC8 CMP ECX , EAX
0= IF M\ 74 DTST
3D OP1 @ C! \ CMP EAX , # 1
XC_J
OP1 ToOP0
FALSE -2 ALLOT M\ 75 DTST
EXIT
THEN
OP1 @ @ C23B008B = \ MOV EAX , [EAX] CMP EAX , EDX
IF M\ 78 DTST
103B OP1 @ W! \ CMP EDX , [EAX]
XC_J
OP1 ToOP0 -2 ALLOT
FALSE M\ 79 DTST
EXIT
THEN
DUP 'DROP XOR
OP1 @ @ FFFFFF AND 24448B XOR OR \ MOV EAX , 10 [ESP]
OP0 @ C@ 3D XOR OR \ 597707 3D02000000 CMP EAX , # 2
0= IF M\ 7A DTST
7C81 OP1 @ W! \ CMP 10 [ESP] , # 2
OP0 @ 1+ @ OP0 @ !
OP1 ToOP0 -1 ALLOT
FALSE M\ 7B DTST
EXIT
THEN
OP1 @ @ FFFFFF AND 244C8B XOR \ MOV ECX , 20 [ESP]
OP0 @ W@ C83B XOR OR \ CMP ECX , EAX
0= IF M\ 7C DTST
443B OP1 @ W! \ CMP EAX , 20 [ESP]
OP0 @ 1+ @ OP0 @ !
XC_J
OP1 ToOP0 -2 ALLOT
FALSE M\ 7D DTST
EXIT
THEN
OP1 @ W@ 0D8B XOR \ MOV ECX , 44444
OP0 @ W@ C83B XOR OR \ CMP ECX , EAX
0= IF M\ 7C DTST
053B OP1 @ W! \ CMP EAX , 44444
OP0 @ 1+ @ OP0 @ !
XC_J
OP1 ToOP0 -2 ALLOT
FALSE M\ 7D DTST
EXIT
THEN
DUP 'DROP XOR
OP1 @ @ FFFFFF AND 85048B XOR OR \ MOV EAX , X [EAX*4]
OP0 @ C@ 3D XOR OR \ 5960F8 3500100000 CMP EAX , # 1000
0= IF M\ 86 DTST
3C81 OP1 @ W! \ CMP X [EAX*4] , # 1000
OP0 @ 1+ @ OP0 @ !
OP1 ToOP0 -1 ALLOT
FALSE M\ 87 DTST
EXIT
THEN
DUP 'DROP XOR
OP1 @ C@ A1 XOR OR \ 5978EF A135755900 MOV EAX , 597535
OP0 @ C@ 3D XOR OR \ 5978F4 3D41000000 CMP EAX , # 1000
0= IF M\ 96 DTST
OP1 @ 1+ @ OP1 @ 2+ !
3D81 OP1 @ W! \ CMP 597535 , # 1000
OP1 ToOP0
FALSE M\ 97 DTST
EXIT
THEN
DUP 'DROP XOR
OP1 @ W@ D8F7 XOR OR \ 581E16 F7D8 NEG EAX
OP0 @ W@ C203 XOR OR \ 581E18 03C2 ADD EAX , EDX
0= IF M\ B8 DTST
D02B OP1 @ W! \ SUB EDX , EAX
OP1 ToOP0 -2 ALLOT
FALSE M\ B9 DTST
EXIT
THEN
OP1 @ @ C90BCA8B XOR \ 8BCA MOV ECX , EDX
\ 0BC9 OR ECX , ECX
0= IF M\ BA DTST
D20B OP1 @ W! \ OR EDX , EDX
OP1 ToOP0 -2 ALLOT
FALSE M\ BB DTST
EXIT
THEN
OP1 @ @ 3DFF408D XOR
OP0 @ 1+ @ OR \ LEA EAX , FF [EAX] CMP EAX , # 0
0= IF M\ 1BA DTST
48 OP1 @ C! \ DEC EAX
OP1 ToOP0 -7 ALLOT
FALSE M\ 1BB DTST
EXIT
THEN
OP2 @ :-SET U< IF TRUE EXIT THEN
OP2 @ W@ 4589 XOR \ MOV F8 [EBP] , EAX
OP1 @ @ 453BC033 XOR OR \ XOR EAX , EAX CMP EAX , F8 [EBP]
OP0 @ 2+ C@
OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X ))
0= IF M\ 4E DTST
3D OP1 @ C! OP1 @ 1+ 0! \ CMP EAX , # 0
XC_J
OP1 ToOP0
FALSE M\ 4F DTST
EXIT
THEN
OP2 @ W@ 5589 XOR \ MOV F8 [EBP] , EDX
OP1 @ @ 453B008B XOR OR \ MOV EAX , [EAX] CMP EAX , F8 [EBP]
OP0 @ 2+ C@
OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X ))
\ OP0 @ 2+ C@ C>S OFF-EBP > OR !!!!
0= IF M\ 23A DTST
C23B OP0 @ W! \ CMP EAX , EDX
FALSE -1 ALLOT M\ 23B DTST
EXIT
THEN
OP2 @ W@ 4D89 XOR \ MOV F8 [EBP] , ECX
OP1 @ @ 453B008B XOR OR \ MOV EAX , [EAX] CMP EAX , F8 [EBP]
OP0 @ 2+ C@
OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X ))
0= IF M\ 7E DTST
C13B OP0 @ W! \ CMP EAX , ECX
FALSE -1 ALLOT M\ 7F DTST
EXIT
THEN
OP1 @ W@ 8B XOR \ MOV EAX , [EAX]
OP0 @ W@ 4539 XOR OR \ CMP F8 [EBP] , EAX
OP0 @ 2+ C@
OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X ))
\ OP0 @ 2+ C@ C>S OFF-EBP > OR
0= IF
OP2 @ W@ 4D89 = \ MOV F8 [EBP] , ECX
IF M\ 23A DTST
C83B OP0 @ W! \ CMP ECX , EAX
FALSE -1 ALLOT M\ 23B DTST
EXIT
THEN
OP2 @ W@ 5589 = \ MOV F8 [EBP] , EDX
\ MOV EAX , [EAX] CMP F8 [EBP] , EAX
IF M\ 33A DTST
D03B OP0 @ W! \ CMP EDX , EAX
FALSE -1 ALLOT M\ 33B DTST
EXIT
THEN
THEN
OP3 @ :-SET U< IF TRUE EXIT THEN
\ $ < IF
DUP 'DROP XOR
OP2 @ @ FFFFFCFF AND 83C09C0F XOR OR
OP1 @ @ 4801E083 XOR OR 0=
\ 0F9DC0 SETGE AL
\ 83E001 AND EAX , # 1
\ 48 DEC EAX
IF M\ 3C DTST
OP2 @ 1+ C@ 10 - J_COD 1 AND XOR TO J_COD
OP3 ToOP0
FALSE -7 ALLOT M\ 3D DTST
EXIT
THEN
\ 5 OVER = IF
OP0 @ W@ 4533 = \ XOR EAX , F8 [EBP]
IF
DUP 'DROP XOR
OP3 @ W@ 4589 XOR OR \ MOV FC [EBP] , EAX
OP2 @ W@ 45C7 XOR OR \ MOV F8 [EBP] , # 5
OP1 @ W@ 458B XOR OR \ MOV EAX , FC [EBP]
OP3 @ 2+ C@ OP1 @ 2+ C@ XOR OR
OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0=
IF M\ 234 DTST
3D OP2 @ C!
OP2 @ 3 + @ OP2 @ 1+ !
OP2 ToOP0
TRUE -8 ALLOT M\ 235 DTST
EXIT
THEN
THEN
TRUE ;
: BR-EVEN-EAX OFF-EAX
IF M\ 1002 DTST
SetOP
5 C, OFF-EAX ,
0 TO OFF-EAX
M\ 1003 DTST
THEN
;
: ?BR-OPT
BEGIN BEGIN M\ -9 DTST
?BR-OPT-RULES
UNTIL M\ -7 DTST
['] NOOP OPT-RULES NIP
UNTIL BR-EVEN-EAX
M\ -5 DTST
\ ZZZZ IF ." B=" DUP U. THEN
OP0 @ :-SET U<
IF SetOP 0xC00B W, \ OR EAX, EAX
EXIT
THEN
OP0 @ C@
\ 00XX.X101
DUP C7 AND 05 <> \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
\ OVER 3D <> AND \ ~ CMP EAX, # X
OVER 40 <> AND \ DEC EAX
OVER 48 <> AND \ INC EAX
OVER 3B <> AND \ CMP
OVER 0B <> AND \ OR
NIP
OP0 @ W@
DUP 4000 OR ADD|XOR|OR|AND= INVERT
OVER C01B <> AND \ SBB EAX, EAX
OVER D02B <> AND \ SUB EDX, EAX
OVER 4539 <> AND \ CMP X [EBP], EAX
\ OVER 103B <> AND \ CMP EDX , [EAX]
\ OVER 453B <> AND \ CMP EAX , X [EBP]
\ OVER 053B <> AND \ CMP EAX , X
OVER C083 <> AND \ ADD EAX , # X
OVER C203 <> AND \ ADD EAX , EDX
OVER C133 <> AND \ XOR EAX , ECX
OVER F8C1 <> AND \ SAR EAX , X
OVER 7D83 <> AND \ CMP X [EBP], # Z
OVER 3D81 <> AND \ CMP 44444, # 55555
OVER 3C81 <> AND \ CMP X [EAX*4] , # 55555
OVER 7C81 <> AND \ CMP X [ESP] , # X
OVER 3D83 <> AND \ CMP 44444, # 0
OVER 3C83 <> AND \ CMP [ESP], # 0
\ OVER C20B <> AND \ OR EAX , EDX
NIP
OP0 @ @ FFFFFF AND 240433 XOR \ XOR EAX , [ESP]
AND
AND
IF SetOP 0xC00B W, \ OR EAX, EAX
THEN
\ DP @ TO :-SET
;
: ??BR-OPT
OPT? IF OPT_INIT
?BR-OPT
M\ -B DTST
OPT_CLOSE
THEN ;
: ???BR-OPT
OPT? 0= IF C00B W, \ OR EAX, EAX
THEN
FALSE TO ~BR-OPT 'DROP ??BR-OPT INLINE,
TRUE TO ~BR-OPT
OPT?
IF OPT_INIT
OP0 @ W@ C00B = DUP >R IF OP0 OPexcise THEN
['] NOOP ?BR-OPT DROP
\ SetOP 0xC00B W, \ OR EAX, EAX
OP0 @ W@ C00B = R> 0= AND IF OP0 OPexcise THEN
OPT_CLOSE
THEN
;
: OPT ( -- ) ['] NOOP DO_OPT DROP ;
: FORLIT, ( N -- )
'DUP _INLINE, SetOP 0B8 C, , OPT ;
: CON>LIT ( CFA -- CFA TRUE | FALSE )
OPT? 0= IF TRUE EXIT THEN ?SET
MM_SIZE 0= IF TRUE EXIT THEN
DUP C@ 0E8 <> IF TRUE EXIT THEN
DUP 1+ REL@ CELL+
DUP CREATE-CODE =
IF DROP OPT_INIT 5 + [>T] FORLIT, FALSE OPT_CLOSE EXIT
THEN
DUP USER-CODE =
IF DROP OPT_INIT 'DUP _INLINE,
SetOP 878D W, 5 + @ , OPT FALSE OPT_CLOSE EXIT
THEN
DUP USER-VALUE-CODE =
IF DROP OPT_INIT 'DUP _INLINE,
SetOP 878B W, 5 + @ , OPT FALSE OPT_CLOSE EXIT
THEN
DUP CONSTANT-CODE =
IF DROP OPT_INIT 5 + DUP 5 + REL@
TOVALUE-CODE CELL- =
IF 'DUP _INLINE, SetOP 0A1 C, [>T] , OPT
ELSE @ FORLIT,
THEN FALSE OPT_CLOSE EXIT
THEN
DUP 1+ REL@ CELL+ DOES-CODE =
IF 5 + \ CFA
SWAP 5 + OPT_INIT FORLIT,
TRUE OPT_CLOSE EXIT
THEN
DUP TOUSER-VALUE-CODE =
IF DROP OPT_INIT
SetOP 8789 W, CELL- @ , OPT
'DROP _INLINE,
FALSE OPT_CLOSE EXIT
THEN
TOVALUE-CODE =
IF OPT_INIT
SetOP A3 C, CELL- [>T] , OPT
'DROP _INLINE,
FALSE OPT_CLOSE EXIT
THEN
TRUE
;
: J?_STEP ( ADR OPX -- ADR OPX+4 FALSE | OPX TRUE TRUE | ADR FALSE TRUE )
OVER J-SET U> 0= IF DROP FALSE TRUE EXIT THEN
OVER DP @ = IF NIP TRUE TRUE EXIT THEN
DUP @ @ FFFFF0FF AND 800F = IF DROP FALSE TRUE EXIT THEN
DUP @ @ 000000E9 = IF DROP FALSE TRUE EXIT THEN
DUP CELL+ OP0 OpBuffSize + U>
IF DROP FALSE TRUE EXIT THEN
2DUP @ = IF NIP CELL+ TRUE TRUE EXIT THEN
CELL+ FALSE
;
: J_+!
DUP C@ F0
AND 70 = IF 1+ ELSE
DUP C@ EB = IF 1+ ELSE
DUP C@ E9 = IF 1+ ELSE
DUP W@ F0FF
AND 800F = IF 2+ ELSE
." J_+! ERR" ABORT
THEN THEN THEN THEN +!
;
: J_MOVE ( OPX n -- )
OVER OP0 <>
IF
OVER CELL- @
2DUP - NEGATE
OVER DP @ - NEGATE ( U. U. U. ABORT ) CMOVE
OVER OP0
?DO DUP NEGATE I +!
I @ C@ E8 = IF DUP I @ 1+ +! THEN
CELL
+LOOP
THEN
OVER @
JP0 JpBuffSize + JP0
?DO I @
IF DUP I @ U<
IF
OVER NEGATE I +!
DUP I @ J_@ U>
IF OVER I @ J_+!
THEN
ELSE
DUP I @ <>
IF
DUP I @ J_@ U<
IF OVER NEGATE I @ J_+!
THEN
THEN
THEN
THEN CELL
+LOOP DROP
\ THEN
NIP NEGATE DUP ALLOT :-SET + TO :-SET EXIT
;
TRUE VALUE J_OPT?
\ FALSE VALUE J_OPT?
: RESOLVE_OPT ( ADR -- )
OPT? 0= IF DROP EXIT THEN
J_OPT? 0= IF DROP EXIT THEN
DUP CELL- JP0 JpBuffSize + CELL- @ U<
IF DUP CELL- REL@ CELL+ J-SET UMAX TO J-SET THEN
\ ." J_S" \ BASE @ HEX J-SET U. DP @ U. BASE !
DP @ OVER - 7E > IF ( ." S" ) DROP EXIT THEN
DP @ LAST-HERE <> IF ( ." L" ) ?SET DROP EXIT THEN
OPT? 0= IF DROP EXIT THEN
CELL+ OP0
BEGIN J?_STEP
UNTIL
IF DUP @
DUP C@ E9 =
IF EB SWAP C! 3
ELSE
DUP 1+ W@ 10 - \ 400 +
SWAP W! 4
THEN
\ OVER CELL- @ REST
J_MOVE DP @ TO LAST-HERE EXIT
THEN \ OPX
DROP
;
\ 0 TO J_OPT?
BASE !