The following blocks implement a 386 assembler for RetroForth                                                                   This code was provided by Albert van der Horst in the           comp.lang.forth newsgroup on January 11, 2005. The topic was    "retroforth 386 assembler"                                                                                                      It has been modified slightly to work under Release 8, and to   fit into block format.                                          hex                                                             : split dup 8 >> swap $ff and ;                                 : post  swap , 1 cells - allot ;                                : fix| 1- >r split r@ +! r> ;                                                                                                                                                                                                                                   n e                                                             : .1pi 1 post ;                                                 : 1pi create: last @ cell+ ! as .1pi ;                          : .2pi 2 post ;                                                 : 2pi create: last @ cell+ ! as .2pi ;                          : .3pi 3 post ;                                                 : 3pi create: last @ cell+ ! as .3pi ;                                                                                          n e                                                             : .fir here swap for r> swap fix| swap 1+ >r next drop ;        : fir create: last @ cell+ ! as .fir ;                                                                                                                                                                                                                                                                                                                                                          n e                                                             | Create a family adding INC to OPCODE with COUNT members       : 1family, for dup 1pi over + next 2drop ;                      : 2family, for dup 2pi over + next 2drop ;                      : 3family, for dup 3pi over + next 2drop ;                      : family|r for dup fir over + next 2drop ;                      ' 1, alias (C,)   ' 2, alias (W,)   ' ,  alias (L,)                                                                             n e                                                             | -------------------- system independant -------------          40 00 4 family|r ZO| BO| XO| R|                                 05 fir MEM| | instead of ZO| BP| )                              01 00 8 family|r [AX] [CX] [DX] [BX] ~SIB| [BP] [SI] [DI]       01 00 8 family|r AL| CL| DL| BL| AH| CH| DH| BH|                01 00 8 family|r AX| CX| DX| BX| SP| BP| SI| DI|                08 00 8 family|r AL'| CL'| DL'| BL'| AH'| CH'| DH'| BH'|       n e                                                              08 00 8 family|r AX'| CX'| DX'| BX'| SP'| BP'| SI'| DI'|        08 00 6 family|r ES| CS| SS| DS| FS| GS|                       0100 0000 2 family|r B| X|                                      0200 0000 2 family|r F| T|                                      6 fir MEM|'                                                     1 0 6 family|r [BX+SI]' [BX+DI]' [BP+SI]' [BP+DI]' [SI]' [DI]'  1 0 2 family|r [BP]' [BX]'                                      n e                                                             | O=obligatory R=Relative I=Immediate                           ' (W,) alias OW,        ' (L,) alias IL,                        ' (L,) alias (RL,)      ' (W,) alias IW,                        ' (W,) alias (RW,)      ' (C,) alias IB,                        ' (C,) alias (RB,)      ' (L,) alias L,                         ' (W,) alias SG,        ' (W,) alias W,                         ' (C,) alias P,         ' (C,) alias B,    ' (C,) alias IS,     n e                                                             08 06 4 1family, PUSH|ES, PUSH|CS, PUSH|SS, PUSH|DS,            08 07 4 1family, POP|ES, -- POP|SS, POP|DS,                     08 26 4 1family, ES:, CS:, SS:, DS:,                            08 27 4 1family, DAA, DAS, AAA, AAS,                            01 00 2 family|r B'| X'|                                        08 04 8 1family, ADDI|A, ORI|A, ADCI|A, SBBI|A, ANDI|A, SUBI|A, 08 04 8 1family, XORI|A, CMPI|A,                                n e                                                             02 A0 2 1family, MOV|TA, MOV|FA,                                70 1pi J,  | As in J, L| Y| <CALC> S,                               01 00 2 family|r Y| N|                                          02 00 8 family|r O| C| Z| CZ| S| P| L| LE|                  08 40 4 1family, INC|X, DEC|X, PUSH|X, POP|X,                   90 1pi XCHG|AX,                                                 08 00 8 2family, ADD, OR, ADC, SBB, AND, SUB, XOR, CMP,         n e                                                             02 84 2 2family, TEST, XCHG,                                    01 98 8 1family, CBW, CWD, IR2, WAIT, PUSHF, POPF, SAHF, LAHF,  02 A4 6 1family, MOVS, CMPS, -- STOS, LODS, SCAS,               08 B0 2 1family, MOVI|BR, MOVI|XR,                              08 C3 2 1family, RET,  RETFAR,  08 C2 2 1family, RET+, RETFAR+, 01 C4 2 2family, LES, LDS,  00C6 2pi MOVI,   0CD 1pi INT,       01 CC 4 1family, INT3, -- INTO, IRET,                           n e                                                             01 D4 4 1family, AAM, AAD, -- XLAT,                             01 E0 4 1family, LOOPNZ, LOOPZ, LOOP, JCXZ,                     02 E4 2 1family, IN|P, OUT|P,  2 EC 2 1family, IN|D, OUT|D,     01 E8 2 1family, CALL, JMP,                                     0088 2pi MOV,           008C 2pi MOV|SG,        008D 2pi LEA,   EA 1pi JMPFAR,  EB 1pi JMPS,    9A 1pi CALLFAR, A8 1pi TESTI|A, 01 F0 6 1family, LOCK, -- REPNZ, REPZ, HLT, CMC,                n e                                                             01 F8 6 1family, CLC, STC, CLI, STI, CLD, STD, | 38FE           800 80 8 2family, ADDI, ORI, ADCI, SBBI, ANDI, SUBI, XORI, CMPI,0800 83 8 2family, ADDSI, -- ADCSI, SBBSI, -- SUBSI, -- CMPSI,  800 10F6 6 2family, NOT, NEG, MUL|AD, IMUL|AD, DIV|AD, IDIV|AD, 0800 00FE 2 2family, INC, DEC,                                  0800 10FF 4 2family, CALLO, CALLFARO, JMPO, JMPFARO,                                                                            n e                                                             0200 0000 2 family|r 1| V|                                      0800 00D0 8 2family, ROL, ROR, RCL, RCR, SHL, SHR, -- SAR,      0800 C0 8 2family, ROLI, RORI, RCLI, RCRI, SHLI, SHRI, -- SARI,                                                                 00F6 2pi TESTI,         008F 2pi POP,           30FF 2pi PUSH,  00AF0F 3pi IMUL,                                                decimal                                                                                                                         