1. Куча / Говнокод #25132

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    : ENUM>  ( -- )  ;
    : <ENUM ( xt n -- )
       BEGIN
          BEGIN
             >IN @  BL WORD DUP C@ 0=
          WHILE
             2DROP  REFILL 0= IF EXIT THEN
          REPEAT
          FIND SWAP ['] ENUM> = AND IF DROP 2DROP EXIT THEN
          >IN !
          2DUP SWAP EXECUTE
          1+
       AGAIN
    ;
    WORDLIST CONSTANT ASSEMBLER
    GET-ORDER ASSEMBLER SWAP 1+ SET-ORDER  DEFINITIONS
    HEX
    VARIABLE 'BYTES
    : B,  ( c -- )  C,  1 'BYTES @ +! ;
    : W,  ( u -- )  DUP B,  8 RSHIFT B, ;
    : DB"  ( "ccc<quote>" -- c-addr u )
       [CHAR] " PARSE SWAP OVER HERE >R HERE SWAP DUP ALLOT CMOVE
       R> SWAP DUP 'BYTES @ +!
    ;
    : W!  ( u addr -- )  2DUP C!  SWAP 8 RSHIFT SWAP 1+ C! ;
    ' CONSTANT 0 <ENUM  AX CX DX BX SP BP SI DI  ENUM>
    ' CONSTANT 0 <ENUM  AL CL DL BL AH CH DH BH  ENUM>
    : MEM  ( u "<spaces>name" -- )  DUP 18 AND 3 RSHIFT >R 7 AND R> 2CONSTANT ;
    ' MEM 0 <ENUM
       [BX+SI]   [BX+DI]   [BP+SI]   [BP+DI]   [SI]   [DI]   [W]      [BX]
       [BX+SI]+B [BX+DI]+B [BP+SI]+B [BP+DI]+B [SI]+B [DI]+B [BP]+B   [BX]+B
       [BX+SI]+W [BX+DI]+W [BP+SI]+W [BP+DI]+W [SI]+W [DI]+W [BP]+W   [BX]+W
    ENUM>
    :NONAME  ( reg1 reg2 -- )  3 LSHIFT OR B, ;
    :NONAME  ( reg off u -- )  ROT 3 LSHIFT OR B, W, ;
    :NONAME  ( reg off u -- )  ROT 3 LSHIFT OR B, B, ;
    :NONAME  ( reg off 6 | reg u -- )
       DUP 6 = IF
          ROT 3 LSHIFT OR B, W,
       ELSE
          SWAP 3 LSHIFT OR B,
       THEN 
    ;
    CREATE MOD , , , ,
    3 CONSTANT REG
    : -- ( opcode "<spaces>name" -- )  CREATE C,   DOES> C@ B, CELLS MOD + @ EXECUTE ;
    ' --  0   <ENUM    ADD<B    ADD<W    ADD>B    ADD>W    ENUM>
    ' --  8   <ENUM    OR<B     OR<W     OR>B     OR>W     ENUM>
    ' --  10  <ENUM    ADC<B    ADC<W    ADC>B    ADC>W    ENUM>
    ' --  18  <ENUM    SBB<B    SBB<W    SBB>B    SBB>W    ENUM>
    ' --  20  <ENUM    AND<B    AND<W    AND>B    AND>W    ENUM>
    ' --  28  <ENUM    SUB<B    SUB<W    SUB>B    SUB>W    ENUM>
    ' --  30  <ENUM    XOR<B    XOR<W    XOR>B    XOR>W    ENUM>
    ' --  38  <ENUM    CMP<B    CMP<W    CMP>B    CMP>W    ENUM>
    ' --  85  <ENUM    TESTB    TESTW    XCHGB    XCHGW
                       MOV<B    MOV<W    MOV>B    MOV>W    ENUM>
    8D -- LEA    0C4 -- LES    0C5 -- LDS
    : -- ( opcode "<spaces>name" -- )  CREATE C,   DOES> C@ B, B, ;
    4  -- AL-ADD     0C  -- AL-OR    14  -- AL-ADC   1C  -- AL-SBB
    24 -- AL-AND     2C  -- AL-SUB   34  -- AL-XOR   3C  -- AL-CMP
    6B -- PUSHB      0A8 -- AL-TEST  0CD -- INT      0EB -- JMP-SHORT
    ' --  70  <ENUM  JO JNO JB JAE JZ JNZ JBE JA JS JNS JP JNP  ENUM>
    ' --  0B0 <ENUM    AL-MOV    CL-MOV    DL-MOV    BL-MOV
                       AH-MOV    CH-MOV    DH-MOV    BH-MOV    ENUM>
    ' --  0E0 <ENUM    LOOPNZ    LOOPZ     LOOP      JCXZ
                       INB       INW       OUTB      OUTW      ENUM>
    : -- ( opcode "<spaces>name" -- )  CREATE C,   DOES> C@ B, W, ;
    5   -- AX-ADD    0D  -- AX-OR     15  -- AX-ADC    1D  -- AX-SBB
    25  -- AX-AND    2D  -- AX-SUB    35  -- AX-XOR    3D  -- AX-CMP
    68  -- PUSHW     0A0 -- MEM>AL    0A1 -- MEM>AX    0A2 -- AL>MEM
    0A3 -- AX>MEM    0A9 -- AX-TEST   0C2 -- RETW      0CA -- RETW-FAR
    0E8 -- CALL      0E9 -- JMP
    ' --  0B8  <ENUM    AX-MOV    CX-MOV    DX-MOV   BX-MOV
                        SP-MOV    BP-MOV    SI-MOV   DI-MOV    ENUM>
    : -- ( opcode "<spaces>name" -- )  CREATE C,   DOES> C@ B, ;
    6   -- ES-PUSH             7   -- ES-POP    0E -- CS-PUSH    16 -- SS-PUSH
    17  -- SS-POP              1E  -- DS-PUSH   1F  -- DS-POP     26 -- ES:
    26  -- DAA                 2E  -- CS:       2F  -- DAS        36 -- SS:
    37  -- AAA                 3E  -- DS:       3F  -- AAS        60 -- PUSHA
    61  -- POPA                64  -- FS:       65  -- GS:        66 -- CHANGE-OP-SIZE
    67  -- CHANGE-ADDR-SIZE    0C3 -- RET       0C9 -- LEAVE      0CB -- RET-FAR
    0CC -- INT3                0CE -- INTO      0CF -- IRET       0F0 -- LOCK
    ' --  40  <ENUM    AX-INC  CX-INC  DX-INC  BX-INC  SP-INC  BP-INC  SI-INC  DI-INC
                       AX-DEC  CX-DEC  DX-DEC  BX-DEC  SP-DEC  BP-DEC  SI-DEC  DI-DEC
                       AX-PUSH CX-PUSH DX-PUSH BX-PUSH SP-PUSH BP-PUSH SI-PUSH DI-PUSH
                       AX-POP  CX-POP  DX-POP  BX-POP  SP-POP  BP-POP  SI-POP  DI-POP
    ENUM>
    ' --  6C  <ENUM    INSB          INSW          OUTSB         OUTSW         ENUM>
    ' --  80  <ENUM    NOP           CX-AX-XCHG    DX-AX-XCHG    BX-AX-XCHG
                       SP-AX-XCHG    BP-AX-XCHG    SI-AX-XCHG    DI-AX-XCHG
                       CBW           CWD                                       ENUM>
    ' --  9B  <ENUM    WAIT      PUSHF     POPF       SAHF       LAHF          ENUM>
    ' --  0A4 <ENUM    MOVSB     MOVSW     CMPSB      CMPSW                    ENUM>
    ' --  0AA <ENUM    STOSB     STOSW     LODSB      LODSW      SCASB  SCASW  ENUM>
    ' --  0D4 <ENUM    AAM       AAD       SALC       XLAT                     ENUM>
    ' --  0EC <ENUM    DX-AL-IN  DX-AX-IN  AL-DX-OUT  AX-DX-OUT                ENUM>
    ' --  0F2 <ENUM    REPNZ     REPZ      HLT        CMC                      ENUM>
    ' --  0F8 <ENUM    CLC       STC       CLI        STI        CLD    STD    ENUM>

    Я вчера упоролся подумал, хуля я как лох пешу форт на асме, ТруЪ фротеры пишут форт на ыорте. И начал я с этого —– я представляю вам единственный и неповторимый говно-фрот-асамблец за авторством моего меня.

    Примерим:

    VARIABLE BYTES
    BYTES 'BYTES !
    CREATE PROG

    9 AH-MOV
    0 DX-MOV HERE 2 -
    21 INT
    4C00 AX-MOV
    21 INT

    DB" Hello, Forth-ASSembler!$" DROP PROG - 100 + SWAP W!

    PROG BYTES @ DUMP


    https://ideone.com/UtN1EZ

    Запостил: another_fake, 29 Ноября 2018

    Комментарии (170) RSS

    Добавить комментарий