- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 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>