( ASSEMBLER CODE END-CODE C; ) \ AvdH A0oct03 NAMESPACE ASSEMBLER \ ISO standard words. : CODE ?EXEC NAME (CREATE) ASSEMBLER !CSP ; : ;CODE ?CSP POSTPONE (;CODE) [COMPILE] [ ASSEMBLER ; IMMEDIATE : END-CODE ?EXEC ?CSP PREVIOUS ; \ Non standard. A traditional alias for END-CODE . : C; END-CODE ; \ ( ASSEMBLER-GENERIC SPLIT 1PI FIR 1FAMILY, ) \ A7oct19 AvdH : SPLIT 0 100 UM/MOD SWAP ; \ Split X : ls BYTE and REMAINDER \ Post INSTRUCTION of LENGTH. Big endian specific! : POST SWAP , 1 CELLS - ALLOT ; \ Fixup with ms byte of FIX below ADDR, leave next FIX ADDR : FIX| 1- >R SPLIT R@ SWAP TOGGLE R> ; : 1PI CREATE , DOES> @ 1 POST ; \ 1 byte post-it opcode : 2PI CREATE , DOES> @ 2 POST ; \ 2 byte post-it opcode : 3PI CREATE , DOES> @ 3 POST ; \ 3 byte post-it opcode \ Fixup from behind starting with ls byte. : FIR CREATE , DOES> @ HERE BEGIN FIX| OVER 0= UNTIL 2DROP ; \ Create a family adding INC to OPCODE with COUNT members : 1FAMILY, 0 DO DUP 1PI OVER + LOOP DROP DROP ; : 2FAMILY, 0 DO DUP 2PI OVER + LOOP DROP DROP ; : 3FAMILY, 0 DO DUP 3PI OVER + LOOP DROP DROP ; : FAMILY|R 0 DO DUP FIR OVER + LOOP DROP DROP ; ( ASSEMBLER-CODES-i86 [AX] AX| ) CF: ?32 \ A4sep27 AvdH 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'| 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| ( Percented thingies are for 16 bits protected code, e.g. AS: ) ( C7) 6 FIR MEM|% ( 07) 1 0 8 FAMILY|R [BX+SI]% [BX+DI]% [BP+SI]% [BP+DI]% [SI]% [DI]% [BP]% [BX]% ( ASSEMBLER-CODES-i86 SIB,, [AX ) CF: ?32 \ A4sep27 AvdH \ Fixups from this pages must come after all others \ and start with a [xx . 0 1PI SIB,, \ Required after SIB| 08 00 8 FAMILY|R AX] CX] DX] BX] 0] BP] SI] DI] 40 0 4 FAMILY|R +1* +2* +4* +8* : [AX ~SIB| SIB,, AX| ; : [SP ~SIB| SIB,, SP| ; : [CX ~SIB| SIB,, CX| ; : [BP ~SIB| SIB,, BP| ; : [DX ~SIB| SIB,, DX| ; : [SI ~SIB| SIB,, SI| ; : [BX ~SIB| SIB,, BX| ; : [DI ~SIB| SIB,, DI| ; '[BP ALIAS [MEM ( ASSEMBLER-CODES-i86 IL, IW, ) \ A4sep27 AvdH : lsbyte, SPLIT C, ; : (W,) lsbyte, lsbyte, DROP ; : (L,) lsbyte, lsbyte, lsbyte, lsbyte, DROP ; ( 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, ( ASSEMBLER-CODES-i86 --opcodes1 ) \ A4sep27 AvdH 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, XORI|A, CMPI|A, 02 A0 2 1FAMILY, MOV|TA, MOV|FA, 70 1PI J, ( As in J, L| Y| 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, ( ASSEMBLER-CODES-i86 --opcodes2 ) \ A4sep27 AvdH 08 00 8 2FAMILY, ADD, OR, ADC, SBB, AND, SUB, XOR, CMP, 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|B, MOVI|X, 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, 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, ( ASSEMBLER-CODES-i86 --opcodes3 ) \ A2oct21 AvdH 01 F0 6 1FAMILY, LOCK, -- REPNZ, REPZ, HLT, CMC, 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, 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, 00,AF0F 3PI IMUL, ( ASSEMBLER-CODES-i86 --opcodes4 ) CF: ?32 \ A4sep27 AvdH 01 60 2 1FAMILY, PUSH|ALL, POP|ALL, 01 62 2 2FAMILY, BOUND, ARPL, 01 64 4 1FAMILY, FS:, GS:, OS:, AS:, 02 68 2 1FAMILY, PUSHI|X, PUSHI|B, 0002 0069 2 2FAMILY, IMULI, IMULSI, 02 6C 2 1FAMILY, INS, OUTS, 08 00 5 FAMILY|R CR0| -- CR2| CR3| CR4| 0008 0100 8 FAMILY|R DR0| DR1| DR2| DR3| DR4| DR5| DR6| DR7| 00900F 3PI SET, 100 0 2 FAMILY|R Y'| N'| 200 0 8 FAMILY|R O'| C'| Z'| CZ'| S'| P'| L'| LE'| C8 1PI ENTER, C9 1PI LEAVE, 060F 2PI CLTS, C0200F 3PI MOV|CD, 800F 2PI J|X, ( ASSEMBLER-CODES-i86 --opcodes4 ) CF: ?32 \ A4sep27 AvdH 00,0100 00,020F 2 3FAMILY, LAR, LSL, ( 3) 0100 A00F 3 2FAMILY, PUSH|FS, POP|FS, CPUID, 00,0800 00,A30F 4 3FAMILY, BT, BTS, BTR, BTC, 00,0100 00,BC0F 2 3FAMILY, BSF, BSR, 00,0800 00,A40F 2 3FAMILY, SHLDI, SHRDI, 00,0800 00,A50F 2 3FAMILY, SHLD|C, SHRD|C, 00,0100 00,B20F 4 3FAMILY, LSS, -- LFS, LGS, 00,0800 00,B60F 2 3FAMILY, MOVZX|B, MOVSX|B, 00,0800 00,B70F 2 3FAMILY, MOVZX|W, MOVSX|W, 0100 A80F 2 2FAMILY, PUSH|GS, POP|GS, 08,0000 00,000F 6 3FAMILY, SLDT, STR, LLDT, LTR, VERR, VERW, 08,0000 20,BA0F 4 3FAMILY, BTI, BTSI, BTRI, BTCI, 08,0000 00,010F 7 3FAMILY, SGDT, SIDT, LGDT, LIDT, SMSW, -- LMSW, ( ASSEMBLER-CODES-PENTIUM --opcodes ) CF: ?32 \ A7oct19 AvdH \ 0F prefix 0100 080F 2 2FAMILY, INVD, WBINVD, AA0F 2PI RSM, 0B0F 2PI Illegal-1, B90F 2PI Illegal-2, C80F 2PI BSWAP, 0100 300F 3 2FAMILY, WRMSR, RDTSC, RDMSR, 1000 B00F 2 3FAMILY, CMPXCHG, XADD, 38010F 3PI INVLPG, 08C70F 3PI CMPXCHG8B, ( ASSEMBLER-CODES-PENTIUM --fixups_fp ) CF: ?32 \ A7oct19 AvdH 01 00 8 FAMILY|R ST0| ST1| ST2| ST3| ST4| ST5| ST6| ST7| 0400 00 2 FAMILY|R s| d| \ Single/Double 16/32 0400 00 2 FAMILY|R |32 |16 \ memory int 0008 00 2 FAMILY|R n| r| \ Normal reverse 0400 00C0 2 FAMILY|R u| m| ( ASSEMBLER-CODES-PENTIUM --fp_1 ) CF: ?32 \ A7oct19 AvdH 0800 00D8 7 2FAMILY, FADD, FMUL, FCOM, FCOMP, FSUB, -- FDIV, 0800 10D9 6 2FAMILY, FST, FSTP, FLDENV, FLDCW, FSTENV, FSTCW, 0100 E0D9 6 2FAMILY, FCHS, FABS, -- -- FTST, FXAM, 0100 E8D9 4 2FAMILY, FLD1, FLDL2T, FLDL2E, FLDPI, 0100 ECD9 3 2FAMILY, FLDLG2, FLDLN2, FLDZ, 0100 F0D9 4 2FAMILY, F2XM1, FYL2X, FPTAN, FPATAN, 0100 F4D9 4 2FAMILY, FXTRACT, FPREM1, FDECSTP, FINCSTP, 0100 F8D9 4 2FAMILY, FPREM, FYL2XP1, FSQRT, FSINCOS, 0100 FCD9 4 2FAMILY, FRNDINT, FSCALE, FSIN, FCOS, 00D9 2PI FLD, C8D9 2PI FXCH, D0D9 2PI FNOP, 0800 00DA 4 2FAMILY, FIADD, FIMUL, FICOM, FICOMP, 1000 20DA 2 2FAMILY, FISUB, FIDIV, E9DA 2PI FUCOMPP, ( ASSEMBLER-CODES-PENTIUM --fp_2) CF: ?32 \ A7oc17 AvdH 0800 00DB 4 2FAMILY, FILD, -- FIST, FISTP, 1000 28DB 2 2FAMILY, FLD|e, FSTP|e, E2DB 2PI FCLEX, E3DB 2PI FINIT, 0800 20DD 4 2FAMILY, FRSTOR, -- FSAVE, FSTSW, 0800 C0DD 6 2FAMILY, FFREE, -- FST|u, FSTP|u, FUCOM, FUCOMP, 0800 C0DE 2 2FAMILY, FADDP, FMULP, 1000 E0DE 2 2FAMILY, FSUBP, FDIVP, D9DE 2PI FCOMPP, 0800 20DF 4 2FAMILY, FBLD, FILD|64, FBSTP, FISTP|64, E0DF 2PI FSTSW|AX,