

Seattle Computer Products 8086 Assembler Version 2.43
Copyright 1979-1982 by Seattle Computer Products, Inc.

0000                       0001 ; Seattle Computer Products 8086 Assembler  version 2.43
0000                       0002 ;   by Tim Paterson
0000                       0003 ; Runs on the 8086 under MS-DOS
0000                       0004 
0000                       0005 ;* * * * * * REVISION HISTORY * * * * * *
0000                       0006 ;
0000                       0007 ; 12/29/80  2.01  General release with 86-DOS version 0.34
0000                       0008 ; 02/22/81  2.10  Increased buffer size from 128 bytes to 1024 bytes
0000                       0009 ; 03/18/81  2.11  General cleanup and more documentation
0000                       0010 ; 03/24/81  2.20  Modify ESC handling for full 8087 operation
0000                       0011 ; 04/01/81  2.21  Fix date in HEX and PRN files; modify buffer handling
0000                       0012 ; 04/03/81  2.22  Fix 2.21 buffer handling
0000                       0013 ; 04/13/81  2.23  Re-open source file for listing to allow assembling CON:
0000                       0014 ; 04/28/81  2.24  Allow nested IFs
0000                       0015 ; 07/30/81  2.25  Add Intel string mnemonics; clean up a little
0000                       0016 ; 08/02/81  2.30  Re-write pass 2:
0000                       0017 ;			Always report errors to console
0000                       0018 ;			Exact byte lengths for HEX and PRN files
0000                       0019 ; 11/08/81  2.40  Add 8087 mnemonics; print full error messages;
0000                       0020 ;		  allow expressions with *, /, and ()
0000                       0021 ; 07/04/82  2.41  Fix Intel's 8087 "reverse-bit" bug; don't copy date
0000                       0022 ; 08/18/82  2.42  Increase stack from 80 to 256 (Damn! Overflowed again!)
0000                       0023 ; 01/05/82  2.43  Correct over-zealous optimization in 2.42
0000                       0024 ;
0000                       0025 ;* * * * * * * * * * * * * * * * * * * * *
0000                       0026 
0000                       0027 SYMWID:	EQU	5	;5 symbols per line in dump
0000                       0028 FCB:	EQU	5CH
0000                       0029 BUFSIZ:	EQU	1024	;Source code buffer
0000                       0030 LSTBUFSIZ:EQU	BUFSIZ	;List file buffer
0000                       0031 HEXBUFSIZ:EQU	70	;Hex file buffer (26*2 + 5*2 + 3 + EXTRA)
0000                       0032 EOL:	EQU	13	;ASCII carriage return
0000                       0033 OBJECT:	EQU	100H	;DEFAULT "PUT" ADDRESS
0000                       0034 
0000                       0035 ;System call function codes
0000                       0036 PRINTMES: EQU	9
0000                       0037 OPEN:	EQU	15
0000                       0038 CLOSE:	EQU	16
0000                       0039 READ:	EQU	20
0000                       0040 SETDMA:	EQU	26
0000                       0041 MAKE:	EQU	22
0000                       0042 BLKWRT:	EQU	40
0000                       0043 
0000                       0044 ;The following equates define some token values returned by GETSYM
0000                       0045 UNDEFID:EQU	0	;Undefined identifier (including no nearby RET)
0000                       0046 CONST:	EQU	1	;Constant (including $)
0000                       0047 REG:	EQU	2	;8-bit register
0000                       0048 XREG:	EQU	3	;16-bit register (except segment registers)
0000                       0049 SREG:	EQU	4	;Segment register
0000                       0050 FREG:	EQU	6	;8087 floating point register
0000                       0051 
0000                       0052 ;Bits to build 8087 opcode table entries
0000                       0053 ONEREG:	EQU	40H	;Single ST register OK as operand
0000                       0054 NEEDOP:	EQU	80H	;Must have an operand
0000                       0055 INTEGER:EQU	20H	;For integer operations
0000                       0056 REAL:	EQU	28H	;For real operations
0000                       0057 EXTENDED EQU	10H	;For Long integers or Temporary real
0000                       0058 MEMORY:	EQU	18H	;For general memory operations
0000                       0059 STACKOP:EQU	10H	;Two register arithmetic with pop
0000                       0060 ARITH:	EQU	8	;Non-pop arithmetic operations
0000                       0061 
0000                       0062 	ORG	100H
0100                       0063 	PUT	100H
0100                       0064 
0100 EB 74                 0065 	JMPS	BEGIN
0102                       0066 
0102 0D 0A 53 65 61 74 74  0067 HEADER:	DB	13,10,'Seattle Computer Products 8086 Assembler Version 2.43'
     6C 65 20 43 6F 6D 70 
     75 74 65 72 20 50 72 
     6F 64 75 63 74 73 20 
     38 30 38 36 20 41 73 
     73 65 6D 62 6C 65 72 
     20 56 65 72 73 69 6F 
     6E 20 32 2E 34 33    
0139 0D 0A 43 6F 70 79 72  0068 	DB	13,10,'Copyright 1979-1982 by Seattle Computer Products, Inc.'
     69 67 68 74 20 31 39 
     37 39 2D 31 39 38 32 
     20 62 79 20 53 65 61 
     74 74 6C 65 20 43 6F 
     6D 70 75 74 65 72 20 
     50 72 6F 64 75 63 74 
     73 2C 20 49 6E 63 2E 
0171 0D 0A 0D 0A 24        0069 	DB	13,10,13,10,'$'
0176                       0070 
0176                       0071 BEGIN:
0176 BC A6 2A              0072 	MOV	SP,STACK
0179 BA 02 01              0073 	MOV	DX,HEADER
017C B4 09                 0074 	MOV	AH,PRINTMES
017E CD 21                 0075 	INT	33
0180 A0 6D 00              0076 	MOV	AL,[FCB+17]
0183 A2 35 21              0077 	MOV	[SYMFLG],AL	;Save symbol table request flag
0186 BE 65 00              0078 	MOV	SI,FCB+9	;Point to file extension
0189 AC                    0079 	LODB			;Get source drive letter
018A E8 13 01              0080 	CALL	CHKDSK		;Valid drive?
018D 0A C0                 0081 	OR	AL,AL
018F 74 03                 0082 	JZ	DEFAULT		;If no extension, use existing drive spec
0191 A2 5C 00              0083 	MOV	[FCB],AL
0194                       0084 DEFAULT:
0194 AC                    0085 	LODB			;Get HEX file drive letter
0195 3C 5A                 0086 	CMP	AL,'Z'		;Suppress HEX file?
0197 74 03                 0087 	JZ	L0000
0199 E8 04 01              0088 	CALL	CHKDSK
019C                       0089 L0000:	
019C A2 80 20              0090 	MOV	[HEXFCB],AL
019F AC                    0091 	LODB			;Get PRN file drive letter
01A0 B4 00                 0092 	MOV	AH,0		;Signal no PRN file
01A2 3C 5A                 0093 	CMP	AL,'Z'		;Suppress PRN file?
01A4 74 15                 0094 	JZ	NOPRN
01A6 3C 59                 0095 	CMP	AL,'Y'		;Print errors only on console?
01A8 74 11                 0096 	JZ	NOPRN
01AA B4 02                 0097 	MOV	AH,2
01AC 3C 58                 0098 	CMP	AL,'X'		;PRN file to console?
01AE 74 0B                 0099 	JZ	NOPRN
01B0 B4 04                 0100 	MOV	AH,4
01B2 3C 50                 0101 	CMP	AL,'P'		;PRN file to printer?
01B4 74 05                 0102 	JZ	NOPRN
01B6 E8 E7 00              0103 	CALL	CHKDSK
01B9 B4 80                 0104 	MOV	AH,80H
01BB                       0105 NOPRN:
01BB A2 A5 20              0106 	MOV	[LSTFCB],AL
01BE 88 26 52 21           0107 	MOV	[LSTDEV],AH	;Flag device for list ouput
01C2 BE 6F 20              0108 	MOV	SI,EXTEND
01C5 BF 65 00              0109 	MOV	DI,FCB+9
01C8 A5                    0110 	MOVW
01C9 A4                    0111 	MOVB			;Set extension to ASM
01CA A5                    0112 	MOVW			;Zero extent field
01CB BA 5C 00              0113 	MOV	DX,FCB
01CE B4 0F                 0114 	MOV	AH,OPEN
01D0 CD 21                 0115 	INT	33
01D2 BB 14 20              0116 	MOV	BX,NOFILE
01D5 0A C0                 0117 	OR	AL,AL
01D7 74 03                 0118 	JZ	$+5
01D9 E9 9A 00              0119 	JMP	PRERR
01DC BA 80 20              0120 	MOV	DX,HEXFCB
01DF E8 9C 00              0121 	CALL	MAKFIL
01E2 BA A5 20              0122 	MOV	DX,LSTFCB
01E5 E8 96 00              0123 	CALL	MAKFIL
01E8 33 C0                 0124 	XOR	AX,AX
01EA A3 68 00              0125 	MOV	[FCB+12],AX	;Zero CURRENT BLOCK field
01ED A2 7C 00              0126 	MOV	[FCB+32],AL	;Zero Next Record field
01F0 C7 06 6A 00 00 04     0127 	MOV	[FCB+14],BUFSIZ	;Set record size
01F6 C7 06 A4 25 A6 25     0128 	MOV	[BUFPT],SRCBUF	;Initialize buffer pointer
01FC C7 06 37 21 A7 2A     0129 	MOV	[CODE],START+1	;POINTER TO NEXT BYTE OF INTERMEDIATE CODE
0202 C7 06 58 21 A6 2A     0130 	MOV	[IY],START	;POINTER TO CURRENT RELOCATION BYTE
0208 33 C0                 0131 	XOR	AX,AX
020A A3 CA 20              0132 	MOV	[PC],AX		;DEFAULT PROGRAM COUNTER
020D A3 31 21              0133 	MOV	[BASE],AX	;POINTER TO ROOT OF ID TREE=NIL
0210 A3 50 21              0134 	MOV	[RETPT],AX	;Pointer to last RET record
0213 A2 4A 21              0135 	MOV	[IFFLG],AL	;NOT WITHIN IF/ENDIF
0216 A2 4B 21              0136 	MOV	[CHKLAB],AL	;LOOKUP ALL LABELS
0219 48                    0137 	DEC	AX
021A A3 4E 21              0138 	MOV	[LSTRET],AX	;Location of last RET
021D A1 06 00              0139 	MOV	AX,[6]		;HL=END OF MEMORY
0220 A3 33 21              0140 	MOV	[HEAP],AX	;BACK END OF SYMBOL TABLE SPACE
0223 C7 06 3B 21 04 00     0141 	MOV	[BCOUNT],4	;CODE BYTES PER RELOCATION BYTE
0229                       0142 
0229                       0143 ;Assemble each line of code
0229                       0144 
0229                       0145 LOOP:
0229 E8 8A 00              0146 	CALL	NEXTCHR		;Get first character on line
022C 3C 1A                 0147 	CMP	AL,1AH
022E 74 1E                 0148 	JZ	ENDJ
0230 B0 FF                 0149 	MOV	AL,-1		;Flag that no tokens have been read yet
0232 A2 30 21              0150 	MOV	[SYM],AL
0235 E8 1C 07              0151 	CALL	ASMLIN		;Assemble the line
0238 A0 30 21              0152 	MOV	AL,[SYM]
023B 3C FF                 0153 	CMP	AL,-1		;Any tokens found on line?
023D 75 03                 0154 	JNZ	L0002
023F E8 C0 03              0155 	CALL	GETSYM		;If no tokens read yet, read first one
0242                       0156 L0002:	
0242 3C 3B                 0157 	CMP	AL,';'
0244 74 0B                 0158 	JZ	ENDLN
0246 3C 0D                 0159 	CMP	AL,EOL
0248 74 07                 0160 	JZ	ENDLN
024A B0 14                 0161 	MOV	AL,14H		;Garbage at end of line error
024C EB 05                 0162 	JP	ENDLIN
024E E9 09 0F              0163 ENDJ:	JMP	END
0251                       0164 
0251                       0165 ENDLN:
0251 32 C0                 0166 	XOR	AL,AL		;Flag no errors on line
0253                       0167 ENDLIN:
0253                       0168 ;AL = error code for line. Stack depth unknown
0253 BC A6 2A              0169 	MOV	SP,STACK
0256 E8 02 00              0170 	CALL	NEXLIN
0259 EB CE                 0171 	JP	LOOP
025B                       0172 
025B                       0173 NEXLIN:
025B B5 C0                 0174 	MOV	CH,0C0H		;Put end of line marker and error code (AL)
025D E8 81 09              0175 	CALL	PUTCD
0260 E8 46 09              0176 	CALL	GEN1
0263 A0 2F 21              0177 	MOV	AL,[CHR]
0266                       0178 GETEOL:
0266 3C 0A                 0179 	CMP	AL,10
0268 74 35                 0180 	JZ	RET
026A 3C 1A                 0181 	CMP	AL,1AH
026C 74 E0                 0182 	JZ	ENDJ
026E E8 45 00              0183 	CALL	NEXTCHR		;Scan over comments for linefeed
0271 EB F3                 0184 	JP	GETEOL
0273                       0185 
0273                       0186 ABORT:
0273 BB FC 1F              0187 	MOV	BX,NOMEM
0276                       0188 PRERR:
0276 8B D3                 0189 	MOV	DX,BX
0278 B4 09                 0190 	MOV	AH,PRINTMES
027A CD 21                 0191 	INT	33
027C CD 20                 0192 	INT	32
027E                       0193 
027E                       0194 MAKFIL:
027E 8B F2                 0195 	MOV	SI,DX
0280 AC                    0196 	LODB			;Get drive select byte
0281 3C 20                 0197 	CMP	AL,20H		;If not valid, don't make file
0283 73 1A                 0198 	JNC	RET
0285 B9 04 00              0199 	MOV	CX,4
0288 8B FE                 0200 	MOV	DI,SI
028A BE 5D 00              0201 	MOV	SI,FCB+1
028D F3                    0202 	REP
028E A5                    0203 	MOVW			;Copy source file name
028F B4 16                 0204 	MOV	AH,MAKE
0291 CD 21                 0205 	INT	33
0293 C7 45 05 01 00        0206 	MOV	[DI-9+14],1	;Set record length to 1 byte
0298 BB E4 1F              0207 	MOV	BX,NOSPAC
029B 0A C0                 0208 	OR	AL,AL		;Success?
029D 75 D7                 0209 	JNZ	PRERR
029F C3                    0210 	RET
02A0                       0211 
02A0                       0212 CHKDSK:
02A0 2C 20                 0213 	SUB	AL,' '		;If not present, set zero flag
02A2 74 FB                 0214 	JZ	RET
02A4 2C 20                 0215 	SUB	AL,20H
02A6 74 04                 0216 	JZ	DSKERR		;Must be in range A-O
02A8 3C 10                 0217 	CMP	AL,'P'-'@'
02AA 72 F3                 0218 	JC	RET
02AC                       0219 DSKERR:
02AC BB 35 20              0220 	MOV	BX,BADDSK
02AF EB C5                 0221 	JP	PRERR
02B1                       0222 
02B1                       0223 ERROR:
02B1 8A C1                 0224 	MOV	AL,CL
02B3 E9 9D FF              0225 	JMP	ENDLIN
02B6                       0226 
02B6                       0227 NEXTCHR:
02B6 8B 36 A4 25           0228 	MOV	SI,[BUFPT]
02BA 81 FE A6 25           0229 	CMP	SI,SRCBUF
02BE 75 1A                 0230 	JNZ	GETCH
02C0                       0231 ;Buffer empty so refill it
02C0 52                    0232 	PUSH	DX
02C1 50                    0233 	PUSH	AX		;AH must be saved
02C2 8B D6                 0234 	MOV	DX,SI
02C4 B4 1A                 0235 	MOV	AH,SETDMA
02C6 CD 21                 0236 	INT	33
02C8 BA 5C 00              0237 	MOV	DX,FCB
02CB B4 14                 0238 	MOV	AH,READ
02CD CD 21                 0239 	INT	33
02CF 92                    0240 	XCHG	AX,DX		;Put error code in DL
02D0 58                    0241 	POP	AX		;Restore AH
02D1 8A C2                 0242 	MOV	AL,DL		;Error code back in AL
02D3 5A                    0243 	POP	DX
02D4 3C 01                 0244 	CMP	AL,1
02D6 B0 1A                 0245 	MOV	AL,1AH		;Possibly signal End of File
02D8 74 0A                 0246 	JZ	NOMOD		;If nothing read
02DA                       0247 GETCH:
02DA AC                    0248 	LODB
02DB 81 FE A6 29           0249 	CMP	SI,SRCBUF+BUFSIZ
02DF 75 03                 0250 	JNZ	NOMOD
02E1 BE A6 25              0251 	MOV	SI,SRCBUF
02E4                       0252 NOMOD:
02E4 89 36 A4 25           0253 	MOV	[BUFPT],SI
02E8 A2 2F 21              0254 	MOV	[CHR],AL
02EB C3                    0255 	RET
02EC                       0256 
02EC                       0257 
02EC                       0258 MROPS:
02EC                       0259 
02EC                       0260 ; Get two operands and check for certain types, according to flag byte
02EC                       0261 ; in CL. OP code in CH. Returns only if immediate operation.
02EC                       0262 
02EC 51                    0263 	PUSH	CX		;Save type flags
02ED E8 D8 00              0264 	CALL	GETOP
02F0 52                    0265 	PUSH	DX		;Save first operand
02F1 E8 CB 00              0266 	CALL	GETOP2
02F4 5B                    0267 	POP	BX		;First op in BX, second op in DX
02F5 B0 04                 0268 	MOV	AL,SREG		;Check for a segment register
02F7 3A C7                 0269 	CMP	AL,BH
02F9 74 41                 0270 	JZ	SEGCHK
02FB 3A C6                 0271 	CMP	AL,DH
02FD 74 3D                 0272 	JZ	SEGCHK
02FF B0 01                 0273 	MOV	AL,CONST	;Check if the first operand is immediate
0301 B1 1A                 0274 	MOV	CL,26
0303 3A C7                 0275 	CMP	AL,BH
0305 74 AA                 0276 	JZ	ERROR		;Error if so
0307 59                    0277 	POP	CX		;Restore type flags
0308 3A C6                 0278 	CMP	AL,DH		;If second operand is immediate, then done
030A 74 DF                 0279 	JZ	RET
030C B0 00                 0280 	MOV	AL,UNDEFID	;Check for memory reference
030E 3A C7                 0281 	CMP	AL,BH
0310 74 4F                 0282 	JZ	STORE		;Is destination memory?
0312 3A C6                 0283 	CMP	AL,DH
0314 74 55                 0284 	JZ	LOAD		;Is source memory?
0316 F6 C1 01              0285 	TEST	CL,1		;Check if register-to-register operation OK
0319 B1 1B                 0286 	MOV	CL,27
031B 74 94                 0287 	JZ	ERROR
031D 8A C6                 0288 	MOV	AL,DH
031F 3A C7                 0289 	CMP	AL,BH		;Registers must be of same length
0321                       0290 RR:
0321 B1 16                 0291 	MOV	CL,22
0323 75 8C                 0292 	JNZ	ERROR
0325                       0293 RR1:
0325 24 01                 0294 	AND	AL,1		;Get register length (1=16 bits)
0327 0A C5                 0295 	OR	AL,CH		;Or in to OP code
0329 E8 70 08              0296 	CALL	PUT		;And write it
032C 59                    0297 	POP	CX		;Dump return address
032D 8A C3                 0298 	MOV	AL,BL
032F 02 C0                 0299 	ADD	AL,AL		;Rotate register number into middle position
0331 02 C0                 0300 	ADD	AL,AL
0333 02 C0                 0301 	ADD	AL,AL
0335 0C C0                 0302 	OR	AL,0C0H		;Set register-to-register mode
0337 0A C2                 0303 	OR	AL,DL		;Combine with other register number
0339 E9 60 08              0304 	JMP	PUT
033C                       0305 
033C                       0306 SEGCHK:
033C                       0307 ;Come here if at least one operand is a segment register
033C 59                    0308 	POP	CX		;Restore flags
033D F6 C1 08              0309 	TEST	CL,8		;Check if segment register OK
0340 B1 16                 0310 	MOV	CL,22
0342 74 78                 0311 	JZ	ERR1
0344 B9 03 8E              0312 	MOV	CX,8E03H	;Segment register move OP code
0347 B0 00                 0313 	MOV	AL,UNDEFID
0349 3A C6                 0314 	CMP	AL,DH		;Check if source is memory
034B 74 1E                 0315 	JZ	LOAD
034D 3A C7                 0316 	CMP	AL,BH		;Check if destination is memory
034F 74 10                 0317 	JZ	STORE
0351 B0 03                 0318 	MOV	AL,XREG
0353 2A C6                 0319 	SUB	AL,DH		;Check if source is 16-bit register
0355 74 CA                 0320 	JZ	RR		;If so, AL must be zero
0357 B5 8C                 0321 	MOV	CH,8CH		;Change direction
0359 87 DA                 0322 	XCHG	DX,BX		;Flip which operand is first and second
035B B0 03                 0323 	MOV	AL,XREG
035D 2A C6                 0324 	SUB	AL,DH		;Let RR perform finish the test
035F EB C0                 0325 	JP	RR
0361                       0326 
0361                       0327 STORE:
0361 F6 C1 04              0328 	TEST	CL,004H		;Check if storing is OK
0364 75 52                 0329 	JNZ	STERR
0366 87 DA                 0330 	XCHG	DX,BX		;If so, flip operands
0368 80 E5 FD              0331 	AND	CH,0FDH		;   and zero direction bit
036B                       0332 LOAD:
036B B6 19                 0333 	MOV	DH,25
036D 3A C7                 0334 	CMP	AL,BH		;Check if memory-to-memory
036F 74 49                 0335 	JZ	MRERR
0371 8A C7                 0336 	MOV	AL,BH
0373 3C 02                 0337 	CMP	AL,REG		;Check if 8-bit operation
0375 75 07                 0338 	JNZ	XRG
0377 B6 16                 0339 	MOV	DH,22
0379 F6 C1 01              0340 	TEST	CL,1		;See if 8-bit operation is OK
037C 74 3C                 0341 	JZ	MRERR
037E                       0342 XRG:
037E 8A C2                 0343 	MOV	AL,DL
0380 2C 06                 0344 	SUB	AL,6		;Check for R/M mode 6 and register 0
0382 0A C3                 0345 	OR	AL,BL		;   meaning direct load/store of accumulator
0384 75 19                 0346 	JNZ	NOTAC
0386 F6 C1 08              0347 	TEST	CL,8		;See if direct load/store of accumulator
0389 74 14                 0348 	JZ	NOTAC		;   means anything in this case
038B                       0349 ; Process direct load/store of accumulator
038B 8A C5                 0350 	MOV	AL,CH
038D 24 02                 0351 	AND	AL,2		;Preserve direction bit only
038F 34 02                 0352 	XOR	AL,2		;   but flip it
0391 0C A0                 0353 	OR	AL,0A0H		;Combine with OP code
0393 8A E8                 0354 	MOV	CH,AL
0395 8A C7                 0355 	MOV	AL,BH		;Check byte/word operation
0397 24 01                 0356 	AND	AL,1
0399 0A C5                 0357 	OR	AL,CH
039B 59                    0358 	POP	CX		;Dump return address
039C E9 BD 08              0359 	JMP	PUTADD		;Write the address
039F                       0360 
039F                       0361 NOTAC:
039F 8A C7                 0362 	MOV	AL,BH
03A1 24 01                 0363 	AND	AL,1		;Get byte/word bit
03A3 22 C1                 0364 	AND	AL,CL		;But don't use it in word-only operations
03A5 0A C5                 0365 	OR	AL,CH		;Combine with OP code
03A7 E8 F2 07              0366 	CALL	PUT
03AA 8A C3                 0367 	MOV	AL,BL
03AC 02 C0                 0368 	ADD	AL,AL		;Rotate to middle position
03AE 02 C0                 0369 	ADD	AL,AL
03B0 02 C0                 0370 	ADD	AL,AL
03B2 0A C2                 0371 	OR	AL,DL		;Combine register field
03B4 59                    0372 	POP	CX		;Dump return address
03B5 E9 A4 08              0373 	JMP	PUTADD		;Write the address
03B8                       0374 
03B8                       0375 STERR:
03B8 B6 1D                 0376 	MOV	DH,29
03BA                       0377 MRERR:
03BA 8A CE                 0378 	MOV	CL,DH
03BC                       0379 
03BC E9 F2 FE              0380 ERR1:	JMP	ERROR
03BF                       0381 
03BF                       0382 GETOP2:
03BF                       0383 ;Get the second operand: look for a comma and drop into GETOP
03BF A0 30 21              0384 	MOV	AL,[SYM]
03C2 3C 2C                 0385 	CMP	AL,','
03C4 B1 15                 0386 	MOV	CL,21
03C6 75 F4                 0387 	JNZ	ERR1
03C8                       0388 
03C8                       0389 
03C8                       0390 GETOP:
03C8                       0391 
03C8                       0392 ; Get one operand. Operand may be a memory reference in brackets, a register,
03C8                       0393 ; or a constant. If a flag (such as "B" for byte operation) is encountered,
03C8                       0394 ; it is noted and processing continues to find the operand.
03C8                       0395 ;
03C8                       0396 ; On exit, AL (=DH) has the type of operand. Other information depends
03C8                       0397 ; on the actual operand:
03C8                       0398 ;
03C8                       0399 ; AL=DH=0  Memory Reference.  DL has the address mode properly prepared in
03C8                       0400 ; the 8086 R/M format (middle bits zero). The constant part of the address
03C8                       0401 ; is in ADDR. If an undefined label needs to be added to this, a pointer to
03C8                       0402 ; its information fields is in ALABEL, otherwise ALABEL is zero.
03C8                       0403 ;
03C8                       0404 ; AL=DH=1  Value. The constant part is in DATA. If an undefined label needs
03C8                       0405 ; to be added to this, a pointer to its information fields is in DLABEL,
03C8                       0406 ; otherwise DLABEL is zero. "$" and "RET" are in this class.
03C8                       0407 ;
03C8                       0408 ; AL=DH=2  8-bit Register. DL has the register number.
03C8                       0409 ;
03C8                       0410 ; AL=DH=3  16-bit Register. DL has the register number.
03C8                       0411 ;
03C8                       0412 ; AL=DH=4  Segment Register. DL has the register number.
03C8                       0413 
03C8 E8 37 02              0414 	CALL	GETSYM
03CB                       0415 GETOP1:
03CB                       0416 ;Enter here if we don't need a GETSYM first
03CB 3C 5B                 0417 	CMP	AL,'['		;Memory reference?
03CD 74 30                 0418 	JZ	MEM
03CF 3C 05                 0419 	CMP	AL,5		;Flag ("B", "W", etc.)?
03D1 74 57                 0420 	JZ	FLG
03D3 3C 02                 0421 	CMP	AL,REG		;8-Bit register?
03D5 74 20                 0422 	JZ	NREG
03D7 3C 03                 0423 	CMP	AL,XREG		;16-Bit register?
03D9 74 1C                 0424 	JZ	NREG
03DB 3C 04                 0425 	CMP	AL,SREG		;Segment register?
03DD 74 18                 0426 	JZ	NREG
03DF                       0427 VAL:				;Must be immediate
03DF 32 C0                 0428 	XOR	AL,AL		;No addressing modes allowed
03E1                       0429 VAL1:
03E1 E8 57 00              0430 	CALL	GETVAL
03E4 A1 DA 20              0431 	MOV	AX,[CON]	;Defined part
03E7 A3 D6 20              0432 	MOV	[DATA],AX
03EA A1 DC 20              0433 	MOV	AX,[UNDEF]	;Undefined part
03ED A3 D8 20              0434 	MOV	[DLABEL],AX
03F0 8A D5                 0435 	MOV	DL,CH
03F2 B6 01                 0436 	MOV	DH,CONST
03F4 8A C6                 0437 	MOV	AL,DH
03F6 C3                    0438 	RET
03F7                       0439 NREG:
03F7 52                    0440 	PUSH	DX
03F8 E8 07 02              0441 	CALL	GETSYM
03FB 5A                    0442 	POP	DX
03FC 8A C6                 0443 	MOV	AL,DH
03FE C3                    0444 	RET
03FF                       0445 MEM:
03FF E8 00 02              0446 	CALL	GETSYM
0402 B0 01                 0447 	MOV	AL,1
0404 E8 34 00              0448 	CALL	GETVAL
0407 A0 30 21              0449 	MOV	AL,[SYM]
040A 3C 5D                 0450 	CMP	AL,']'
040C B1 18                 0451 	MOV	CL,24
040E 75 AC                 0452 	JNZ	ERR1
0410 E8 EF 01              0453 	CALL	GETSYM
0413 8B 1E DA 20           0454 	MOV	BX,[CON]
0417 89 1E D2 20           0455 	MOV	[ADDR],BX
041B 8B 1E DC 20           0456 	MOV	BX,[UNDEF]
041F 89 1E D4 20           0457 	MOV	[ALABEL],BX
0423 8A D5                 0458 	MOV	DL,CH
0425 B6 00                 0459 	MOV	DH,UNDEFID
0427 8A C6                 0460 	MOV	AL,DH
0429 C3                    0461 	RET
042A                       0462 FLG:
042A 3A 16 D1 20           0463 	CMP	DL,[MAXFLG]	;Invalid flag for this operation?
042E B1 27                 0464 	MOV	CL,27H
0430 7F 8A                 0465 	JG	ERR1
0432 E8 CD 01              0466 	CALL	GETSYM
0435 3C 2C                 0467 	CMP	AL,','
0437 74 8F                 0468 	JZ	GETOP
0439 EB 90                 0469 	JP	GETOP1
043B                       0470 
043B                       0471 
043B                       0472 GETVAL:
043B                       0473 
043B                       0474 ; Expression analyzer. On entry, if AL=0 then do not allow base or index
043B                       0475 ; registers. If AL=1, we are analyzing a memory reference, so allow base
043B                       0476 ; and index registers, and compute addressing mode when done. The constant
043B                       0477 ; part of the expression will be found in CON. If an undefined label is to
043B                       0478 ; be added to this, a pointer to its information fields will be found in
043B                       0479 ; UNDEF.
043B                       0480 
043B 8A E0                 0481 	MOV	AH,AL		;Flag is kept in AH
043D C7 06 DC 20 00 00     0482 	MOV	[UNDEF],0
0443 A0 30 21              0483 	MOV	AL,[SYM]
0446 E8 51 00              0484 	CALL	EXPRESSION
0449 89 16 DA 20           0485 	MOV	[CON],DX
044D 8A C4                 0486 	MOV	AL,AH
044F B5 00                 0487 	MOV	CH,0		;Initial mode
0451 A8 10                 0488 	TEST	AL,10H		;Test INDEX bit
0453 D0 D0                 0489 	RCL	AL		;BASE bit (zero flag not affected)
0455 74 37                 0490 	JZ	NOIND		;Jump if not indexed, with BASE bit in carry
0457 F5                    0491 	CMC
0458 D0 D5                 0492 	RCL	CH		;Rotate in BASE bit
045A D0 D0                 0493 	RCL	AL		;BP bit
045C D0 D5                 0494 	RCL	CH
045E D0 D0                 0495 	RCL	AL		;DI bit
0460 D0 D5                 0496 	RCL	CH		;The low 3 bits now have indexing mode
0462                       0497 MODE:
0462 80 CD 80              0498 	OR	CH,080H		;If undefined label, force 16-bit displacement
0465 F7 06 DC 20 FF FF     0499 	TEST	[UNDEF],-1
046B 75 BC                 0500 	JNZ	RET
046D 8B 1E DA 20           0501 	MOV	BX,[CON]
0471 8A C3                 0502 	MOV	AL,BL
0473 98                    0503 	CBW			;Extend sign
0474 3B C3                 0504 	CMP	AX,BX		;Is it a signed 8-bit number?
0476 75 B1                 0505 	JNZ	RET		;If not, use 16-bit displacement
0478 80 E5 7F              0506 	AND	CH,07FH		;Reset 16-bit displacement
047B 80 CD 40              0507 	OR	CH,040H		;Set 8-bit displacement
047E 0B DB                 0508 	OR	BX,BX
0480 75 A7                 0509 	JNZ	RET		;Use it if not zero displacement
0482 80 E5 07              0510 	AND	CH,7		;Specify no displacement
0485 82 FD 06              0511 	CMP	CH,6		;Check for BP+0 addressing mode
0488 75 9F                 0512 	JNZ	RET
048A 80 CD 40              0513 	OR	CH,040H		;If BP+0, use 8-bit displacement
048D C3                    0514 	RET
048E                       0515 
048E                       0516 NOIND:
048E B5 06                 0517 	MOV	CH,6		;Try direct address mode
0490 73 FB                 0518 	JNC	RET		;If no base register, that's right
0492 D0 D0                 0519 	RCL	AL		;Check BP bit
0494 72 CC                 0520 	JC	MODE
0496 FE C5                 0521 	INC	CH		;If not, must be BX
0498 EB C8                 0522 	JP	MODE
049A                       0523 
049A                       0524 EXPRESSION:
049A                       0525 ;Analyze arbitrary expression. Flag byte in AH.
049A                       0526 ;On exit, AL has type byte: 0=register or undefined label
049A B5 FF                 0527 	MOV	CH,-1		;Initial type
049C 8B FA                 0528 	MOV	DI,DX
049E 33 D2                 0529 	XOR	DX,DX		;Initial value
04A0 3C 2B                 0530 	CMP	AL,'+'
04A2 74 0C                 0531 	JZ	PLSMNS
04A4 3C 2D                 0532 	CMP	AL,'-'
04A6 74 08                 0533 	JZ	PLSMNS
04A8 B1 2B                 0534 	MOV	CL,'+'
04AA 52                    0535 	PUSH	DX
04AB 51                    0536 	PUSH	CX
04AC 8B D7                 0537 	MOV	DX,DI
04AE EB 0A                 0538 	JP	OPERATE
04B0                       0539 PLSMNS:
04B0 8A C8                 0540 	MOV	CL,AL
04B2 52                    0541 	PUSH	DX
04B3 51                    0542 	PUSH	CX
04B4 80 CC 04              0543 	OR	AH,4		;Flag that a sign was found
04B7 E8 48 01              0544 	CALL	GETSYM
04BA                       0545 OPERATE:
04BA E8 2B 00              0546 	CALL	TERM
04BD 59                    0547 	POP	CX		;Recover operator
04BE 5B                    0548 	POP	BX		;Recover current value
04BF 87 DA                 0549 	XCHG	DX,BX
04C1 22 E8                 0550 	AND	CH,AL
04C3 0A C0                 0551 	OR	AL,AL		;Is it register or undefined label?
04C5 74 17                 0552 	JZ	NOCON		;If so, then no constant part
04C7 82 F9 2D              0553 	CMP	CL,"-"		;Subtract it?
04CA 75 02                 0554 	JNZ	ADD
04CC F7 DB                 0555 	NEG	BX
04CE                       0556 ADD:
04CE 03 D3                 0557 	ADD	DX,BX
04D0                       0558 NEXTERM:
04D0 A0 30 21              0559 	MOV	AL,[SYM]
04D3 3C 2B                 0560 	CMP	AL,'+'
04D5 74 D9                 0561 	JZ	PLSMNS
04D7 3C 2D                 0562 	CMP	AL,'-'
04D9 74 D5                 0563 	JZ	PLSMNS
04DB 8A C5                 0564 	MOV	AL,CH
04DD C3                    0565 	RET
04DE                       0566 NOCON:
04DE 82 F9 2D              0567 	CMP	CL,"-"
04E1 75 ED                 0568 	JNZ	NEXTERM
04E3                       0569 BADOP:
04E3 B1 05                 0570 	MOV	CL,5
04E5 E9 C9 FD              0571 	JMP	ERROR
04E8                       0572 
04E8                       0573 TERM:
04E8 E8 40 00              0574 	CALL	FACTOR
04EB                       0575 MULOP:
04EB 52                    0576 	PUSH	DX		;Save value
04EC 50                    0577 	PUSH	AX		;Save type
04ED E8 12 01              0578 	CALL	GETSYM
04F0 59                    0579 	POP	CX
04F1 3C 2A                 0580 	CMP	AL,"*"
04F3 74 04                 0581 	JZ	GETFACT
04F5 3C 2F                 0582 	CMP	AL,"/"
04F7 75 2E                 0583 	JNZ	ENDTERM
04F9                       0584 GETFACT:
04F9 0A C9                 0585 	OR	CL,CL		;Can we operate on this type?
04FB 74 E6                 0586 	JZ	BADOP
04FD 50                    0587 	PUSH	AX		;Save operator
04FE E8 01 01              0588 	CALL	GETSYM		;Get past operator
0501 E8 27 00              0589 	CALL	FACTOR
0504 0A C0                 0590 	OR	AL,AL
0506 74 DB                 0591 	JZ	BADOP
0508 59                    0592 	POP	CX		;Recover operator
0509 5D                    0593 	POP	BP		;And current value
050A 95                    0594 	XCHG	AX,BP		;Save AH in BP
050B 82 F9 2F              0595 	CMP	CL,"/"		;Do we divide?
050E 75 0E                 0596 	JNZ	DOMUL
0510 0B D2                 0597 	OR	DX,DX		;Dividing by zero?
0512 B1 29                 0598 	MOV	CL,29H
0514 74 51                 0599 	JZ	ERR2
0516 8B DA                 0600 	MOV	BX,DX
0518 33 D2                 0601 	XOR	DX,DX		;Make 32-bit dividend
051A F7 F3                 0602 	DIV	AX,BX
051C EB 02                 0603 	JMPS	NEXFACT
051E                       0604 DOMUL:
051E F7 E2                 0605 	MUL	AX,DX
0520                       0606 NEXFACT:
0520 8B D0                 0607 	MOV	DX,AX		;Result in DX
0522 95                    0608 	XCHG	AX,BP		;Restore flags to AH
0523 B0 FF                 0609 	MOV	AL,-1		;Indicate a number
0525 EB C4                 0610 	JMPS	MULOP
0527                       0611 ENDTERM:
0527 5A                    0612 	POP	DX
0528 8A C1                 0613 	MOV	AL,CL
052A C3                    0614 	RET
052B                       0615 
052B                       0616 FACTOR:
052B A0 30 21              0617 	MOV	AL,[SYM]
052E 3C 01                 0618 	CMP	AL,CONST
0530 74 F8                 0619 	JZ	RET
0532 3C 00                 0620 	CMP	AL,UNDEFID
0534 74 5C                 0621 	JZ	UVAL
0536 3C 28                 0622 	CMP	AL,"("
0538 74 48                 0623 	JZ	PAREN
053A 3C 22                 0624 	CMP	AL,'"'
053C 74 66                 0625 	JZ	STRING
053E 3C 27                 0626 	CMP	AL,"'"
0540 74 62                 0627 	JZ	STRING
0542 3C 03                 0628 	CMP	AL,XREG		;Only 16-bit register may index
0544 B1 14                 0629 	MOV	CL,20
0546 75 1F                 0630 	JNZ	ERR2
0548 F6 C4 01              0631 	TEST	AH,1		;Check to see if indexing is OK
054B B1 01                 0632 	MOV	CL,1
054D 74 18                 0633 	JZ	ERR2
054F 8A C2                 0634 	MOV	AL,DL
0551 B1 03                 0635 	MOV	CL,3
0553 2C 03                 0636 	SUB	AL,3		;Check for BX
0555 74 22                 0637 	JZ	BXJ
0557 2C 02                 0638 	SUB	AL,2		;Check for BP
0559 74 1B                 0639 	JZ	BPJ
055B FE C8                 0640 	DEC	AL		;Check for SI
055D B1 04                 0641 	MOV	CL,4
055F 74 0C                 0642 	JZ	SIJ
0561 FE C8                 0643 	DEC	AL		;Check for DI
0563 74 05                 0644 	JZ	DIJ
0565 B1 02                 0645 	MOV	CL,2		;Invalid base/index register
0567 E9 47 FD              0646 ERR2:	JMP	ERROR
056A                       0647 
056A                       0648 DIJ:
056A 80 CC 20              0649 	OR	AH,20H		;Flag seeing index register DI
056D                       0650 SIJ:
056D F6 C4 10              0651 	TEST	AH,10H		;Check if already seen index register
0570 75 F5                 0652 	JNZ	ERR2
0572 80 CC 10              0653 	OR	AH,10H		;Flag seeing index register
0575 C3                    0654 	RET
0576                       0655 
0576                       0656 BPJ:
0576 80 CC 40              0657 	OR	AH,40H		;Flag seeing base register BP
0579                       0658 BXJ:
0579 F6 C4 80              0659 	TEST	AH,80H		;Check if already seen base register
057C 75 E9                 0660 	JNZ	ERR2
057E 80 CC 80              0661 	OR	AH,80H		;Flag seeing base register
0581 C3                    0662 	RET
0582                       0663 
0582                       0664 PAREN:
0582 E8 7D 00              0665 	CALL	GETSYM		;Eat the "("
0585 E8 12 FF              0666 	CALL	EXPRESSION
0588 82 3E 30 21 29        0667 	CMP	B,[SYM],")"	;Better have closing paren
058D B1 14                 0668 	MOV	CL,20
058F 75 10                 0669 	JNZ	ERR30
0591 C3                    0670 	RET
0592                       0671 
0592                       0672 UVAL:
0592 B1 06                 0673 	MOV	CL,6
0594 F6 C4 08              0674 	TEST	AH,8		;Check if undefined label has been seen
0597 75 08                 0675 	JNZ	ERR30
0599 80 CC 08              0676 	OR	AH,8		;Flag seeing undefined label
059C 89 1E DC 20           0677 	MOV	[UNDEF],BX
05A0 C3                    0678 	RET
05A1                       0679 
05A1 E9 0D FD              0680 ERR30:	JMP	ERROR
05A4                       0681 
05A4                       0682 STRING:
05A4 8A E8                 0683 	MOV	CH,AL
05A6 A0 2F 21              0684 	MOV	AL,[CHR]
05A9 3A C5                 0685 	CMP	AL,CH
05AB B1 23                 0686 	MOV	CL,35
05AD 8A D0                 0687 	MOV	DL,AL
05AF B6 00                 0688 	MOV	DH,0
05B1 75 03                 0689 	JNZ	L0003
05B3 E8 32 00              0690 	CALL	ZERLEN
05B6                       0691 L0003:
05B6 E8 37 00              0692 	CALL	GETCHR
05B9 B1 25                 0693 	MOV	CL,37
05BB F6 C4 02              0694 	TEST	AH,2
05BE 74 E1                 0695 	JZ	ERR30
05C0 F6 C4 04              0696 	TEST	AH,4
05C3 B1 26                 0697 	MOV	CL,38
05C5 75 DA                 0698 	JNZ	ERR30
05C7                       0699 STRGDAT:
05C7 8A C2                 0700 	MOV	AL,DL
05C9 3C 0D                 0701 	CMP	AL,EOL
05CB B1 27                 0702 	MOV	CL,39
05CD 74 D2                 0703 	JZ	ERR30
05CF E8 CA 05              0704 	CALL	PUT
05D2 A0 39 21              0705 	MOV	AL,[DATSIZ]
05D5 0A C0                 0706 	OR	AL,AL
05D7 75 05                 0707 	JNZ	BYTSIZ
05D9 8A C6                 0708 	MOV	AL,DH
05DB E8 BE 05              0709 	CALL	PUT
05DE                       0710 BYTSIZ:
05DE A0 2F 21              0711 	MOV	AL,[CHR]
05E1 8A D0                 0712 	MOV	DL,AL
05E3 E8 0A 00              0713 	CALL	GETCHR
05E6 EB DF                 0714 	JP	STRGDAT
05E8                       0715 
05E8                       0716 ZERLEN:
05E8 E8 CB FC              0717 	CALL	NEXTCHR
05EB 3A C5                 0718 	CMP	AL,CH
05ED 75 B2                 0719 	JNZ	ERR30
05EF C3                    0720 	RET
05F0                       0721 
05F0                       0722 GETCHR:
05F0 E8 C3 FC              0723 	CALL	NEXTCHR
05F3 3A C5                 0724 	CMP	AL,CH
05F5 75 F8                 0725 	JNZ	RET
05F7 E8 BC FC              0726 	CALL	NEXTCHR
05FA 3A C5                 0727 	CMP	AL,CH
05FC 74 F1                 0728 	JZ	RET
05FE 5B                    0729 	POP	BX		;Kill return address to STRGDAT loop
05FF B0 FF                 0730 	MOV	AL,-1		;Flag type as constant
0601 C3                    0731 	RET
0602                       0732 
0602                       0733 
0602                       0734 GETSYM:
0602                       0735 
0602                       0736 ; The lexical scanner. Used only in the operand field. Returns with the token
0602                       0737 ; in SYM and AL, sometimes with additional info in BX or DX.
0602                       0738 ;
0602                       0739 ; AL=SYM=0  Undefined label. BX has pointer to information fields.
0602                       0740 ;
0602                       0741 ; AL=SYM=1  Constant (or defined label). DX has value.
0602                       0742 ;
0602                       0743 ; AL=SYM=2,3,4  8-bit register, 16-bit register, or segment register,
0602                       0744 ; respectively. DL has register number.
0602                       0745 ;
0602                       0746 ; AL=SYM=5  A mode flag (such as "B" for byte operation). Type of flag in DL
0602                       0747 ; and also stored in FLAG: -1=no flags, 0=B, 1=W, 2=S, 3=L, 4=T.
0602                       0748 ;
0602                       0749 ; AL=SYM=6  8087 floating point register, ST(n) or ST. DL has register number.
0602                       0750 ;
0602                       0751 ; All other values are the ASCII code of the character. Note that this may
0602                       0752 ; never be a letter or number.
0602                       0753 
0602 50                    0754 	PUSH	AX		;Save AH
0603 E8 21 00              0755 	CALL	GETSY
0606 58                    0756 	POP	AX
0607 A0 30 21              0757 	MOV	AL,[SYM]
060A C3                    0758 	RET
060B                       0759 
060B                       0760 SCANB:
060B A0 2F 21              0761 	MOV	AL,[CHR]
060E                       0762 SCANT:
060E 3C 20                 0763 	CMP	AL,' '
0610 74 04                 0764 	JZ	NEXB
0612 3C 09                 0765 	CMP	AL,9
0614 75 F4                 0766 	JNZ	RET
0616                       0767 NEXB:
0616 E8 9D FC              0768 	CALL	NEXTCHR
0619 EB F3                 0769 	JP	SCANT
061B                       0770 
061B                       0771 DOLLAR:
061B 8B 16 CC 20           0772 	MOV	DX,[OLDPC]
061F B0 01                 0773 	MOV	AL,CONST
0621 A2 30 21              0774 	MOV	[SYM],AL
0624                       0775 NEXTCHJ:
0624 E9 8F FC              0776 	JMP	NEXTCHR
0627                       0777 
0627                       0778 GETSY:
0627 E8 E1 FF              0779 	CALL	SCANB
062A 3C 24                 0780 	CMP	AL,'$'
062C 74 ED                 0781 	JZ	DOLLAR
062E A2 30 21              0782 	MOV	[SYM],AL
0631 0C 20                 0783 	OR	AL,20H
0633 3C 7B                 0784 	CMP	AL,'z'+1
0635 73 ED                 0785 	JNC	NEXTCHJ
0637 3C 61                 0786 	CMP	AL,'a'
0639 72 03                 0787 	JC	$+5
063B E9 BF 00              0788 	JMP	LETTER
063E 3C 3A                 0789 	CMP	AL,'9'+1
0640 73 E2                 0790 	JNC	NEXTCHJ
0642 3C 30                 0791 	CMP	AL,'0'
0644 72 DE                 0792 	JC	NEXTCHJ
0646 BB 30 21              0793 	MOV	BX,SYM
0649 C6 07 01              0794 	MOV	B,[BX],CONST
064C E8 83 00              0795 	CALL	READID
064F 4B                    0796 	DEC	BX
0650 8A 07                 0797 	MOV	AL,[BX]
0652 B1 07                 0798 	MOV	CL,7
0654 BB 00 00              0799 	MOV	BX,0
0657 3C 68                 0800 	CMP	AL,'h'
0659 75 03                 0801 	JNZ	$+5
065B E9 32 00              0802 	JMP	HEX
065E FE C1                 0803 	INC	CL
0660 C7 06 56 21 DF 20     0804 	MOV	[IX],ID
0666                       0805 DEC:
0666 8B 36 56 21           0806 	MOV	SI,[IX]
066A 8A 04                 0807 	MOV	AL,[SI]
066C FF 06 56 21           0808 	INC	[IX]
0670 3C 3A                 0809 	CMP	AL,'9'+1
0672 72 03                 0810 	JC	$+5
0674 E9 3A FC              0811 	JMP	ERROR
0677 2C 30                 0812 	SUB	AL,'0'
0679 8B D3                 0813 	MOV	DX,BX
067B D1 E3                 0814 	SHL	BX
067D D1 E3                 0815 	SHL	BX
067F 03 DA                 0816 	ADD	BX,DX
0681 D1 E3                 0817 	SHL	BX
0683 8A D0                 0818 	MOV	DL,AL
0685 B6 00                 0819 	MOV	DH,0
0687 03 DA                 0820 	ADD	BX,DX
0689 FE CD                 0821 	DEC	CH
068B 75 D9                 0822 	JNZ	DEC
068D 87 DA                 0823 	XCHG	DX,BX
068F C3                    0824 	RET
0690                       0825 
0690                       0826 HEX:
0690 BA DF 20              0827 	MOV	DX,ID
0693 FE CD                 0828 	DEC	CH
0695                       0829 HEX1:
0695 8B F2                 0830 	MOV	SI,DX
0697 AC                    0831 	LODB
0698 42                    0832 	INC	DX
0699 2C 30                 0833 	SUB	AL,'0'
069B 3C 0A                 0834 	CMP	AL,10
069D 72 06                 0835 	JC	GOTIT
069F 3C 37                 0836 	CMP	AL,'g'-'0'
06A1 73 13                 0837 	JNC	ERR4
06A3 2C 27                 0838 	SUB	AL,'a'-10-'0'
06A5                       0839 GOTIT:
06A5 D1 E3                 0840 	SHL	BX
06A7 D1 E3                 0841 	SHL	BX
06A9 D1 E3                 0842 	SHL	BX
06AB D1 E3                 0843 	SHL	BX
06AD 02 D8                 0844 	ADD	BL,AL
06AF FE CD                 0845 	DEC	CH
06B1 75 E2                 0846 	JNZ	HEX1
06B3 87 DA                 0847 	XCHG	DX,BX
06B5 C3                    0848 	RET
06B6                       0849 
06B6 E9 F8 FB              0850 ERR4:	JMP	ERROR
06B9                       0851 
06B9                       0852 GETLET:
06B9 E8 4F FF              0853 	CALL	SCANB
06BC 3C 0D                 0854 	CMP	AL,EOL
06BE F9                    0855 	STC
06BF 74 F4                 0856 	JZ	RET
06C1 3C 3B                 0857 	CMP	AL,';'
06C3 F9                    0858 	STC
06C4 74 EF                 0859 	JZ	RET
06C6 B1 0A                 0860 	MOV	CL,10
06C8 0C 20                 0861 	OR	AL,20H
06CA 3C 61                 0862 	CMP	AL,'a'
06CC 72 E8                 0863 	JC	ERR4
06CE 3C 7B                 0864 	CMP	AL,'z'+1
06D0 73 E4                 0865 	JNC	ERR4
06D2                       0866 READID:
06D2 BB DF 20              0867 	MOV	BX,ID
06D5 B5 00                 0868 	MOV	CH,0
06D7                       0869 MOREID:
06D7 88 07                 0870 	MOV	[BX],AL
06D9 FE C5                 0871 	INC	CH
06DB 43                    0872 	INC	BX
06DC E8 D7 FB              0873 	CALL	NEXTCHR
06DF 3C 30                 0874 	CMP	AL,'0'
06E1 72 0E                 0875 	JC	NOMORE
06E3 0C 20                 0876 	OR	AL,20H
06E5 3C 7B                 0877 	CMP	AL,'z'+1
06E7 73 08                 0878 	JNC	NOMORE
06E9 3C 3A                 0879 	CMP	AL,'9'+1
06EB 72 EA                 0880 	JC	MOREID
06ED 3C 61                 0881 	CMP	AL,'a'
06EF 73 E6                 0882 	JNC	MOREID
06F1                       0883 NOMORE:
06F1 8A C8                 0884 	MOV	CL,AL
06F3 8A C5                 0885 	MOV	AL,CH
06F5 A2 DE 20              0886 	MOV	[LENID],AL
06F8 0A C0                 0887 	OR	AL,AL
06FA 8A C1                 0888 	MOV	AL,CL
06FC C3                    0889 	RET
06FD                       0890 
06FD                       0891 LETTER:
06FD E8 D2 FF              0892 	CALL	READID
0700 8A C5                 0893 	MOV	AL,CH
0702 FE C8                 0894 	DEC	AL
0704 75 14                 0895 	JNZ	NOFLG
0706 A0 DF 20              0896 	MOV	AL,[ID]
0709 B9 05 00              0897 	MOV	CX,5
070C BF 40 07              0898 	MOV	DI,FLGTAB
070F FC                    0899 	UP
0710 F2                    0900 	REPNE
0711 AE                    0901 	SCAB			;See if one of B,W,S,L,T
0712 74 1A                 0902 	JZ	SAVFLG		;Go save flag
0714 32 C0                 0903 	XOR	AL,AL
0716 8A 2E DE 20           0904 	MOV	CH,[LENID]
071A                       0905 NOFLG:
071A FE C8                 0906 	DEC	AL
071C 53                    0907 	PUSH	BX
071D 75 03                 0908 	JNZ	L0004
071F E8 5A 00              0909 	CALL	REGCHK
0722                       0910 L0004:	
0722 5B                    0911 	POP	BX
0723 8A C6                 0912 	MOV	AL,DH
0725 74 03                 0913 	JZ	SYMSAV
0727 E8 F9 00              0914 	CALL	LOOKRET
072A                       0915 SYMSAV:
072A A2 30 21              0916 	MOV	[SYM],AL
072D C3                    0917 	RET
072E                       0918 
072E                       0919 SAVFLG:
072E 8A D1                 0920 	MOV	DL,CL		;Need flag type in DL
0730 86 0E D0 20           0921 	XCHG	[FLAG],CL
0734 82 F9 FF              0922 	CMP	CL,-1
0737 B1 20                 0923 	MOV	CL,32
0739 B0 05                 0924 	MOV	AL,5
073B 74 ED                 0925 	JZ	SYMSAV
073D E9 71 FB              0926 ERRJ3:	JMP	ERROR
0740                       0927 
0740 74 6C 73 77 62        0928 FLGTAB:	DB	"tlswb"
0745                       0929 
0745                       0930 FPREG:
0745                       0931 ;Have detected "ST" for 8087 floating point stack register
0745 B2 00                 0932 	MOV	DL,0		;Default is ST(0)
0747 E8 C1 FE              0933 	CALL	SCANB		;Get next character
074A 3C 28                 0934 	CMP	AL,"("		;Specifying register number?
074C 75 29                 0935 	JNZ	HAVREG
074E                       0936 ;Get register number
074E E8 65 FB              0937 	CALL	NEXTCHR		;Skip over the "("
0751 E8 74 FC              0938 	CALL	GETOP		;A little recursion never hurt anybody
0754 3C 01                 0939 	CMP	AL,CONST	;Better have found a constant
0756 B1 14                 0940 	MOV	CL,20		;Operand error if not
0758 75 E3                 0941 	JNZ	ERRJ3
075A 83 3E D8 20 00        0942 	CMP	[DLABEL],0	;Constant must be defined
075F B1 1E                 0943 	MOV	CL,30
0761 75 DA                 0944 	JNZ	ERRJ3
0763 8B 16 D6 20           0945 	MOV	DX,[DATA]	;Get constant
0767 83 FA 07              0946 	CMP	DX,7		;Constant must be in range 0-7
076A B1 1F                 0947 	MOV	CL,31
076C 77 CF                 0948 	JA	ERRJ3
076E A0 30 21              0949 	MOV	AL,[SYM]
0771 3C 29                 0950 	CMP	AL,")"
0773 B1 18                 0951 	MOV	CL,24
0775 75 C6                 0952 	JNZ	ERRJ3
0777                       0953 HAVREG:
0777 B6 06                 0954 	MOV	DH,FREG
0779 32 C0                 0955 	XOR	AL,AL		;Zero set means register found
077B C3                    0956 	RET
077C                       0957 
077C                       0958 REGCHK:
077C BB DF 20              0959 	MOV	BX,ID
077F 81 3F 73 74           0960 	CMP	[BX],"s"+7400H	;"st"
0783 74 C0                 0961 	JZ	FPREG
0785 8A 0F                 0962 	MOV	CL,[BX]
0787 43                    0963 	INC	BX
0788 8A 07                 0964 	MOV	AL,[BX]
078A BB E7 07              0965 	MOV	BX,REGTAB
078D B6 03                 0966 	MOV	DH,XREG
078F B2 00                 0967 	MOV	DL,0
0791 3C 78                 0968 	CMP	AL,'x'
0793 74 3B                 0969 	JZ	SCANREG
0795 B6 02                 0970 	MOV	DH,REG
0797 3C 6C                 0971 	CMP	AL,'l'
0799 74 35                 0972 	JZ	SCANREG
079B B2 04                 0973 	MOV	DL,4
079D 3C 68                 0974 	CMP	AL,'h'
079F 74 2F                 0975 	JZ	SCANREG
07A1 B6 04                 0976 	MOV	DH,SREG
07A3 B2 00                 0977 	MOV	DL,0
07A5 BB EB 07              0978 	MOV	BX,SEGTAB
07A8 3C 73                 0979 	CMP	AL,'s'
07AA 74 24                 0980 	JZ	SCANREG
07AC B6 03                 0981 	MOV	DH,XREG
07AE 3C 70                 0982 	CMP	AL,'p'
07B0 74 11                 0983 	JZ	PREG
07B2 3C 69                 0984 	CMP	AL,'i'
07B4 75 C5                 0985 	JNZ	RET
07B6 B2 06                 0986 	MOV	DL,6
07B8 8A C1                 0987 	MOV	AL,CL
07BA 3C 73                 0988 	CMP	AL,'s'
07BC 74 BD                 0989 	JZ	RET
07BE FE C2                 0990 	INC	DL
07C0 3C 64                 0991 	CMP	AL,'d'
07C2 C3                    0992 	RET
07C3                       0993 PREG:
07C3 B2 04                 0994 	MOV	DL,4
07C5 8A C1                 0995 	MOV	AL,CL
07C7 3C 73                 0996 	CMP	AL,'s'
07C9 74 F7                 0997 	JZ	RET
07CB FE C2                 0998 	INC	DL
07CD 3C 62                 0999 	CMP	AL,'b'
07CF C3                    1000 	RET
07D0                       1001 SCANREG:
07D0 8A C1                 1002 	MOV	AL,CL
07D2 B9 04 00              1003 	MOV	CX,4
07D5 FC                    1004 	UP
07D6 8B FB                 1005 	MOV	DI,BX
07D8 F2                    1006 	REPNZ
07D9 AE                    1007 	SCAB
07DA 8B DF                 1008 	MOV	BX,DI
07DC 75 F1                 1009 	JNZ	RET
07DE 8A C1                 1010 	MOV	AL,CL
07E0 02 C2                 1011 	ADD	AL,DL
07E2 8A D0                 1012 	MOV	DL,AL
07E4 32 C0                 1013 	XOR	AL,AL
07E6 C3                    1014 	RET
07E7                       1015 
07E7 62 64 63 61           1016 REGTAB:	DB	'bdca'
07EB                       1017 
07EB 64 73 63 65           1018 SEGTAB:	DB	'dsce'
07EF                       1019 
07EF                       1020 LOOK:
07EF 8A 2F                 1021 	MOV	CH,[BX]
07F1 43                    1022 	INC	BX
07F2 BA DF 20              1023 	MOV	DX,ID
07F5 E8 FA 00              1024 	CALL	CPSLP
07F8 74 EC                 1025 	JZ	RET
07FA 34 80                 1026 	XOR	AL,80H
07FC D0 C0                 1027 	ROL	AL		;Make end-of-symbol bit least significant
07FE 8A C8                 1028 	MOV	CL,AL
0800 4B                    1029 	DEC	BX
0801 8A 07                 1030 	MOV	AL,[BX]
0803 34 80                 1031 	XOR	AL,80H
0805 D0 C0                 1032 	ROL	AL
0807 3A C1                 1033 	CMP	AL,CL
0809 73 04                 1034 	JNC	SMALL
080B FE C5                 1035 	INC	CH
080D FE C5                 1036 	INC	CH
080F                       1037 SMALL:
080F 8A D5                 1038 	MOV	DL,CH
0811 B6 00                 1039 	MOV	DH,0
0813 03 DA                 1040 	ADD	BX,DX
0815 8B 17                 1041 	MOV	DX,[BX]
0817 43                    1042 	INC	BX
0818 8A C2                 1043 	MOV	AL,DL
081A 0A C6                 1044 	OR	AL,DH
081C F9                    1045 	STC
081D 74 C7                 1046 	JZ	RET
081F 87 DA                 1047 	XCHG	DX,BX
0821 EB CC                 1048 	JP	LOOK
0823                       1049 
0823                       1050 LOOKRET:
0823 8A C5                 1051 	MOV	AL,CH
0825 3C 03                 1052 	CMP	AL,3	;RET has 3 letters
0827 75 4F                 1053 	JNZ	LOOKUP
0829 4B                    1054 	DEC	BX
082A 80 0F 80              1055 	OR	B,[BX],080H
082D BA 7F 20              1056 	MOV	DX,RETSTR+2
0830                       1057 CHKRET:
0830 8B F2                 1058 	MOV	SI,DX
0832 AC                    1059 	LODB
0833 3A 07                 1060 	CMP	AL,[BX]
0835 75 45                 1061 	JNZ	LOOKIT
0837 4B                    1062 	DEC	BX
0838 4A                    1063 	DEC	DX
0839 FE CD                 1064 	DEC	CH
083B 75 F3                 1065 	JNZ	CHKRET
083D 8B 16 4E 21           1066 	MOV	DX,[LSTRET]
0841 8A C2                 1067 	MOV	AL,DL
0843 22 C6                 1068 	AND	AL,DH
0845 FE C0                 1069 	INC	AL
0847 74 0F                 1070 	JZ	ALLRET
0849 8B 1E CA 20           1071 	MOV	BX,[PC]
084D 2B DA                 1072 	SUB	BX,DX
084F 8A C3                 1073 	MOV	AL,BL
0851 98                    1074 	CBW
0852 3B C3                 1075 	CMP	AX,BX		;Signed 8-bit number?
0854 B0 01                 1076 	MOV	AL,1
0856 74 8E                 1077 	JZ	RET
0858                       1078 ALLRET:
0858 8B 1E 50 21           1079 	MOV	BX,[RETPT]
085C 8A C7                 1080 	MOV	AL,BH
085E 0A C3                 1081 	OR	AL,BL
0860 B0 00                 1082 	MOV	AL,0
0862 75 82                 1083 	JNZ	RET
0864 8B 1E 33 21           1084 	MOV	BX,[HEAP]
0868 4B                    1085 	DEC	BX
0869 4B                    1086 	DEC	BX
086A 4B                    1087 	DEC	BX
086B 89 1E 33 21           1088 	MOV	[HEAP],BX
086F 32 C0                 1089 	XOR	AL,AL
0871 88 07                 1090 	MOV	[BX],AL
0873 89 1E 50 21           1091 	MOV	[RETPT],BX
0877 C3                    1092 	RET
0878                       1093 
0878                       1094 LOOKUP:
0878 4B                    1095 	DEC	BX
0879 80 0F 80              1096 	OR	B,[BX],080H
087C                       1097 LOOKIT:
087C 8B 1E 31 21           1098 	MOV	BX,[BASE]
0880 8A C7                 1099 	MOV	AL,BH
0882 0A C3                 1100 	OR	AL,BL
0884 74 1E                 1101 	JZ	EMPTY
0886 E8 66 FF              1102 	CALL	LOOK
0889 72 10                 1103 	JC	ENTER
088B BA 04 00              1104 	MOV	DX,4
088E 03 DA                 1105 	ADD	BX,DX
0890 8A 07                 1106 	MOV	AL,[BX]
0892 0A C0                 1107 	OR	AL,AL
0894 74 E1                 1108 	JZ	RET
0896 43                    1109 	INC	BX
0897 8B 17                 1110 	MOV	DX,[BX]
0899 43                    1111 	INC	BX
089A C3                    1112 	RET
089B                       1113 
089B                       1114 ENTER:
089B 53                    1115 	PUSH	BX		;Save pointer to link field
089C E8 0D 00              1116 	CALL	CREATE		;Add the node
089F 5E                    1117 	POP	SI
08A0 89 54 FF              1118 	MOV	[SI-1],DX	;Link new node
08A3 C3                    1119 	RET			;Zero was set by CREATE
08A4                       1120 
08A4                       1121 EMPTY:
08A4 E8 05 00              1122 	CALL	CREATE
08A7 89 16 31 21           1123 	MOV	[BASE],DX
08AB C3                    1124 	RET
08AC                       1125 
08AC                       1126 
08AC                       1127 CREATE:
08AC                       1128 
08AC                       1129 ; Add a new node to the identifier tree. The identifier is at ID with
08AC                       1130 ; bit 7 of the last character set to one. The length of the identifier is
08AC                       1131 ; in LENID, which is ID-1.
08AC                       1132 ;
08AC                       1133 ; Node format:
08AC                       1134 ;	1. Length of identifier (1 byte)
08AC                       1135 ;	2. Identifier (1-80 bytes)
08AC                       1136 ;	3. Left link (2-byte pointer to alphabetically smaller identifiers)
08AC                       1137 ;	4. Right link (0 if none larger)
08AC                       1138 ;	5. Data field:
08AC                       1139 ;	   a. Defined flag (0=undefined, 1=defined)
08AC                       1140 ;	   b. Value (2 bytes)
08AC                       1141 ;
08AC                       1142 ; This routine returns with AL=zero and zero flag set (which indicates
08AC                       1143 ; on return from LOOKUP that it has not yet been defined), DX points
08AC                       1144 ; to start of new node, and BX points to data field of new node.
08AC                       1145 
08AC A0 DE 20              1146 	MOV	AL,[LENID]
08AF 04 08                 1147 	ADD	AL,8		;Storage needed for the node
08B1 8B 1E 33 21           1148 	MOV	BX,[HEAP]
08B5 8A D0                 1149 	MOV	DL,AL
08B7 B6 00                 1150 	MOV	DH,0
08B9 2B DA                 1151 	SUB	BX,DX		;Heap grows downward
08BB 89 1E 33 21           1152 	MOV	[HEAP],BX
08BF 87 DA                 1153 	XCHG	DX,BX
08C1 8B 1E 37 21           1154 	MOV	BX,[CODE]	;Check to make sure there's enough
08C5 3B DA                 1155 	CMP	BX,DX
08C7 72 03                 1156 	JB	$+5
08C9 E9 A7 F9              1157 	JMP	ABORT
08CC 52                    1158 	PUSH	DX
08CD BB DE 20              1159 	MOV	BX,LENID
08D0 8A 0F                 1160 	MOV	CL,[BX]
08D2 FE C1                 1161 	INC	CL
08D4 B5 00                 1162 	MOV	CH,0
08D6 FC                    1163 	UP
08D7 8B F3                 1164 	MOV	SI,BX
08D9 8B FA                 1165 	MOV	DI,DX
08DB F3                    1166 	REP
08DC A4                    1167 	MOVB			;Move identifier and length into node
08DD 8B D7                 1168 	MOV	DX,DI
08DF 8B DE                 1169 	MOV	BX,SI
08E1 B5 04                 1170 	MOV	CH,4
08E3 87 DA                 1171 	XCHG	DX,BX
08E5                       1172 NILIFY:
08E5 88 0F                 1173 	MOV	[BX],CL		;Zero left and right links
08E7 43                    1174 	INC	BX
08E8 FE CD                 1175 	DEC	CH
08EA 75 F9                 1176 	JNZ	NILIFY
08EC 32 C0                 1177 	XOR	AL,AL		;Set zero flag
08EE 88 07                 1178 	MOV	[BX],AL		;Zero defined flag
08F0 5A                    1179 	POP	DX		;Restore pointer to node
08F1 C3                    1180 	RET
08F2                       1181 
08F2                       1182 CPSLP:
08F2 8B F2                 1183 	MOV	SI,DX
08F4 AC                    1184 	LODB
08F5 3A 07                 1185 	CMP	AL,[BX]
08F7 9F                    1186 	LAHF
08F8 42                    1187 	INC	DX
08F9 43                    1188 	INC	BX
08FA 9E                    1189 	SAHF
08FB 75 F4                 1190 	JNZ	RET
08FD FE CD                 1191 	DEC	CH
08FF 75 F1                 1192 	JNZ	CPSLP
0901 C3                    1193 	RET
0902                       1194 
0902                       1195 GETLAB:
0902 BB 00 00              1196 	MOV	BX,0
0905 89 1E CE 20           1197 	MOV	[LABPT],BX
0909 C6 06 D0 20 FF        1198 	MOV	B,[FLAG],-1
090E B6 00                 1199 	MOV	DH,0
0910 A0 2F 21              1200 	MOV	AL,[CHR]
0913 3C 21                 1201 	CMP	AL,' '+1
0915 72 03                 1202 	JC	NOT1
0917 80 CE 01              1203 	OR	DH,001H
091A                       1204 NOT1:
091A E8 9C FD              1205 	CALL	GETLET
091D 72 E2                 1206 	JC	RET
091F 3C 3A                 1207 	CMP	AL,':'
0921 75 05                 1208 	JNZ	LABCHK
0923 E8 90 F9              1209 	CALL	NEXTCHR
0926 EB 07                 1210 	JP	LABEL
0928                       1211 LABCHK:
0928 0A C0                 1212 	OR	AL,AL
092A F6 C6 01              1213 	TEST	DH,001H
092D 74 D2                 1214 	JZ	RET
092F                       1215 LABEL:
092F A0 4B 21              1216 	MOV	AL,[CHKLAB]
0932 0A C0                 1217 	OR	AL,AL
0934 74 03                 1218 	JZ	$+5
0936 E9 80 FD              1219 	JMP	GETLET
0939 E8 3C FF              1220 	CALL	LOOKUP
093C B1 0B                 1221 	MOV	CL,11
093E 75 11                 1222 	JNZ	ERR5
0940 8B 16 CA 20           1223 	MOV	DX,[PC]
0944 C6 07 01              1224 	MOV	B,[BX],1
0947 43                    1225 	INC	BX
0948 89 17                 1226 	MOV	[BX],DX
094A 89 1E CE 20           1227 	MOV	[LABPT],BX
094E E9 68 FD              1228 	JMP	GETLET
0951                       1229 
0951 E9 5D F9              1230 ERR5:	JMP	ERROR
0954                       1231 
0954                       1232 ASMLIN:
0954 C6 06 D1 20 01        1233 	MOV	B,[MAXFLG],1	;Allow only B and W flags normally
0959 8B 1E CA 20           1234 	MOV	BX,[PC]
095D 89 1E CC 20           1235 	MOV	[OLDPC],BX
0961 E8 9E FF              1236 	CALL	GETLAB
0964 73 03                 1237 	JNC	$+5
0966 E9 E8 F8              1238 	JMP	ENDLN
0969 BB DE 20              1239 	MOV	BX,LENID
096C 8A 07                 1240 	MOV	AL,[BX]
096E B1 0C                 1241 	MOV	CL,12
0970 2C 02                 1242 	SUB	AL,2
0972 8A E8                 1243 	MOV	CH,AL
0974 72 DB                 1244 	JC	ERR5
0976 43                    1245 	INC	BX
0977 82 3F 66              1246 	CMP	B,[BX],"f"	;See if an 8087 mnemonic
097A 74 4C                 1247 	JZ	NDPOP
097C 3C 05                 1248 	CMP	AL,5
097E 73 D1                 1249 	JNC	ERR5
0980 8A 07                 1250 	MOV	AL,[BX]
0982 2C 61                 1251 	SUB	AL,'a'
0984 8A C8                 1252 	MOV	CL,AL
0986 02 C0                 1253 	ADD	AL,AL
0988 02 C0                 1254 	ADD	AL,AL
098A 02 C1                 1255 	ADD	AL,CL
098C 02 C5                 1256 	ADD	AL,CH
098E 02 C0                 1257 	ADD	AL,AL
0990 BB D0 1A              1258 	MOV	BX,OPTAB
0993 8A D0                 1259 	MOV	DL,AL
0995 B6 00                 1260 	MOV	DH,0
0997 03 DA                 1261 	ADD	BX,DX
0999 8B 1F                 1262 	MOV	BX,[BX]
099B FE C5                 1263 	INC	CH
099D 8A CD                 1264 	MOV	CL,CH
099F 8A 27                 1265 	MOV	AH,[BX]
09A1 43                    1266 	INC	BX
09A2 0A E4                 1267 	OR	AH,AH
09A4 74 18                 1268 	JZ	OPERR
09A6                       1269 FINDOP:
09A6 8A E9                 1270 	MOV	CH,CL
09A8 BA E0 20              1271 	MOV	DX,ID+1
09AB 95                    1272 	XCHG	AX,BP		;Save count of opcodes in BP
09AC E8 43 FF              1273 	CALL	CPSLP
09AF 74 12                 1274 	JZ	HAVOP
09B1 95                    1275 	XCHG	AX,BP
09B2 B6 00                 1276 	MOV	DH,0
09B4 8A D5                 1277 	MOV	DL,CH
09B6 42                    1278 	INC	DX
09B7 42                    1279 	INC	DX
09B8 03 DA                 1280 	ADD	BX,DX
09BA FE CC                 1281 	DEC	AH
09BC 75 E8                 1282 	JNZ	FINDOP
09BE                       1283 OPERR:
09BE B1 0C                 1284 	MOV	CL,12
09C0 E9 EE F8              1285 	JMP	ERROR
09C3                       1286 
09C3                       1287 HAVOP:
09C3 8A 47 02              1288 	MOV	AL,[BX+2]	;Get opcode
09C6 FF 27                 1289 	JMP	[BX]
09C8                       1290 
09C8                       1291 NDPOP:	;First letter is "F" so must be 8087 opcode ("Numeric Data Processor")
09C8 C6 06 D1 20 04        1292 	MOV	B,[MAXFLG],4	;Allow all type flags
09CD 43                    1293 	INC	BX
09CE 82 3F 6E              1294 	CMP	B,[BX],"n"	;"No-wait" form?
09D1 B4 00                 1295 	MOV	AH,0
09D3 75 05                 1296 	JNZ	SAVNFLG
09D5 B4 01                 1297 	MOV	AH,1
09D7 FE C8                 1298 	DEC	AL
09D9 43                    1299 	INC	BX		;Skip over the "N"
09DA                       1300 SAVNFLG:
09DA 88 26 55 21           1301 	MOV	[NOWAIT],AH	;0 for wait, 1 for no wait
09DE 3C 01                 1302 	CMP	AL,1
09E0 72 DC                 1303 	JB	OPERR		;Not enough char left for valid opcode?
09E2 3C 05                 1304 	CMP	AL,5
09E4 77 D8                 1305 	JA	OPERR		;Too many?
09E6 98                    1306 	CBW
09E7 92                    1307 	XCHG	AX,DX		;Save length in DX
09E8 8B F2                 1308 	MOV	SI,DX
09EA 80 08 80              1309 	OR	B,[SI+BX],80H	;Set high bit of last character
09ED 8A 07                 1310 	MOV	AL,[BX]		;Get first char of opcode
09EF 43                    1311 	INC	BX
09F0 2C 61                 1312 	SUB	AL,"a"
09F2 72 28                 1313 	JB	TRY2XM1		;Go see if opcode starts with "2"
09F4 3C 19                 1314 	CMP	AL,"z"-"a"
09F6 77 C6                 1315 	JA	OPERR
09F8 98                    1316 	CBW
09F9 D1 E0                 1317 	SHL	AX		;Double to index into address table
09FB 96                    1318 	XCHG	AX,SI		;Put in index register
09FC 8B BC D4 1B           1319 	MOV	DI,[SI+NDPTAB]	;Get start of opcode table for this letter
0A00                       1320 LOOKNDP:
0A00 8A 25                 1321 	MOV	AH,[DI]		;Number of opcodes starting with this letter
0A02 0A E4                 1322 	OR	AH,AH
0A04 74 B8                 1323 	JZ	OPERR		;Any start with this letter?
0A06                       1324 FNDNDP:
0A06 47                    1325 	INC	DI
0A07 8B F3                 1326 	MOV	SI,BX		;Pointer to start of opcode
0A09 8B CA                 1327 	MOV	CX,DX		;Get length of opcode
0A0B F3                    1328 	REPE
0A0C A6                    1329 	CMPB			;Compare opcode to table entry
0A0D 74 38                 1330 	JZ	HAVNDP
0A0F 4F                    1331 	DEC	DI		;Back up in case that was last letter
0A10 B0 80                 1332 	MOV	AL,80H		;Look for char with high bit set
0A12                       1333 ENDOP:
0A12 AE                    1334 	SCASB
0A13 77 FD                 1335 	JA	ENDOP
0A15 47                    1336 	INC	DI		;Skip over info about opcode
0A16 FE CC                 1337 	DEC	AH
0A18 75 EC                 1338 	JNZ	FNDNDP
0A1A EB A2                 1339 OPERRJ:	JP	OPERR
0A1C                       1340 
0A1C                       1341 TRY2XM1:
0A1C 3C D1                 1342 	CMP	AL,"2"-"a"
0A1E 75 9E                 1343 	JNZ	OPERR
0A20 BF 5E 19              1344 	MOV	DI,XM1
0A23 EB DB                 1345 	JP	LOOKNDP
0A25                       1346 
0A25                       1347 SPECIALOP:
0A25 24 07                 1348 	AND	AL,7		;Mask to special op number
0A27 74 16                 1349 	JZ	FWAIT		;If zero, go handle FWAIT
0A29                       1350 ;Handle FNOP
0A29 82 3E 55 21 00        1351 	CMP	B,[NOWAIT],0	;Was "N" present (If not opcode was "FOP")
0A2E 74 8E                 1352 	JZ	OPERR
0A30 B0 9B                 1353 	MOV	AL,9BH		;Need Wait opcode after all
0A32 E8 67 01              1354 	CALL	PUT
0A35 B0 D9                 1355 	MOV	AL,0D9H
0A37 E8 62 01              1356 	CALL	PUT
0A3A B0 D0                 1357 	MOV	AL,0D0H
0A3C E9 5D 01              1358 	JMP	PUT
0A3F                       1359 
0A3F                       1360 FWAIT:
0A3F 82 3E 55 21 00        1361 	CMP	B,[NOWAIT],0	;"FNWAIT" not legal
0A44 75 D4                 1362 	JNZ	OPERRJ
0A46 C3                    1363 	RET			;Nothing to do - "WAIT" already sent
0A47                       1364 
0A47                       1365 HAVNDP:
0A47 8B F7                 1366 	MOV	SI,DI
0A49 82 3E 55 21 00        1367 	CMP	B,[NOWAIT],0
0A4E 75 05                 1368 	JNZ	NWAIT
0A50 B0 9B                 1369 	MOV	AL,9BH		;Wait opcode
0A52 E8 47 01              1370 	CALL	PUT
0A55                       1371 NWAIT:
0A55 AD                    1372 	LODW			;Get opcode info
0A56 A8 F8                 1373 	TEST	AL,0F8H		;Any operand bits set?
0A58 74 66                 1374 	JZ	NOOPS		;If no operands, output code
0A5A A8 78                 1375 	TEST	AL,78H		;Special case?
0A5C 74 C7                 1376 	JZ	SPECIALOP
0A5E 50                    1377 	PUSH	AX
0A5F E8 A0 FB              1378 	CALL	GETSYM		;See if any operands
0A62 59                    1379 	POP	CX
0A63 3C 3B                 1380 	CMP	AL,";"
0A65 74 52                 1381 	JZ	NOOPCHK
0A67 3C 0D                 1382 	CMP	AL,EOL
0A69 74 4E                 1383 	JZ	NOOPCHK
0A6B 3C 06                 1384 	CMP	AL,FREG		;Is it 8087 register?
0A6D 75 6F                 1385 	JNZ	MEMOP
0A6F 91                    1386 	XCHG	AX,CX
0A70 A8 40                 1387 	TEST	AL,ONEREG	;One register OK as operand?
0A72 75 36                 1388 	JNZ	PUTREG		;Yes - save it
0A74 A8 20                 1389 	TEST	AL,20H		;Memory-only operation?
0A76 B1 14                 1390 	MOV	CL,20
0A78 75 61                 1391 	JNZ	ERRJ4
0A7A A8 18                 1392 	TEST	AL,18H		;Two-register operation?
0A7C 7A 5D                 1393 	JPE	ERRJ4		;Must be exactly one bit set
0A7E 52                    1394 	PUSH	DX		;Save register number
0A7F 50                    1395 	PUSH	AX		;Save opcode
0A80 E8 7F FB              1396 	CALL	GETSYM
0A83 3C 2C                 1397 	CMP	AL,","
0A85 B1 15                 1398 	MOV	CL,15H
0A87 75 52                 1399 	JNZ	ERRJ4
0A89 E8 76 FB              1400 	CALL	GETSYM
0A8C B1 14                 1401 	MOV	CL,20
0A8E 3C 06                 1402 	CMP	AL,FREG
0A90 75 49                 1403 	JNZ	ERRJ4
0A92 58                    1404 	POP	AX
0A93 5B                    1405 	POP	BX
0A94 34 02                 1406 	XOR	AL,2		;Flip "POP" bit
0A96 24 FB                 1407 	AND	AL,0FBH		;Reset direction bit to ST(0)
0A98 0A DB                 1408 	OR	BL,BL		;Is first register ST(0)?
0A9A 74 0A                 1409 	JZ	ST0DEST
0A9C 87 DA                 1410 	XCHG	DX,BX
0A9E 0A DB                 1411 	OR	BL,BL		;One of these must be ST(0)
0AA0 75 39                 1412 	JNZ	ERRJ4
0AA2 34 04                 1413 	XOR	AL,4		;Flip direction
0AA4 EB 04                 1414 	JMPS	PUTREG
0AA6                       1415 ST0DEST:
0AA6 A8 02                 1416 	TEST	AL,2		;Is POP bit set?
0AA8 75 31                 1417 	JNZ	ERRJ4		;Don't allow destination ST(0) then pop
0AAA                       1418 PUTREG:
0AAA 80 E4 F8              1419 	AND	AH,0F8H		;Zero out register field
0AAD 0A E2                 1420 	OR	AH,DL
0AAF 80 CC C0              1421 	OR	AH,0C0H
0AB2 50                    1422 	PUSH	AX
0AB3 E8 4C FB              1423 	CALL	GETSYM		;Get to next symbol
0AB6 58                    1424 	POP	AX
0AB7 EB 07                 1425 	JMPS	NOOPS
0AB9                       1426 
0AB9                       1427 NOOPCHK:
0AB9 91                    1428 	XCHG	AX,CX
0ABA A8 80                 1429 	TEST	AL,80H		;Is no operands OK?
0ABC B1 14                 1430 	MOV	CL,20
0ABE 75 1B                 1431 	JNZ	ERRJ4
0AC0                       1432 NOOPS:
0AC0                       1433 ;First test for FDIV or FSUB and reverse "R" bit if "D" bit is set
0AC0 50                    1434 	PUSH	AX
0AC1 25 05 E0              1435 	AND	AX,0E005H
0AC4 3D 04 E0              1436 	CMP	AX,0E004H
0AC7 58                    1437 	POP	AX
0AC8 75 03                 1438 	JNZ	NOREV
0ACA 80 F4 08              1439 	XOR	AH,8		;Reverse "R" bit
0ACD                       1440 NOREV:
0ACD 24 07                 1441 	AND	AL,7
0ACF 0C D8                 1442 	OR	AL,0D8H		;ESC hook
0AD1 E8 C8 00              1443 	CALL	PUT
0AD4 8A C4                 1444 	MOV	AL,AH
0AD6 E9 C3 00              1445 	JMP	PUT
0AD9                       1446 
0AD9                       1447 BADFLAG:
0AD9 B1 20                 1448 	MOV	CL,20H
0ADB E9 D3 F7              1449 ERRJ4:	JMP	ERROR
0ADE                       1450 
0ADE                       1451 MEMOP:
0ADE 51                    1452 	PUSH	CX		;Save opcode
0ADF E8 E9 F8              1453 	CALL	GETOP1		;Get memory operand
0AE2 3C 00                 1454 	CMP	AL,UNDEFID	;Is it?
0AE4 B1 14                 1455 	MOV	CL,20
0AE6 75 F3                 1456 	JNZ	ERRJ4
0AE8 58                    1457 	POP	AX
0AE9 A8 20                 1458 	TEST	AL,20H		;Does it have memory format field?
0AEB 75 08                 1459 	JNZ	GETFORMAT
0AED A8 08                 1460 	TEST	AL,8		;Check if any memory operand legal
0AEF 74 EA                 1461 	JZ	ERRJ4
0AF1 A8 10                 1462 	TEST	AL,10H		;Check for 2-op arithmetic
0AF3 75 1E                 1463 	JNZ	PUTMEM		;If not, just use as plain memory op
0AF5                       1464 GETFORMAT:
0AF5 24 F9                 1465 	AND	AL,0F9H		;Zero memory format bits
0AF7 8A 0E D0 20           1466 	MOV	CL,[FLAG]
0AFB FE C9                 1467 	DEC	CL		;Must now be in range 0-3
0AFD 7C DA                 1468 	JL	BADFLAG
0AFF 8A E8                 1469 	MOV	CH,AL		;Save opcode byte
0B01 D0 E8                 1470 	SHR	AL		;Put format bits in bits 2 & 3
0B03 24 0C                 1471 	AND	AL,0CH
0B05 0A C1                 1472 	OR	AL,CL		;Combine format bits with flag
0B07 BB 23 0B              1473 	MOV	BX,FORMATTAB
0B0A D7                    1474 	XLAT
0B0B 0A C0                 1475 	OR	AL,AL		;Valid combination?
0B0D 78 CA                 1476 	JS	BADFLAG
0B0F 0A E0                 1477 	OR	AH,AL		;Possibly set new bits in second byte
0B11 0A C5                 1478 	OR	AL,CH		;Set memory format bits
0B13                       1479 PUTMEM:
0B13 24 07                 1480 	AND	AL,7
0B15 0C D8                 1481 	OR	AL,0D8H
0B17 E8 82 00              1482 	CALL	PUT
0B1A 8A C4                 1483 	MOV	AL,AH
0B1C 24 38                 1484 	AND	AL,38H
0B1E 0A C2                 1485 	OR	AL,DL		;Combine addressing mode
0B20 E9 39 01              1486 	JMP	PUTADD
0B23                       1487 
0B23                       1488 FORMATTAB:
0B23                       1489 ;There are 16 entries in this table. The 4-bit index is built like this:
0B23                       1490 ;	Bit 3		0 for normal memory ops, 1 if extended is OK
0B23                       1491 ;	Bit 2		0 for integer, 1 for real
0B23                       1492 ;	Bit 0 & 1	Flag: 00=W, 01=S, 10=L, 11=T
0B23                       1493 ;
0B23                       1494 ;The entries in the table are used as two 3-bit fields. Bits 0-2 are ORed
0B23                       1495 ;into the first byte of the opcode for the Memory Format field. Bits 3-6
0B23                       1496 ;are ORed into the second byte to modify the opcode for extended operands.
0B23                       1497 ;If bit 7 is set, then that combination is illegal.
0B23                       1498 
0B23 06 02 80 80           1499 	DB	6,2,80H,80H	;Normal integers
0B27 80 00 04 80           1500 	DB	80H,0,4,80H	;Normal reals
0B2B 06 02 2E 80           1501 	DB	6,2,2EH,80H	;Extended integers
0B2F 80 00 04 2B           1502 	DB	80H,0,4,2BH	;Extended reals
0B33                       1503 
0B33                       1504 GRP1:
0B33 B9 09 8A              1505 	MOV	CX,8A09H
0B36 E8 B3 F7              1506 	CALL	MROPS
0B39 B9 C6 00              1507 	MOV	CX,0C6H
0B3C 8A C7                 1508 	MOV	AL,BH
0B3E 3C 00                 1509 	CMP	AL,UNDEFID
0B40 75 03                 1510 	JNZ	L0006
0B42 E8 3C 00              1511 	CALL	STIMM
0B45                       1512 L0006:	
0B45 24 01                 1513 	AND	AL,1
0B47 74 0A                 1514 	JZ	BYTIMM
0B49 B0 B8                 1515 	MOV	AL,0B8H
0B4B 0A C3                 1516 	OR	AL,BL
0B4D E8 4C 00              1517 	CALL	PUT
0B50 E9 98 00              1518 	JMP	PUTWOR
0B53                       1519 
0B53                       1520 BYTIMM:
0B53 B0 B0                 1521 	MOV	AL,0B0H
0B55 0A C3                 1522 	OR	AL,BL
0B57 E8 42 00              1523 	CALL	PUT
0B5A E9 95 00              1524 PUTBJ:	JMP	PUTBYT
0B5D                       1525 
0B5D                       1526 IMMED:
0B5D 8A C7                 1527 	MOV	AL,BH
0B5F 3C 00                 1528 	CMP	AL,UNDEFID
0B61 74 1E                 1529 	JZ	STIMM
0B63 8A C3                 1530 	MOV	AL,BL
0B65 0A C0                 1531 	OR	AL,AL
0B67 74 32                 1532 	JZ	RET
0B69 8A C7                 1533 	MOV	AL,BH
0B6B E8 1E 00              1534 	CALL	IMM
0B6E 0C C0                 1535 	OR	AL,0C0H
0B70 E8 29 00              1536 	CALL	PUT
0B73                       1537 FINIMM:
0B73 8A C1                 1538 	MOV	AL,CL
0B75 59                    1539 	POP	CX
0B76 A8 01                 1540 	TEST	AL,1
0B78 74 E0                 1541 	JZ	PUTBJ
0B7A 3C 83                 1542 	CMP	AL,83H
0B7C 74 DC                 1543 	JZ	PUTBJ
0B7E E9 6A 00              1544 	JMP	PUTWOR
0B81                       1545 
0B81                       1546 STIMM:
0B81 A0 D0 20              1547 	MOV	AL,[FLAG]
0B84 E8 05 00              1548 	CALL	IMM
0B87 E8 D2 00              1549 	CALL	PUTADD
0B8A EB E7                 1550 	JP	FINIMM
0B8C                       1551 
0B8C                       1552 IMM:
0B8C 24 01                 1553 	AND	AL,1
0B8E 0A C1                 1554 	OR	AL,CL
0B90 8A C8                 1555 	MOV	CL,AL
0B92 E8 07 00              1556 	CALL	PUT
0B95 8A C5                 1557 	MOV	AL,CH
0B97 24 38                 1558 	AND	AL,38H
0B99 0A C3                 1559 	OR	AL,BL
0B9B C3                    1560 	RET
0B9C                       1561 
0B9C                       1562 PUT:
0B9C                       1563 ;Save byte in AL as pure code, with intermediate code bits 00. AL and
0B9C                       1564 ;DI destroyed, no other registers affected.
0B9C 53                    1565 	PUSH	BX
0B9D 51                    1566 	PUSH	CX
0B9E B5 00                 1567 	MOV	CH,0		;Flag as pure code
0BA0 E8 03 00              1568 	CALL	GEN
0BA3 59                    1569 	POP	CX
0BA4 5B                    1570 	POP	BX
0BA5 C3                    1571 	RET
0BA6                       1572 
0BA6                       1573 GEN:
0BA6                       1574 ;Save byte of code in AL, given intermediate code bits in bits 7&8 of CH.
0BA6 E8 34 00              1575 	CALL	PUTINC		;Save it and bump code pointer
0BA9                       1576 GEN1:
0BA9 A0 3A 21              1577 	MOV	AL,[RELOC]
0BAC D0 D5                 1578 	RCL	CH
0BAE D0 D0                 1579 	RCL	AL
0BB0 D0 D5                 1580 	RCL	CH
0BB2 D0 D0                 1581 	RCL	AL
0BB4 A2 3A 21              1582 	MOV	[RELOC],AL
0BB7 BB 3B 21              1583 	MOV	BX,BCOUNT
0BBA FE 0F                 1584 	DEC	B,[BX]
0BBC 75 E7                 1585 	JNZ	RET
0BBE C6 07 04              1586 	MOV	B,[BX],4
0BC1 BB 3A 21              1587 	MOV	BX,RELOC
0BC4 8A 07                 1588 	MOV	AL,[BX]
0BC6 C6 07 00              1589 	MOV	B,[BX],0
0BC9 8B 3E 58 21           1590 	MOV	DI,[IY]
0BCD 88 05                 1591 	MOV	[DI],AL
0BCF 8B 1E 37 21           1592 	MOV	BX,[CODE]
0BD3 89 1E 58 21           1593 	MOV	[IY],BX
0BD7 43                    1594 	INC	BX
0BD8 89 1E 37 21           1595 	MOV	[CODE],BX
0BDC C3                    1596 	RET
0BDD                       1597 
0BDD                       1598 PUTINC:
0BDD FF 06 CA 20           1599 	INC	[PC]
0BE1                       1600 PUTCD:
0BE1 8B 3E 37 21           1601 	MOV	DI,[CODE]
0BE5 AA                    1602 	STOB
0BE6 89 3E 37 21           1603 	MOV	[CODE],DI
0BEA C3                    1604 	RET
0BEB                       1605 
0BEB                       1606 PUTWOR:
0BEB                       1607 ;Save the word value described by [DLABEL] and [DATA] as code. If defined,
0BEB                       1608 ;two bytes of pure code will be produced. Otherwise, appropriate intermediate
0BEB                       1609 ;code will be generated.
0BEB 51                    1610 	PUSH	CX
0BEC B5 80                 1611 	MOV	CH,80H
0BEE 52                    1612 	PUSH	DX
0BEF 53                    1613 	PUSH	BX
0BF0 EB 20                 1614 	JP	PUTBW
0BF2                       1615 
0BF2                       1616 PUTBYT:
0BF2                       1617 ;Same as PUTWOR, above, but for byte value.
0BF2 51                    1618 	PUSH	CX
0BF3 B5 40                 1619 	MOV	CH,40H
0BF5 52                    1620 	PUSH	DX
0BF6 53                    1621 	PUSH	BX
0BF7 8B 1E D8 20           1622 	MOV	BX,[DLABEL]
0BFB 8A C7                 1623 	MOV	AL,BH
0BFD 0A C3                 1624 	OR	AL,BL
0BFF 75 11                 1625 	JNZ	PUTBW
0C01 8B 1E D6 20           1626 	MOV	BX,[DATA]
0C05 0A C7                 1627 	OR	AL,BH
0C07 74 09                 1628 	JZ	PUTBW
0C09 FE C7                 1629 	INC	BH
0C0B 74 05                 1630 	JZ	PUTBW
0C0D B1 1F                 1631 	MOV	CL,31
0C0F E9 9F F6              1632 	JMP	ERROR
0C12                       1633 PUTBW:
0C12 8B 16 D8 20           1634 	MOV	DX,[DLABEL]
0C16 8B 1E D6 20           1635 	MOV	BX,[DATA]
0C1A                       1636 PUTCHK:
0C1A 0B D2                 1637 	OR	DX,DX
0C1C 74 25                 1638 	JZ	NOUNDEF
0C1E 8A C2                 1639 	MOV	AL,DL
0C20 E8 BE FF              1640 	CALL	PUTCD
0C23 8A C6                 1641 	MOV	AL,DH
0C25 E8 B9 FF              1642 	CALL	PUTCD
0C28 8A C3                 1643 	MOV	AL,BL
0C2A E8 B0 FF              1644 	CALL	PUTINC
0C2D 8A C7                 1645 	MOV	AL,BH
0C2F F6 C5 80              1646 	TEST	CH,080H
0C32 74 05                 1647 	JZ	SMPUT
0C34 E8 6F FF              1648 	CALL	GEN
0C37 EB 06                 1649 	JP	PRET
0C39                       1650 SMPUT:
0C39 E8 A5 FF              1651 	CALL	PUTCD
0C3C E8 6A FF              1652 	CALL	GEN1
0C3F                       1653 PRET:
0C3F 5B                    1654 	POP	BX
0C40 5A                    1655 	POP	DX
0C41 59                    1656 	POP	CX
0C42 C3                    1657 	RET
0C43                       1658 
0C43                       1659 NOUNDEF:
0C43 8A C3                 1660 	MOV	AL,BL
0C45 8A CF                 1661 	MOV	CL,BH
0C47 51                    1662 	PUSH	CX
0C48 B5 00                 1663 	MOV	CH,0
0C4A E8 59 FF              1664 	CALL	GEN
0C4D 59                    1665 	POP	CX
0C4E 8A C1                 1666 	MOV	AL,CL
0C50 F6 C5 80              1667 	TEST	CH,080H
0C53 B5 00                 1668 	MOV	CH,0
0C55 74 E8                 1669 	JZ	PRET
0C57 E8 4C FF              1670 	CALL	GEN
0C5A EB E3                 1671 	JP	PRET
0C5C                       1672 
0C5C                       1673 PUTADD:
0C5C                       1674 ;Save complete addressing mode. Addressing mode is in AL; if this is a register
0C5C                       1675 ;operation (>=C0), then the one byte will be saved as pure code. Otherwise,
0C5C                       1676 ;the details of the addressing mode will be investigated and the optional one-
0C5C                       1677 ;or two-byte displacement will be added, as described by [ADDR] and [ALABEL].
0C5C 51                    1678 	PUSH	CX
0C5D 52                    1679 	PUSH	DX
0C5E 53                    1680 	PUSH	BX
0C5F B5 00                 1681 	MOV	CH,0
0C61 8A C8                 1682 	MOV	CL,AL
0C63 E8 40 FF              1683 	CALL	GEN		;Save the addressing mode as pure code
0C66 8A C1                 1684 	MOV	AL,CL
0C68 B5 80                 1685 	MOV	CH,80H
0C6A 24 C7                 1686 	AND	AL,0C7H
0C6C 3C 06                 1687 	CMP	AL,6
0C6E 74 0A                 1688 	JZ	TWOBT		;Direct address?
0C70 24 C0                 1689 	AND	AL,0C0H
0C72 74 CB                 1690 	JZ	PRET		;Indirect through reg, no displacement?
0C74 3C C0                 1691 	CMP	AL,0C0H
0C76 74 C7                 1692 	JZ	PRET		;Register to register operation?
0C78 8A E8                 1693 	MOV	CH,AL		;Save whether one- or two-byte displacement
0C7A                       1694 TWOBT:
0C7A 8B 1E D2 20           1695 	MOV	BX,[ADDR]
0C7E 8B 16 D4 20           1696 	MOV	DX,[ALABEL]
0C82 EB 96                 1697 	JP	PUTCHK
0C84                       1698 
0C84                       1699 GRP2:
0C84 E8 41 F7              1700 	CALL	GETOP
0C87 B9 30 FF              1701 	MOV	CX,0FF30H
0C8A 3C 00                 1702 	CMP	AL,UNDEFID
0C8C 74 14                 1703 	JZ	PMEM
0C8E B5 50                 1704 	MOV	CH,50H
0C90 3C 03                 1705 	CMP	AL,XREG
0C92 74 1A                 1706 	JZ	PXREG
0C94 B5 06                 1707 	MOV	CH,6
0C96 3C 04                 1708 	CMP	AL,SREG
0C98 75 03                 1709 	JNZ	$+5
0C9A E9 01 04              1710 	JMP	PACKREG
0C9D B1 14                 1711 	MOV	CL,20
0C9F E9 0F F6              1712 	JMP	ERROR
0CA2                       1713 
0CA2                       1714 PMEM:
0CA2 8A C5                 1715 	MOV	AL,CH
0CA4 E8 F5 FE              1716 	CALL	PUT
0CA7 8A C1                 1717 	MOV	AL,CL
0CA9 0A C2                 1718 	OR	AL,DL
0CAB E9 AE FF              1719 	JMP	PUTADD
0CAE                       1720 
0CAE                       1721 PXREG:
0CAE 8A C5                 1722 	MOV	AL,CH
0CB0 0A C2                 1723 	OR	AL,DL
0CB2 E9 E7 FE              1724 	JMP	PUT
0CB5                       1725 
0CB5                       1726 GRP3:
0CB5 E8 10 F7              1727 	CALL	GETOP
0CB8 52                    1728 	PUSH	DX
0CB9 E8 03 F7              1729 	CALL	GETOP2
0CBC 5B                    1730 	POP	BX
0CBD B9 14 86              1731 	MOV	CX,8614H
0CC0 B0 04                 1732 	MOV	AL,SREG
0CC2 3A C7                 1733 	CMP	AL,BH
0CC4 74 4C                 1734 	JZ	ERR6
0CC6 3A C6                 1735 	CMP	AL,DH
0CC8 74 48                 1736 	JZ	ERR6
0CCA B0 01                 1737 	MOV	AL,CONST
0CCC 3A C7                 1738 	CMP	AL,BH
0CCE 74 42                 1739 	JZ	ERR6
0CD0 3A C6                 1740 	CMP	AL,DH
0CD2 74 3E                 1741 	JZ	ERR6
0CD4 B0 00                 1742 	MOV	AL,UNDEFID
0CD6 3A C7                 1743 	CMP	AL,BH
0CD8 74 2D                 1744 	JZ	EXMEM
0CDA 3A C6                 1745 	CMP	AL,DH
0CDC 74 2B                 1746 	JZ	EXMEM1
0CDE 8A C7                 1747 	MOV	AL,BH
0CE0 3A C6                 1748 	CMP	AL,DH
0CE2 B1 16                 1749 	MOV	CL,22
0CE4 75 2C                 1750 	JNZ	ERR6
0CE6 3C 03                 1751 	CMP	AL,XREG
0CE8 74 03                 1752 	JZ	L0008
0CEA E8 38 F6              1753 	CALL	RR1
0CED                       1754 L0008:			;RR1 never returns
0CED 8A C3                 1755 	MOV	AL,BL
0CEF 0A C0                 1756 	OR	AL,AL
0CF1 74 0D                 1757 	JZ	EXACC
0CF3 87 DA                 1758 	XCHG	DX,BX
0CF5 8A C3                 1759 	MOV	AL,BL
0CF7 0A C0                 1760 	OR	AL,AL
0CF9 8A C7                 1761 	MOV	AL,BH
0CFB 74 03                 1762 	JZ	EXACC
0CFD E8 25 F6              1763 	CALL	RR1
0D00                       1764 EXACC:
0D00 B0 90                 1765 	MOV	AL,90H
0D02 0A C2                 1766 	OR	AL,DL
0D04 E9 95 FE              1767 	JMP	PUT
0D07                       1768 
0D07                       1769 EXMEM:
0D07 87 DA                 1770 	XCHG	DX,BX
0D09                       1771 EXMEM1:
0D09 3A C7                 1772 	CMP	AL,BH
0D0B 74 05                 1773 	JZ	ERR6
0D0D B1 01                 1774 	MOV	CL,1	;Flag word as OK
0D0F E8 8D F6              1775 	CALL	NOTAC	;NOTAC never returns
0D12 E9 9C F5              1776 ERR6:	JMP	ERROR
0D15                       1777 
0D15                       1778 GRP4:
0D15 50                    1779 	PUSH	AX
0D16 E8 AF F6              1780 	CALL	GETOP
0D19 59                    1781 	POP	CX
0D1A 86 CD                 1782 	XCHG	CL,CH
0D1C 3C 01                 1783 	CMP	AL,CONST
0D1E 74 13                 1784 	JZ	FIXED
0D20 2C 03                 1785 	SUB	AL,XREG
0D22 FE CA                 1786 	DEC	DL
0D24 FE CA                 1787 	DEC	DL
0D26 0A C2                 1788 	OR	AL,DL
0D28 B1 14                 1789 	MOV	CL,20
0D2A 75 E6                 1790 	JNZ	ERR6
0D2C 8A C5                 1791 	MOV	AL,CH
0D2E 0C 08                 1792 	OR	AL,8
0D30 E9 69 FE              1793 	JMP	PUT
0D33                       1794 FIXED:
0D33 8A C5                 1795 	MOV	AL,CH
0D35 E8 64 FE              1796 	CALL	PUT
0D38 E9 B7 FE              1797 	JMP	PUTBYT
0D3B                       1798 
0D3B                       1799 GRP5:
0D3B 50                    1800 	PUSH	AX
0D3C E8 89 F6              1801 	CALL	GETOP
0D3F B1 14                 1802 	MOV	CL,20
0D41 3C 01                 1803 	CMP	AL,CONST
0D43 75 CD                 1804 	JNZ	ERR6
0D45 8B 1E D8 20           1805 	MOV	BX,[DLABEL]
0D49 8A C7                 1806 	MOV	AL,BH
0D4B 0A C3                 1807 	OR	AL,BL
0D4D B1 1E                 1808 	MOV	CL,30
0D4F 75 C1                 1809 	JNZ	ERR6
0D51 8B 1E D6 20           1810 	MOV	BX,[DATA]
0D55 58                    1811 	POP	AX
0D56 0A C0                 1812 	OR	AL,AL
0D58 74 43                 1813 	JZ	ORG
0D5A FE C8                 1814 	DEC	AL
0D5C 74 19                 1815 	JZ	DSJ
0D5E FE C8                 1816 	DEC	AL
0D60 74 27                 1817 	JZ	EQU
0D62 FE C8                 1818 	DEC	AL
0D64 74 03                 1819 	JZ	$+5
0D66 E9 98 03              1820 	JMP	IF
0D69                       1821 PUTOP:
0D69 B0 FD                 1822 	MOV	AL,-3
0D6B EB 36                 1823 	JP	NEWLOC
0D6D                       1824 ALIGN:
0D6D A0 CA 20              1825 	MOV	AL,[PC]
0D70 24 01                 1826 	AND	AL,1
0D72 74 28                 1827 	JZ	RET
0D74 BB 01 00              1828 	MOV	BX,1
0D77                       1829 DSJ:
0D77 87 DA                 1830 	XCHG	DX,BX
0D79 8B 1E CA 20           1831 	MOV	BX,[PC]
0D7D 03 DA                 1832 	ADD	BX,DX
0D7F 89 1E CA 20           1833 	MOV	[PC],BX
0D83 87 DA                 1834 	XCHG	DX,BX
0D85 B0 FC                 1835 	MOV	AL,-4
0D87 EB 1A                 1836 	JP	NEWLOC
0D89                       1837 EQU:
0D89 87 DA                 1838 	XCHG	DX,BX
0D8B 8B 1E CE 20           1839 	MOV	BX,[LABPT]
0D8F 8A C7                 1840 	MOV	AL,BH
0D91 0A C3                 1841 	OR	AL,BL
0D93 B1 22                 1842 	MOV	CL,34
0D95 74 27                 1843 	JZ	ERR7
0D97 88 17                 1844 	MOV	[BX],DL
0D99 43                    1845 	INC	BX
0D9A 88 37                 1846 	MOV	[BX],DH
0D9C C3                    1847 	RET
0D9D                       1848 ORG:
0D9D 89 1E CA 20           1849 	MOV	[PC],BX
0DA1 B0 FE                 1850 	MOV	AL,-2
0DA3                       1851 NEWLOC:
0DA3 E8 3B FE              1852 	CALL	PUTCD
0DA6 8A C3                 1853 	MOV	AL,BL
0DA8 E8 36 FE              1854 	CALL	PUTCD
0DAB 8A C7                 1855 	MOV	AL,BH
0DAD E8 31 FE              1856 	CALL	PUTCD
0DB0 B5 C0                 1857 	MOV	CH,0C0H
0DB2 E9 F4 FD              1858 	JMP	GEN1
0DB5                       1859 GRP6:
0DB5 8A E8                 1860 	MOV	CH,AL
0DB7 B1 04                 1861 	MOV	CL,4
0DB9 E8 30 F5              1862 	CALL	MROPS
0DBC B1 17                 1863 	MOV	CL,23
0DBE E9 F0 F4              1864 ERR7:	JMP	ERROR
0DC1                       1865 GRP7:
0DC1 8A E8                 1866 	MOV	CH,AL
0DC3 B1 01                 1867 	MOV	CL,1
0DC5 E8 24 F5              1868 	CALL	MROPS
0DC8 B1 80                 1869 	MOV	CL,80H
0DCA 8B 16 D8 20           1870 	MOV	DX,[DLABEL]
0DCE 8A C6                 1871 	MOV	AL,DH
0DD0 0A C2                 1872 	OR	AL,DL
0DD2 75 12                 1873 	JNZ	ACCJ
0DD4 87 DA                 1874 	XCHG	DX,BX
0DD6 8B 1E D6 20           1875 	MOV	BX,[DATA]
0DDA 8A C3                 1876 	MOV	AL,BL
0DDC 98                    1877 	CBW
0DDD 3B C3                 1878 	CMP	AX,BX
0DDF 87 DA                 1879 	XCHG	DX,BX
0DE1 75 03                 1880 	JNZ	ACCJ
0DE3 80 C9 02              1881 	OR	CL,002H
0DE6 E9 B7 00              1882 ACCJ:	JMP	ACCIMM
0DE9                       1883 GRP8:
0DE9 8A C8                 1884 	MOV	CL,AL
0DEB B5 FE                 1885 	MOV	CH,0FEH
0DED EB 04                 1886 	JP	ONEOP
0DEF                       1887 GRP9:
0DEF 8A C8                 1888 	MOV	CL,AL
0DF1 B5 F6                 1889 	MOV	CH,0F6H
0DF3                       1890 ONEOP:
0DF3 51                    1891 	PUSH	CX
0DF4 E8 D1 F5              1892 	CALL	GETOP
0DF7                       1893 ONE:
0DF7 B1 1A                 1894 	MOV	CL,26
0DF9 3C 01                 1895 	CMP	AL,CONST
0DFB 74 C1                 1896 	JZ	ERR7
0DFD 3C 04                 1897 	CMP	AL,SREG
0DFF B1 16                 1898 	MOV	CL,22
0E01 74 BB                 1899 	JZ	ERR7
0E03 59                    1900 	POP	CX
0E04 3C 00                 1901 	CMP	AL,UNDEFID
0E06 74 12                 1902 	JZ	MOP
0E08 24 01                 1903 	AND	AL,1
0E0A 74 21                 1904 	JZ	ROP
0E0C F6 C1 01              1905 	TEST	CL,001H
0E0F 74 1C                 1906 	JZ	ROP
0E11 8A C1                 1907 	MOV	AL,CL
0E13 24 F8                 1908 	AND	AL,0F8H
0E15 0A C2                 1909 	OR	AL,DL
0E17 E9 82 FD              1910 	JMP	PUT
0E1A                       1911 MOP:
0E1A A0 D0 20              1912 	MOV	AL,[FLAG]
0E1D 24 01                 1913 	AND	AL,1
0E1F 0A C5                 1914 	OR	AL,CH
0E21 E8 78 FD              1915 	CALL	PUT
0E24 8A C1                 1916 	MOV	AL,CL
0E26 24 38                 1917 	AND	AL,38H
0E28 0A C2                 1918 	OR	AL,DL
0E2A E9 2F FE              1919 	JMP	PUTADD
0E2D                       1920 ROP:
0E2D 0A C5                 1921 	OR	AL,CH
0E2F E8 6A FD              1922 	CALL	PUT
0E32 8A C1                 1923 	MOV	AL,CL
0E34 24 38                 1924 	AND	AL,38H
0E36 0C C0                 1925 	OR	AL,0C0H
0E38 0A C2                 1926 	OR	AL,DL
0E3A E9 5F FD              1927 	JMP	PUT
0E3D                       1928 GRP10:
0E3D 8A C8                 1929 	MOV	CL,AL
0E3F B5 F6                 1930 	MOV	CH,0F6H
0E41 51                    1931 	PUSH	CX
0E42 E8 83 F5              1932 	CALL	GETOP
0E45 B1 14                 1933 	MOV	CL,20
0E47 8A C2                 1934 	MOV	AL,DL
0E49 0A C0                 1935 	OR	AL,AL
0E4B 75 08                 1936 	JNZ	ERRJ1
0E4D 8A C6                 1937 	MOV	AL,DH
0E4F 3C 03                 1938 	CMP	AL,XREG
0E51 74 04                 1939 	JZ	G10
0E53 3C 02                 1940 	CMP	AL,REG
0E55 75 67                 1941 ERRJ1:	JNZ	ERR8
0E57                       1942 G10:
0E57 50                    1943 	PUSH	AX
0E58 E8 6D F5              1944 	CALL	GETOP
0E5B 58                    1945 	POP	AX
0E5C 24 01                 1946 	AND	AL,1
0E5E A2 D0 20              1947 	MOV	[FLAG],AL
0E61 8A C6                 1948 	MOV	AL,DH
0E63 EB 92                 1949 ONEJ:	JP	ONE
0E65                       1950 GRP11:
0E65 E8 34 FD              1951 	CALL	PUT
0E68 B0 0A                 1952 	MOV	AL,0AH
0E6A E9 2F FD              1953 	JMP	PUT
0E6D                       1954 GRP12:
0E6D 8A C8                 1955 	MOV	CL,AL
0E6F B5 D0                 1956 	MOV	CH,0D0H
0E71 51                    1957 	PUSH	CX
0E72 E8 53 F5              1958 	CALL	GETOP
0E75 A0 30 21              1959 	MOV	AL,[SYM]
0E78 3C 2C                 1960 	CMP	AL,','
0E7A 8A C6                 1961 	MOV	AL,DH
0E7C 75 E5                 1962 	JNZ	ONEJ
0E7E 52                    1963 	PUSH	DX
0E7F E8 46 F5              1964 	CALL	GETOP
0E82 2C 02                 1965 	SUB	AL,REG
0E84 B1 14                 1966 	MOV	CL,20
0E86 FE CA                 1967 	DEC	DL
0E88 0A C2                 1968 	OR	AL,DL
0E8A 75 32                 1969 	JNZ	ERR8
0E8C 5A                    1970 	POP	DX
0E8D 8A C6                 1971 	MOV	AL,DH
0E8F 59                    1972 	POP	CX
0E90 80 CD 02              1973 	OR	CH,002H
0E93 51                    1974 	PUSH	CX
0E94 E9 60 FF              1975 	JMP	ONE
0E97                       1976 GRP13:
0E97 8A E8                 1977 	MOV	CH,AL
0E99 B1 01                 1978 	MOV	CL,1
0E9B E8 4E F4              1979 	CALL	MROPS
0E9E B1 80                 1980 	MOV	CL,80H
0EA0                       1981 ACCIMM:
0EA0 E8 BA FC              1982 	CALL	IMMED
0EA3 80 CD 04              1983 	OR	CH,004H
0EA6 80 E5 FD              1984 	AND	CH,0FDH
0EA9                       1985 AIMM:
0EA9 8A C7                 1986 	MOV	AL,BH
0EAB 24 01                 1987 	AND	AL,1
0EAD 9F                    1988 	LAHF
0EAE 50                    1989 	PUSH	AX
0EAF 0A C5                 1990 	OR	AL,CH
0EB1 E8 E8 FC              1991 	CALL	PUT
0EB4 58                    1992 	POP	AX
0EB5 9E                    1993 	SAHF
0EB6 75 03                 1994 	JNZ	$+5
0EB8 E9 37 FD              1995 	JMP	PUTBYT
0EBB E9 2D FD              1996 	JMP	PUTWOR
0EBE                       1997 
0EBE E9 F0 F3              1998 ERR8:	JMP	ERROR
0EC1                       1999 
0EC1                       2000 GRP14:
0EC1                       2001 ;JMP and CALL mnemonics
0EC1 9F                    2002 	LAHF
0EC2 86 E0                 2003 	XCHG	AH,AL
0EC4 50                    2004 	PUSH	AX
0EC5 86 E0                 2005 	XCHG	AH,AL
0EC7 C6 06 D1 20 03        2006 	MOV	B,[MAXFLG],3	;Allow "L" flag
0ECC E8 F9 F4              2007 	CALL	GETOP
0ECF 3C 01                 2008 	CMP	AL,CONST
0ED1 74 33                 2009 	JZ	DIRECT
0ED3 B1 14                 2010 	MOV	CL,20
0ED5 3C 02                 2011 	CMP	AL,REG
0ED7 74 E5                 2012 	JZ	ERR8
0ED9 3C 04                 2013 	CMP	AL,SREG
0EDB 74 E1                 2014 	JZ	ERR8
0EDD 3C 03                 2015 	CMP	AL,XREG
0EDF 75 03                 2016 	JNZ	NOTRG
0EE1 80 CA C0              2017 	OR	DL,0C0H
0EE4                       2018 NOTRG:
0EE4                       2019 ;Indirect jump. DL has addressing mode.
0EE4 B0 FF                 2020 	MOV	AL,0FFH
0EE6 E8 B3 FC              2021 	CALL	PUT
0EE9 58                    2022 	POP	AX
0EEA 86 E0                 2023 	XCHG	AH,AL
0EEC 9E                    2024 	SAHF
0EED 24 38                 2025 	AND	AL,38H
0EEF 0A C2                 2026 	OR	AL,DL
0EF1 8A 2E D0 20           2027 	MOV	CH,[FLAG]
0EF5 82 FD 03              2028 	CMP	CH,3		;Flag "L" present?
0EF8 74 09                 2029 	JZ	PUTADDJ		;If so, do inter-segment
0EFA B1 27                 2030 	MOV	CL,27H
0EFC 82 FD FF              2031 	CMP	CH,-1		;Better not be a flag
0EFF 75 BD                 2032 	JNZ	ERR8
0F01 24 F7                 2033 	AND	AL,0F7H		;Convert to intra-segment
0F03                       2034 PUTADDJ:
0F03 E9 56 FD              2035 	JMP	PUTADD
0F06                       2036 DIRECT:
0F06 A0 30 21              2037 	MOV	AL,[SYM]
0F09 3C 2C                 2038 	CMP	AL,','
0F0B 74 1C                 2039 	JZ	LONGJ
0F0D 58                    2040 	POP	AX
0F0E 86 E0                 2041 	XCHG	AH,AL
0F10 9E                    2042 	SAHF
0F11 FE C8                 2043 	DEC	AL
0F13 3C E9                 2044 	CMP	AL,0E9H
0F15 74 02                 2045 	JZ	GOTOP
0F17 B0 E8                 2046 	MOV	AL,0E8H
0F19                       2047 GOTOP:
0F19 E8 80 FC              2048 	CALL	PUT
0F1C 8B 16 CA 20           2049 	MOV	DX,[PC]
0F20 42                    2050 	INC	DX
0F21 42                    2051 	INC	DX
0F22 29 16 D6 20           2052 	SUB	[DATA],DX
0F26 E9 C2 FC              2053 	JMP	PUTWOR
0F29                       2054 LONGJ:
0F29 58                    2055 	POP	AX
0F2A 86 E0                 2056 	XCHG	AH,AL
0F2C 9E                    2057 	SAHF
0F2D E8 6C FC              2058 	CALL	PUT
0F30 E8 B8 FC              2059 	CALL	PUTWOR
0F33 E8 92 F4              2060 	CALL	GETOP
0F36 B1 14                 2061 	MOV	CL,20
0F38 3C 01                 2062 	CMP	AL,CONST
0F3A 75 82                 2063 	JNZ	ERR8
0F3C E9 AC FC              2064 	JMP	PUTWOR
0F3F                       2065 
0F3F                       2066 GRP16:
0F3F                       2067 ;RET mnemonic
0F3F 9F                    2068 	LAHF
0F40 86 E0                 2069 	XCHG	AH,AL
0F42 50                    2070 	PUSH	AX
0F43 86 E0                 2071 	XCHG	AH,AL
0F45 E8 BA F6              2072 	CALL	GETSYM
0F48 3C 05                 2073 	CMP	AL,5
0F4A 74 1C                 2074 	JZ	LONGR
0F4C 3C 0D                 2075 	CMP	AL,EOL
0F4E 74 3F                 2076 	JZ	NODEC
0F50 3C 3B                 2077 	CMP	AL,';'
0F52 74 3B                 2078 	JZ	NODEC
0F54                       2079 GETSP:
0F54 E8 74 F4              2080 	CALL	GETOP1
0F57 59                    2081 	POP	CX
0F58 3C 01                 2082 	CMP	AL,CONST
0F5A B1 14                 2083 	MOV	CL,20
0F5C 75 63                 2084 	JNZ	ERR9
0F5E 8A C5                 2085 	MOV	AL,CH
0F60 24 FE                 2086 	AND	AL,0FEH
0F62 E8 37 FC              2087 	CALL	PUT
0F65 E9 83 FC              2088 	JMP	PUTWOR
0F68                       2089 LONGR:
0F68 82 FA 03              2090 	CMP	DL,3		;Is flag "L"?
0F6B B1 27                 2091 	MOV	CL,27H
0F6D 75 7D                 2092 	JNZ	ERR10		;If not, bad flag
0F6F 58                    2093 	POP	AX
0F70 86 E0                 2094 	XCHG	AH,AL
0F72 9E                    2095 	SAHF
0F73 0C 08                 2096 	OR	AL,8
0F75 9F                    2097 	LAHF
0F76 86 E0                 2098 	XCHG	AH,AL
0F78 50                    2099 	PUSH	AX
0F79 86 E0                 2100 	XCHG	AH,AL
0F7B                       2101 NOTLON:
0F7B E8 84 F6              2102 	CALL	GETSYM
0F7E 3C 0D                 2103 	CMP	AL,EOL
0F80 74 2E                 2104 	JZ	DORET
0F82 3C 3B                 2105 	CMP	AL,';'
0F84 74 2A                 2106 	JZ	DORET
0F86 3C 2C                 2107 	CMP	AL,','
0F88 75 03                 2108 	JNZ	L0011
0F8A E8 75 F6              2109 	CALL	GETSYM
0F8D                       2110 L0011:	
0F8D EB C5                 2111 	JP	GETSP
0F8F                       2112 NODEC:
0F8F                       2113 ;Return is intra-segment (short) without add to SP. 
0F8F                       2114 ;Record position for RET symbol.
0F8F 8B 1E CA 20           2115 	MOV	BX,[PC]
0F93 89 1E 4E 21           2116 	MOV	[LSTRET],BX
0F97 87 DA                 2117 	XCHG	DX,BX
0F99 8B 1E 50 21           2118 	MOV	BX,[RETPT]
0F9D 8A C7                 2119 	MOV	AL,BH
0F9F 0A C3                 2120 	OR	AL,BL
0FA1 74 0D                 2121 	JZ	DORET
0FA3 C6 07 01              2122 	MOV	B,[BX],1
0FA6 43                    2123 	INC	BX
0FA7 89 17                 2124 	MOV	[BX],DX
0FA9 BB 00 00              2125 	MOV	BX,0
0FAC 89 1E 50 21           2126 	MOV	[RETPT],BX
0FB0                       2127 DORET:
0FB0 58                    2128 	POP	AX
0FB1 86 E0                 2129 	XCHG	AH,AL
0FB3 9E                    2130 	SAHF
0FB4 E9 E5 FB              2131 	JMP	PUT
0FB7                       2132 
0FB7                       2133 GRP17:
0FB7 E8 E2 FB              2134 	CALL	PUT
0FBA E8 0B F4              2135 	CALL	GETOP
0FBD 3C 01                 2136 	CMP	AL,CONST
0FBF B1 14                 2137 	MOV	CL,20
0FC1 75 29                 2138 ERR9:	JNZ	ERR10
0FC3 8B 1E D6 20           2139 	MOV	BX,[DATA]
0FC7 8B 16 CA 20           2140 	MOV	DX,[PC]
0FCB 42                    2141 	INC	DX
0FCC 2B DA                 2142 	SUB	BX,DX
0FCE 89 1E D6 20           2143 	MOV	[DATA],BX
0FD2 E8 1D FC              2144 	CALL	PUTBYT
0FD5 8B 1E D8 20           2145 	MOV	BX,[DLABEL]
0FD9 8A C7                 2146 	MOV	AL,BH
0FDB 0A C3                 2147 	OR	AL,BL
0FDD 75 10                 2148 	JNZ	RET
0FDF 8B 1E D6 20           2149 	MOV	BX,[DATA]
0FE3 8A C3                 2150 	MOV	AL,BL
0FE5 98                    2151 	CBW
0FE6 3B C3                 2152 	CMP	AX,BX		;Signed 8-bit number?
0FE8 74 05                 2153 	JZ	RET
0FEA B1 1F                 2154 	MOV	CL,31
0FEC E9 C2 F2              2155 ERR10:	JMP	ERROR
0FEF C3                    2156 	RET
0FF0                       2157 GRP18:
0FF0 E8 D5 F3              2158 	CALL	GETOP
0FF3 3C 01                 2159 	CMP	AL,CONST
0FF5 B1 14                 2160 	MOV	CL,20
0FF7 75 F3                 2161 	JNZ	ERR10
0FF9 8B 1E D8 20           2162 	MOV	BX,[DLABEL]
0FFD 8A C7                 2163 	MOV	AL,BH
0FFF 0A C3                 2164 	OR	AL,BL
1001 75 10                 2165 	JNZ	GENINT
1003 8B 1E D6 20           2166 	MOV	BX,[DATA]
1007 BA 03 00              2167 	MOV	DX,3
100A 1B DA                 2168 	SBB	BX,DX
100C 75 05                 2169 	JNZ	GENINT
100E B0 CC                 2170 	MOV	AL,0CCH
1010 E9 89 FB              2171 	JMP	PUT
1013                       2172 GENINT:
1013 B0 CD                 2173 	MOV	AL,0CDH
1015 E8 84 FB              2174 	CALL	PUT
1018 E9 D7 FB              2175 	JMP	PUTBYT
101B                       2176 
101B                       2177 GRP19:	;ESC opcode
101B E8 AA F3              2178 	CALL	GETOP
101E B1 14                 2179 	MOV	CL,20
1020 3C 01                 2180 	CMP	AL,CONST
1022 75 39                 2181 	JNZ	ERRJ		;First operand must be immediate
1024 B1 1E                 2182 	MOV	CL,1EH
1026 F7 06 D8 20 FF FF     2183 	TEST	[DLABEL],-1	;See if all labels have been defined
102C 75 2F                 2184 	JNZ	ERRJ
102E A1 D6 20              2185 	MOV	AX,[DATA]
1031 3D 40 00              2186 	CMP	AX,64		;Must only be 6 bits
1034 B1 1F                 2187 	MOV	CL,1FH
1036 73 25                 2188 	JNB	ERRJ
1038 8A D8                 2189 	MOV	BL,AL		;Save for second byte
103A D0 E8                 2190 	SHR	AL
103C D0 E8                 2191 	SHR	AL
103E D0 E8                 2192 	SHR	AL
1040 0C D8                 2193 	OR	AL,0D8H		;ESC opcode
1042 E8 57 FB              2194 	CALL	PUT
1045 53                    2195 	PUSH	BX
1046 E8 76 F3              2196 	CALL	GETOP2
1049 5B                    2197 	POP	BX
104A 80 E3 07              2198 	AND	BL,7		;Low 3 bits of first operand
104D D0 E3                 2199 	SHL	BL
104F D0 E3                 2200 	SHL	BL
1051 D0 E3                 2201 	SHL	BL
1053 3C 00                 2202 	CMP	AL,UNDEFID	;Check for memory operand
1055 74 09                 2203 	JZ	ESCMEM
1057 3C 01                 2204 	CMP	AL,CONST	;Check for another immediate
1059 74 0C                 2205 	JZ	ESCIMM
105B B1 14                 2206 	MOV	CL,20
105D E9 51 F2              2207 ERRJ:	JMP	ERROR
1060                       2208 
1060                       2209 ESCMEM:
1060 0A DA                 2210 	OR	BL,DL		;Combine mode with first operand
1062 8A C3                 2211 	MOV	AL,BL
1064 E9 F5 FB              2212 	JMP	PUTADD
1067                       2213 
1067                       2214 ESCIMM:
1067 B1 1E                 2215 	MOV	CL,1EH
1069 F7 06 D8 20 FF FF     2216 	TEST	[DLABEL],-1	;See if second operand is fully defined
106F 75 EC                 2217 	JNZ	ERRJ
1071 A1 D6 20              2218 	MOV	AX,[DATA]
1074 B1 1F                 2219 	MOV	CL,1FH
1076 3D 08 00              2220 	CMP	AX,8		;Must only be 3 bit value
1079 73 E2                 2221 	JNB	ERRJ
107B 0A C3                 2222 	OR	AL,BL		;Combine first and second operands
107D 0C C0                 2223 	OR	AL,0C0H		;Force "register" mode
107F E9 1A FB              2224 	JMP	PUT
1082                       2225 
1082                       2226 GRP20:
1082 8A E8                 2227 	MOV	CH,AL
1084 B1 01                 2228 	MOV	CL,1
1086 E8 63 F2              2229 	CALL	MROPS
1089 B1 F6                 2230 	MOV	CL,0F6H
108B E8 CF FA              2231 	CALL	IMMED
108E B5 A8                 2232 	MOV	CH,0A8H
1090 E9 16 FE              2233 	JMP	AIMM
1093                       2234 GRP21:
1093 E8 32 F3              2235 	CALL	GETOP
1096 3C 04                 2236 	CMP	AL,SREG
1098 B1 1C                 2237 	MOV	CL,28
109A 75 C1                 2238 	JNZ	ERRJ
109C B5 26                 2239 	MOV	CH,26H
109E                       2240 PACKREG:
109E 8A C2                 2241 	MOV	AL,DL
10A0 02 C0                 2242 	ADD	AL,AL
10A2 02 C0                 2243 	ADD	AL,AL
10A4 02 C0                 2244 	ADD	AL,AL
10A6 0A C5                 2245 	OR	AL,CH
10A8 E9 F1 FA              2246 	JMP	PUT
10AB                       2247 GRP22:
10AB E8 1A F3              2248 	CALL	GETOP
10AE B9 00 8F              2249 	MOV	CX,8F00H
10B1 3C 00                 2250 	CMP	AL,UNDEFID
10B3 75 03                 2251 	JNZ	$+5
10B5 E9 EA FB              2252 	JMP	PMEM
10B8 B5 58                 2253 	MOV	CH,58H
10BA 3C 03                 2254 	CMP	AL,XREG
10BC 75 03                 2255 	JNZ	$+5
10BE E9 ED FB              2256 	JMP	PXREG
10C1 B5 07                 2257 	MOV	CH,7
10C3 3C 04                 2258 	CMP	AL,SREG
10C5 74 D7                 2259 	JZ	PACKREG
10C7 B1 14                 2260 	MOV	CL,20
10C9 E9 E5 F1              2261 ERR11:	JMP	ERROR
10CC                       2262 GRP23:
10CC A2 39 21              2263 	MOV	[DATSIZ],AL
10CF                       2264 GETDAT:
10CF E8 30 F5              2265 	CALL	GETSYM
10D2 B0 02                 2266 	MOV	AL,2
10D4 E8 0A F3              2267 	CALL	VAL1
10D7 A0 30 21              2268 	MOV	AL,[SYM]
10DA 3C 2C                 2269 	CMP	AL,','
10DC A0 39 21              2270 	MOV	AL,[DATSIZ]
10DF 75 05                 2271 	JNZ	ENDDAT
10E1 E8 13 00              2272 	CALL	SAVDAT
10E4 EB E9                 2273 	JP	GETDAT
10E6                       2274 ENDDAT:
10E6 3C 02                 2275 	CMP	AL,2
10E8 75 0D                 2276 	JNZ	SAVDAT
10EA 8B 1E D6 20           2277 	MOV	BX,[DATA]
10EE 9F                    2278 	LAHF
10EF 80 CB 80              2279 	OR	BL,080H
10F2 9E                    2280 	SAHF
10F3 89 1E D6 20           2281 	MOV	[DATA],BX
10F7                       2282 SAVDAT:
10F7 0A C0                 2283 	OR	AL,AL
10F9 74 03                 2284 	JZ	$+5
10FB E9 F4 FA              2285 	JMP	PUTBYT
10FE E9 EA FA              2286 	JMP	PUTWOR
1101                       2287 IF:
1101 0B DB                 2288 	OR	BX,BX
1103 74 05                 2289 	JZ	SKIPCD
1105 FE 06 4A 21           2290 	INC	B,[IFFLG]
1109 C3                    2291 	RET
110A                       2292 
110A                       2293 SKIPCD:
110A FE 06 4B 21           2294 	INC	B,[CHKLAB]
110E                       2295 SKIPLP:
110E 32 C0                 2296 	XOR	AL,AL
1110 E8 48 F1              2297 	CALL	NEXLIN
1113 E8 A0 F1              2298 	CALL	NEXTCHR
1116 3C 1A                 2299 	CMP	AL,1AH
1118 74 40                 2300 	JZ	END
111A E8 E5 F7              2301 	CALL	GETLAB
111D 72 EF                 2302 	JC	SKIPLP
111F BF DE 20              2303 	MOV	DI,LENID
1122 BE 74 20              2304 	MOV	SI,IFEND
1125 B5 00                 2305 	MOV	CH,0
1127 8A 0D                 2306 	MOV	CL,[DI]
1129 FE C1                 2307 	INC	CL
112B F3                    2308 	REPE
112C A6                    2309 	CMPB
112D 74 14                 2310 	JZ	ENDCOND
112F BF DE 20              2311 	MOV	DI,LENID
1132 BE 7A 20              2312 	MOV	SI,IFNEST
1135 8A 0D                 2313 	MOV	CL,[DI]
1137 FE C1                 2314 	INC	CL
1139 F3                    2315 	REPE
113A A6                    2316 	CMPB
113B 75 D1                 2317 	JNZ	SKIPLP
113D FE 06 4B 21           2318 	INC	B,[CHKLAB]
1141 EB CB                 2319 	JP	SKIPLP
1143                       2320 
1143                       2321 ENDCOND:
1143 FE 0E 4B 21           2322 	DEC	B,[CHKLAB]
1147 75 C5                 2323 	JNZ	SKIPLP
1149 C3                    2324 	RET
114A                       2325 
114A                       2326 ENDIF:
114A A0 4A 21              2327 	MOV	AL,[IFFLG]
114D B1 24                 2328 	MOV	CL,36
114F FE C8                 2329 	DEC	AL
1151 78 04                 2330 	JS	ERRJMP
1153 A2 4A 21              2331 	MOV	[IFFLG],AL
1156 C3                    2332 	RET
1157                       2333 
1157 E9 57 F1              2334 ERRJMP:	JMP	ERROR
115A                       2335 
115A                       2336 ;*********************************************************************
115A                       2337 ;
115A                       2338 ;	PASS 2
115A                       2339 ;
115A                       2340 ;*********************************************************************
115A                       2341 
115A                       2342 END:
115A B2 04                 2343 	MOV	DL,4
115C                       2344 WREND:
115C B5 FF                 2345 	MOV	CH,0FFH
115E 8A C5                 2346 	MOV	AL,CH
1160 E8 43 FA              2347 	CALL	GEN
1163 FE CA                 2348 	DEC	DL
1165 75 F5                 2349 	JNZ	WREND
1167 C7 06 A4 25 A6 25     2350 	MOV	[BUFPT],SRCBUF
116D C6 06 46 21 FB        2351 	MOV	B,[HEXCNT],-5	;FLAG HEX BUFFER AS EMPTY
1172 C7 06 5C 21 A4 21     2352 	MOV	[LSTPNT],LSTBUF
1178 C7 06 5A 21 5E 21     2353 	MOV	[HEXPNT],HEXBUF
117E 33 C0                 2354 	XOR	AX,AX
1180 A3 4C 21              2355 	MOV	[ERRCNT],AX
1183 A3 CA 20              2356 	MOV	[PC],AX
1186 A3 3E 21              2357 	MOV	[LINE],AX	;Current line number
1189 C7 06 42 21 00 01     2358 	MOV	[HEXADD],OBJECT
118F BA 5C 00              2359 	MOV	DX,FCB
1192 B4 0F                 2360 	MOV	AH,OPEN
1194 CD 21                 2361 	INT	33		;Re-open source file
1196 33 C0                 2362 	XOR	AX,AX
1198 A3 68 00              2363 	MOV	[FCB+12],AX	;Set CURRENT BLOCK to zero
119B A2 7C 00              2364 	MOV	[FCB+20H],AL	;Set NEXT RECORD field to zero
119E C7 06 6A 00 00 04     2365 	MOV	[FCB+14],BUFSIZ
11A4 A2 3C 21              2366 	MOV	[COUNT],AL
11A7 B5 01                 2367 	MOV	CH,1
11A9 BE A6 2A              2368 	MOV	SI,START
11AC                       2369 FIXLINE:
11AC BF A6 2A              2370 	MOV	DI,START	;Store code over used up intermediate code
11AF 32 C0                 2371 	XOR	AL,AL
11B1 A2 54 21              2372 	MOV	[SPC],AL	;No "special" yet (ORG, PUT, DS)
11B4 A2 3D 21              2373 	MOV	[ERR],AL	;No second pass errors yet
11B7                       2374 NEXBT:
11B7 D0 E1                 2375 	SHL	CL		;Shift out last bit of previous code
11B9 FE CD                 2376 	DEC	CH		;Still have codes left?
11BB 75 05                 2377 	JNZ	TESTTYP
11BD AC                    2378 	LODB			;Get next flag byte
11BE 8A C8                 2379 	MOV	CL,AL
11C0 B5 04                 2380 	MOV	CH,4
11C2                       2381 TESTTYP:
11C2 D0 E1                 2382 	SHL	CL		;Set flags based on two bits
11C4 70 06                 2383 	JO	FIXUP
11C6 AC                    2384 	LODB
11C7 72 4E                 2385 	JC	EMARK
11C9                       2386 OBJBT:
11C9 AA                    2387 	STOB
11CA EB EB                 2388 	JP	NEXBT
11CC                       2389 
11CC                       2390 FIXUP:
11CC                       2391 ;Either a word or byte fixup is needed from a forward reference
11CC AD                    2392 	LODW			;Get pointer to symbol
11CD 93                    2393 	XCHG	AX,BX
11CE AD                    2394 	LODW			;Get constant part
11CF 03 47 01              2395 	ADD	AX,[BX+1]	;Add symbol value to constant part
11D2 82 3F 00              2396 	CMP	B,[BX],0	;See if symbol got defined
11D5 75 07                 2397 	JNZ	HAVDEF
11D7 C6 06 3D 21 64        2398 	MOV	B,[ERR],100	;Undefined - flag error
11DC 33 C0                 2399 	XOR	AX,AX
11DE                       2400 HAVDEF:
11DE 0A C9                 2401 	OR	CL,CL		;See if word or byte fixup
11E0 78 03                 2402 	JS	DEFBYT
11E2 AB                    2403 	STOW
11E3 EB D2                 2404 	JP	NEXBT
11E5                       2405 
11E5                       2406 DEFBYT:
11E5 8B D0                 2407 	MOV	DX,AX
11E7 98                    2408 	CBW			;Extend sign
11E8 3B C2                 2409 	CMP	AX,DX		;See if in range +127 to -128
11EA 74 DD                 2410 	JZ	OBJBT		;If so, it's always OK
11EC F6 D4                 2411 	NOT	AH		;Check for range +255 to -256
11EE 3A E6                 2412 	CMP	AH,DH
11F0 75 1B                 2413 	JNZ	RNGERR		;Must always be in this range
11F2                       2414 ;Check for short jump. If so, we're out of range; otherwise we're OK
11F2 81 FF A7 2A           2415 	CMP	DI,START+1	;Only one other byte on line?
11F6 75 D1                 2416 	JNZ	OBJBT		;Can't be short jump if not
11F8 A0 A6 2A              2417 	MOV	AL,[START]	;Get the first byte of this line
11FB 3C EB                 2418 	CMP	AL,0EBH		;Direct short jump?
11FD 74 0E                 2419 	JZ	RNGERR
11FF 24 FC                 2420 	AND	AL,0FCH
1201 3C E0                 2421 	CMP	AL,0E0H		;LOOP or JCXZ instruction?
1203 74 08                 2422 	JZ	RNGERR
1205 24 F0                 2423 	AND	AL,0F0H
1207 3C 70                 2424 	CMP	AL,70H		;Conditional jump?
1209 8A C2                 2425 	MOV	AL,DL		;Get code byte in AL
120B 75 BC                 2426 	JNZ	OBJBT		;If not, we're OK
120D                       2427 RNGERR:
120D C6 06 3D 21 65        2428 	MOV	B,[ERR],101	;Value out of range
1212 EB B5                 2429 	JP	OBJBT
1214                       2430 
1214 E9 7A 01              2431 FINIJ:	JMP	FINI
1217                       2432 
1217                       2433 EMARK:
1217 3C FF                 2434 	CMP	AL,-1		;End of file?
1219 74 F9                 2435 	JZ	FINIJ
121B 3C F6                 2436 	CMP	AL,-10		;Special item?
121D 77 5C                 2437 	JA	SPEND
121F 51                    2438 	PUSH	CX
1220 56                    2439 	PUSH	SI
1221 50                    2440 	PUSH	AX		;Save error code
1222 8A 26 52 21           2441 	MOV	AH,[LSTDEV]
1226 80 E4 FE              2442 	AND	AH,0FEH		;Reset error indicator
1229 0A 06 3D 21           2443 	OR	AL,[ERR]	;See if any errors on this line
122D 74 03                 2444 	JZ	NOERR
122F 80 CC 01              2445 	OR	AH,1		;Send line to console if error occured
1232                       2446 NOERR:
1232 88 26 52 21           2447 	MOV	[LSTDEV],AH
1236 8B CF                 2448 	MOV	CX,DI
1238 E8 EE 00              2449 	CALL	STRTLIN		;Print address of line
123B BE A6 2A              2450 	MOV	SI,START
123E 2B CE                 2451 	SUB	CX,SI		;Get count of bytes of code
1240 74 06                 2452 	JZ	SHOLIN
1242                       2453 CODLP:
1242 AC                    2454 	LODB
1243 E8 59 02              2455 	CALL	SAVCD		;Ouput code to HEX and PRN files
1246 E2 FA                 2456 	LOOP	CODLP
1248                       2457 SHOLIN:
1248 B0 00                 2458 	MOV	AL,0
124A 86 06 3C 21           2459 	XCHG	AL,[COUNT]
124E B9 07 00              2460 	MOV	CX,7		;Allow 7 bytes of code per line
1251 2A C8                 2461 	SUB	CL,AL
1253 B0 20                 2462 	MOV	AL,' '
1255 74 0B                 2463 	JZ	NOFIL
1257                       2464 BLNK:				;Put in 3 blanks for each byte not present
1257 E8 E4 00              2465 	CALL	LIST
125A E8 E1 00              2466 	CALL	LIST
125D E8 DE 00              2467 	CALL	LIST
1260 E2 F5                 2468 	LOOP	BLNK
1262                       2469 NOFIL:
1262 E8 45 00              2470 	CALL	OUTLIN
1265 58                    2471 	POP	AX		;Restore error code
1266 E8 6C 02              2472 	CALL	REPERR
1269 A0 3D 21              2473 	MOV	AL,[ERR]
126C E8 66 02              2474 	CALL	REPERR
126F 5E                    2475 	POP	SI
1270 59                    2476 	POP	CX
1271 A0 54 21              2477 	MOV	AL,[SPC]	;Any special funtion?
1274 0A C0                 2478 	OR	AL,AL
1276 75 0D                 2479 	JNZ	SPCFUN
1278 E9 31 FF              2480 	JMP	FIXLINE
127B                       2481 
127B                       2482 SPEND:
127B A2 54 21              2483 	MOV	[SPC],AL	;Record special function
127E AD                    2484 	LODW			;Get it's data
127F A3 D6 20              2485 	MOV	[DATA],AX
1282 E9 32 FF              2486 	JMP	NEXBT
1285                       2487 
1285                       2488 SPCFUN:
1285 8B 16 D6 20           2489 	MOV	DX,[DATA]
1289 3C FE                 2490 	CMP	AL,-2
128B 74 0F                 2491 	JZ	DORG
128D 3C FD                 2492 	CMP	AL,-3
128F 74 12                 2493 	JZ	DPUT
1291                       2494 DDS:
1291                       2495 ;Handle DS pseudo-op
1291 01 16 CA 20           2496 	ADD	[PC],DX
1295 01 16 42 21           2497 	ADD	[HEXADD],DX
1299 E9 10 FF              2498 	JMP	FIXLINE
129C                       2499 
129C                       2500 DORG:
129C                       2501 ;Handle ORG pseudo-op
129C 89 16 CA 20           2502 	MOV	[PC],DX
12A0 E9 09 FF              2503 	JMP	FIXLINE
12A3                       2504 
12A3                       2505 DPUT:
12A3                       2506 ;Handle PUT pseudo-op
12A3 89 16 42 21           2507 	MOV	[HEXADD],DX
12A7 E9 02 FF              2508 	JMP	FIXLINE
12AA                       2509 
12AA                       2510 OUTLIN:
12AA                       2511 ;Copy the source line to the ouput device. Line will be preceded by
12AA                       2512 ;assembler-generated line number. This routine may be called several times
12AA                       2513 ;on one line (once for each line of object code bytes), so it sets a flag
12AA                       2514 ;so the line will only be output on the first call.
12AA B0 FF                 2515 	MOV	AL,-1
12AC 86 06 48 21           2516 	XCHG	AL,[LINFLG]
12B0 0A C0                 2517 	OR	AL,AL
12B2 75 33                 2518 	JNZ	CRLF		;Output line only if first time
12B4 A1 3E 21              2519 	MOV	AX,[LINE]
12B7 40                    2520 	INC	AX
12B8 A3 3E 21              2521 	MOV	[LINE],AX
12BB B7 00                 2522 	MOV	BH,0		;No leading zero suppression
12BD E8 30 00              2523 	CALL	OUT10
12C0 B0 20                 2524 	MOV	AL," "
12C2 E8 79 00              2525 	CALL	LIST
12C5 A0 A5 20              2526 	MOV	AL,[LSTFCB]
12C8 3C 5A                 2527 	CMP	AL,'Z'
12CA 74 1B                 2528 	JZ	CRLF		;Don't call NEXTCHR if listing suppressed
12CC 56                    2529 	PUSH	SI		;Save the only register destroyed by NEXTCHR
12CD                       2530 OUTLN:
12CD E8 E6 EF              2531 	CALL	NEXTCHR
12D0 E8 6B 00              2532 	CALL	LIST
12D3 3C 0A                 2533 	CMP	AL,10		;Output until linefeed found
12D5 75 F6                 2534 	JNZ	OUTLN
12D7 5E                    2535 	POP	SI
12D8 C3                    2536 	RET
12D9                       2537 
12D9                       2538 PRTCNT:
12D9 BB 4C 20              2539 	MOV	BX,ERCNTM
12DC E8 25 02              2540 	CALL	PRINT
12DF A1 4C 21              2541 	MOV	AX,[ERRCNT]
12E2 B7 10                 2542 	MOV	BH,"0"-" "	;Enable leading zero suppression
12E4 E8 09 00              2543 	CALL	OUT10
12E7                       2544 CRLF:
12E7 B0 0D                 2545 	MOV	AL,13
12E9 E8 52 00              2546 	CALL	LIST
12EC B0 0A                 2547 	MOV	AL,10
12EE EB 4E                 2548 	JP	LIST
12F0                       2549 
12F0                       2550 OUT10:
12F0 33 D2                 2551 	XOR	DX,DX
12F2 BF 10 27              2552 	MOV	DI,10000
12F5 F7 F7                 2553 	DIV	AX,DI
12F7 0A C0                 2554 	OR	AL,AL		;>10,000?
12F9 75 02                 2555 	JNZ	LEAD
12FB 2C 10                 2556 	SUB	AL,"0"-" "	;Convert leading zero to blank
12FD                       2557 LEAD:
12FD 04 30                 2558 	ADD	AL,"0"
12FF E8 3C 00              2559 	CALL	LIST
1302 92                    2560 	XCHG	AX,DX
1303 B3 64                 2561 	MOV	BL,100
1305 F6 F3                 2562 	DIV	AL,BL
1307 8A DC                 2563 	MOV	BL,AH
1309 E8 0C 00              2564 	CALL	HIDIG		;Convert to decimal and print 1000s digit
130C E8 0E 00              2565 	CALL	DIGIT		;Print 100s digit
130F 8A C3                 2566 	MOV	AL,BL
1311 E8 04 00              2567 	CALL	HIDIG		;Convert to decimal and print 10s digit
1314 B7 00                 2568 	MOV	BH,0		;Ensure leading zero suppression is off
1316 EB 05                 2569 	JP	DIGIT
1318                       2570 
1318                       2571 HIDIG:
1318 D4 0A                 2572 	AAM			;Convert binary to unpacked BCD
131A 0D 30 30              2573 	OR	AX,3030H	;Add "0" bias
131D                       2574 DIGIT:
131D 86 C4                 2575 	XCHG	AL,AH
131F 3C 30                 2576 	CMP	AL,"0"
1321 74 02                 2577 	JZ	SUPZ
1323 B7 00                 2578 	MOV	BH,0		;Turn off zero suppression if not zero
1325                       2579 SUPZ:
1325 2A C7                 2580 	SUB	AL,BH		;Convert leading zeros to blanks
1327 EB 15                 2581 	JP	LIST
1329                       2582 
1329                       2583 STRTLIN:
1329 C6 06 48 21 00        2584 	MOV	B,[LINFLG],0
132E 8B 1E CA 20           2585 	MOV	BX,[PC]
1332 8A C7                 2586 	MOV	AL,BH
1334 E8 4D 00              2587 	CALL	PHEX
1337 8A C3                 2588 	MOV	AL,BL
1339                       2589 PHEXB:
1339 E8 48 00              2590 	CALL	PHEX
133C B0 20                 2591 	MOV	AL,' '
133E                       2592 LIST:
133E 50                    2593 	PUSH	AX
133F 52                    2594 	PUSH	DX
1340 24 7F                 2595 	AND	AL,7FH
1342 8A D0                 2596 	MOV	DL,AL
1344 F6 06 52 21 03        2597 	TEST	B,[LSTDEV],3	;See if output goes to console
1349 74 04                 2598 	JZ	PRNCHK
134B B4 02                 2599 	MOV	AH,2
134D CD 21                 2600 	INT	33		;Output to console
134F                       2601 PRNCHK:
134F F6 06 52 21 04        2602 	TEST	B,[LSTDEV],4	;See if output goes to printer
1354 74 04                 2603 	JZ	FILCHK
1356 B4 05                 2604 	MOV	AH,5
1358 CD 21                 2605 	INT	33		;Output to printer
135A                       2606 FILCHK:
135A 8A C2                 2607 	MOV	AL,DL
135C 5A                    2608 	POP	DX
135D F6 06 52 21 80        2609 	TEST	B,[LSTDEV],80H	;See if output goes to a file
1362 74 03                 2610 	JZ	LISTRET
1364 E8 02 00              2611 	CALL	WRTBUF
1367                       2612 LISTRET:
1367 58                    2613 	POP	AX
1368 C3                    2614 	RET
1369                       2615 
1369                       2616 WRTBUF:
1369 57                    2617 	PUSH	DI
136A 8B 3E 5C 21           2618 	MOV	DI,[LSTPNT]
136E AA                    2619 	STOB
136F 81 FF A4 25           2620 	CMP	DI,LSTBUF+LSTBUFSIZ
1373 75 09                 2621 	JNZ	SAVPT
1375 50                    2622 	PUSH	AX
1376 51                    2623 	PUSH	CX
1377 52                    2624 	PUSH	DX
1378 E8 61 02              2625 	CALL	FLUSHBUF
137B 5A                    2626 	POP	DX
137C 59                    2627 	POP	CX
137D 58                    2628 	POP	AX
137E                       2629 SAVPT:
137E 89 3E 5C 21           2630 	MOV	[LSTPNT],DI
1382 5F                    2631 	POP	DI
1383 C3                    2632 	RET
1384                       2633 
1384                       2634 PHEX:
1384 50                    2635 	PUSH	AX
1385 E8 74 02              2636 	CALL	UHALF
1388 E8 B3 FF              2637 	CALL	LIST
138B 58                    2638 	POP	AX
138C E8 75 02              2639 	CALL	LHALF
138F EB AD                 2640 	JP	LIST
1391                       2641 
1391                       2642 FINI:
1391 80 0E 52 21 01        2643 	OR	B,[LSTDEV],1
1396 E8 40 FF              2644 	CALL	PRTCNT
1399 80 26 52 21 FE        2645 	AND	B,[LSTDEV],0FEH
139E A0 80 20              2646 	MOV	AL,[HEXFCB]
13A1 3C 5A                 2647 	CMP	AL,'Z'
13A3 74 35                 2648 	JZ	SYMDMP
13A5 A0 46 21              2649 	MOV	AL,[HEXCNT]
13A8 3C FB                 2650 	CMP	AL,-5
13AA 74 03                 2651 	JZ	L0012
13AC E8 DF 01              2652 	CALL	ENHEXL
13AF                       2653 L0012:	
13AF B0 3A                 2654 	MOV	AL,':'
13B1 E8 1E 02              2655 	CALL	PUTCHR
13B4 B5 0A                 2656 	MOV	CH,10
13B6                       2657 HEXEND:
13B6 51                    2658 	PUSH	CX
13B7 B0 30                 2659 	MOV	AL,'0'
13B9 E8 16 02              2660 	CALL	PUTCHR
13BC 59                    2661 	POP	CX
13BD FE CD                 2662 	DEC	CH
13BF 75 F5                 2663 	JNZ	HEXEND
13C1 B0 0D                 2664 	MOV	AL,13
13C3 E8 0C 02              2665 	CALL	PUTCHR
13C6 B0 0A                 2666 	MOV	AL,10
13C8 E8 07 02              2667 	CALL	PUTCHR
13CB B0 1A                 2668 	MOV	AL,1AH
13CD E8 02 02              2669 	CALL	PUTCHR
13D0 E8 E4 01              2670 	CALL	WRTHEX		;Flush HEX file buffer
13D3 BA 80 20              2671 	MOV	DX,HEXFCB
13D6 B4 10                 2672 	MOV	AH,CLOSE
13D8 CD 21                 2673 	INT	33
13DA                       2674 SYMDMP:
13DA A0 35 21              2675 	MOV	AL,[SYMFLG]
13DD 3C 53                 2676 	CMP	AL,'S'
13DF 75 2A                 2677 	JNZ	ENDSYM
13E1 A0 52 21              2678 	MOV	AL,[LSTDEV]
13E4 0A C0                 2679 	OR	AL,AL		;Any output device for symbol table dump?
13E6 75 05                 2680 	JNZ	DOSYMTAB
13E8 0C 01                 2681 	OR	AL,1		;If not, send it to console
13EA A2 52 21              2682 	MOV	[LSTDEV],AL
13ED                       2683 DOSYMTAB:
13ED BB 5D 20              2684 	MOV	BX,SYMMES
13F0 E8 11 01              2685 	CALL	PRINT
13F3 8B 16 31 21           2686 	MOV	DX,[BASE]
13F7 8A C6                 2687 	MOV	AL,DH
13F9 0A C2                 2688 	OR	AL,DL
13FB 74 0E                 2689 	JZ	ENDSYM
13FD C6 06 36 21 05        2690 	MOV	B,[SYMLIN],SYMWID  ;No symbols on this line yet
1402 8B 1E 33 21           2691 	MOV	BX,[HEAP]
1406 8B E3                 2692 	MOV	SP,BX		;Need maximum stack for recursive tree walk
1408 E8 1A 00              2693 	CALL	NODE
140B                       2694 ENDSYM:
140B F6 06 52 21 80        2695 	TEST	B,[LSTDEV],80H	;Print listing to file?
1410 74 10                 2696 	JZ	EXIT
1412 B0 1A                 2697 	MOV	AL,1AH
1414 E8 52 FF              2698 	CALL	WRTBUF		;Write end-of-file mark
1417 8B 3E 5C 21           2699 	MOV	DI,[LSTPNT]
141B E8 BE 01              2700 	CALL	FLUSHBUF
141E B4 10                 2701 	MOV	AH,CLOSE
1420 CD 21                 2702 	INT	33
1422 E9 DB EB              2703 EXIT:	JMP	0
1425                       2704 
1425                       2705 NODE:
1425 87 DA                 2706 	XCHG	DX,BX
1427 53                    2707 	PUSH	BX
1428 8A 17                 2708 	MOV	DL,[BX]
142A B6 00                 2709 	MOV	DH,0
142C 43                    2710 	INC	BX
142D 03 DA                 2711 	ADD	BX,DX
142F 8B 17                 2712 	MOV	DX,[BX]
1431 0B D2                 2713 	OR	DX,DX
1433 74 03                 2714 	JZ	L0014
1435 E8 ED FF              2715 	CALL	NODE
1438                       2716 L0014:	
1438 5B                    2717 	POP	BX
1439 8A 07                 2718 	MOV	AL,[BX]
143B 43                    2719 	INC	BX
143C 8A E8                 2720 	MOV	CH,AL
143E 04 18                 2721 	ADD	AL,24
1440 D0 E8                 2722 	SHR	AL
1442 D0 E8                 2723 	SHR	AL
1444 D0 E8                 2724 	SHR	AL
1446 8A C8                 2725 	MOV	CL,AL
1448 FE C1                 2726 	INC	CL		;Invert last bit
144A 80 E1 01              2727 	AND	CL,1		;Number of extra tabs needed (0 or 1)
144D D0 E8                 2728 	SHR	AL		;Number of positions wide this symbol needs
144F 28 06 36 21           2729 	SUB	[SYMLIN],AL
1453 73 0A                 2730 	JNC	WRTSYM		;Will it fit?
1455 2C 05                 2731 	SUB	AL,SYMWID
1457 F6 D8                 2732 	NEG	AL
1459 A2 36 21              2733 	MOV	[SYMLIN],AL
145C E8 88 FE              2734 	CALL	CRLF		;Start new line if not
145F                       2735 WRTSYM:
145F 8A 07                 2736 	MOV	AL,[BX]
1461 43                    2737 	INC	BX
1462 E8 D9 FE              2738 	CALL	LIST
1465 FE CD                 2739 	DEC	CH
1467 75 F6                 2740 	JNZ	WRTSYM
1469 FE C1                 2741 	INC	CL
146B                       2742 TABVAL:
146B B0 09                 2743 	MOV	AL,9
146D E8 CE FE              2744 	CALL	LIST
1470 E2 F9                 2745 	LOOP	TABVAL
1472 43                    2746 	INC	BX
1473 43                    2747 	INC	BX
1474 53                    2748 	PUSH	BX
1475 8A 47 04              2749 	MOV	AL,[BX+4]
1478 E8 09 FF              2750 	CALL	PHEX
147B 8A 47 03              2751 	MOV	AL,[BX+3]
147E E8 03 FF              2752 	CALL	PHEX
1481 82 3E 36 21 00        2753 	CMP	B,[SYMLIN],0	;Will any more fit on line?
1486 74 07                 2754 	JZ	NEXSYMLIN
1488 B0 09                 2755 	MOV	AL,9
148A E8 B1 FE              2756 	CALL	LIST
148D EB 08                 2757 	JP	RIGHTSON
148F                       2758 NEXSYMLIN:
148F E8 55 FE              2759 	CALL	CRLF
1492 C6 06 36 21 05        2760 	MOV	B,[SYMLIN],SYMWID
1497                       2761 RIGHTSON:
1497 5B                    2762 	POP	BX
1498 8B 17                 2763 	MOV	DX,[BX]
149A 0B D2                 2764 	OR	DX,DX
149C 75 87                 2765 	JNZ	NODE
149E C3                    2766 	RET
149F                       2767 
149F                       2768 SAVCD:
149F A2 49 21              2769 	MOV	[PREV],AL
14A2 53                    2770 	PUSH	BX
14A3 51                    2771 	PUSH	CX
14A4 50                    2772 	PUSH	AX
14A5 52                    2773 	PUSH	DX
14A6 E8 72 00              2774 	CALL	CODBYT
14A9 5A                    2775 	POP	DX
14AA BB 3C 21              2776 	MOV	BX,COUNT
14AD FE 07                 2777 	INC	B,[BX]
14AF 8A 07                 2778 	MOV	AL,[BX]
14B1 3C 08                 2779 	CMP	AL,8
14B3 75 11                 2780 	JNZ	NOEXT
14B5 C6 07 01              2781 	MOV	B,[BX],1
14B8 E8 EF FD              2782 	CALL	OUTLIN
14BB B0 20                 2783 	MOV	AL,' '
14BD B5 05                 2784 	MOV	CH,5
14BF                       2785 TAB:
14BF E8 7C FE              2786 	CALL	LIST
14C2 FE CD                 2787 	DEC	CH
14C4 75 F9                 2788 	JNZ	TAB
14C6                       2789 NOEXT:
14C6 58                    2790 	POP	AX
14C7 E8 6F FE              2791 	CALL	PHEXB
14CA 59                    2792 	POP	CX
14CB FF 06 CA 20           2793 	INC	[PC]
14CF FF 06 42 21           2794 	INC	[HEXADD]
14D3 5B                    2795 	POP	BX
14D4 C3                    2796 	RET
14D5                       2797 
14D5                       2798 REPERR:
14D5 0A C0                 2799 	OR	AL,AL		;Did an error occur?
14D7 74 FB                 2800 	JZ	RET
14D9 FF 06 4C 21           2801 	INC	[ERRCNT]
14DD 50                    2802 	PUSH	AX
14DE BB D6 1F              2803 	MOV	BX,ERRMES	;Print "ERROR"
14E1 E8 20 00              2804 	CALL	PRINT
14E4 58                    2805 	POP	AX
14E5                       2806 ;We have error number in AL. See if there's an error message for it
14E5 BF 08 1C              2807 	MOV	DI,ERRTAB
14E8 B3 80                 2808 	MOV	BL,80H
14EA                       2809 ERRLOOK:
14EA AE                    2810 	SCASB			;Do we have the error message
14EB 76 07                 2811 	JBE	HAVMES		;Quit looking if we have it or passed it
14ED 93                    2812 	XCHG	AX,BX		;Put 80H in AL to look for end of this message
14EE                       2813 NEXTMES:
14EE AE                    2814 	SCASB			;Look for high bit set in message
14EF 77 FD                 2815 	JA	NEXTMES		;   which means we've reached the end
14F1 93                    2816 	XCHG	AX,BX		;Restore error number to AL
14F2 EB F6                 2817 	JMPS	ERRLOOK		;Keep looking
14F4                       2818 
14F4                       2819 HAVMES:
14F4 8B DF                 2820 	MOV	BX,DI		;Put address of message in BX
14F6 74 06                 2821 	JZ	PRNERR		;Do we have a message for this error?
14F8 E8 89 FE              2822 	CALL	PHEX		;If not, just print error number
14FB E9 E9 FD              2823 	JMP	CRLF
14FE                       2824 
14FE                       2825 PRNERR:
14FE E8 03 00              2826 	CALL	PRINT
1501 E9 E3 FD              2827 	JMP	CRLF
1504                       2828 
1504                       2829 PRINT:
1504 8A 07                 2830 	MOV	AL,[BX]
1506 E8 35 FE              2831 	CALL	LIST
1509 0A C0                 2832 	OR	AL,AL
150B 78 C7                 2833 	JS	RET
150D 43                    2834 	INC	BX
150E EB F4                 2835 	JP	PRINT
1510                       2836 
1510                       2837 OUTA:
1510 8A D0                 2838 	MOV	DL,AL
1512                       2839 OUT:
1512 80 E2 7F              2840 	AND	DL,7FH
1515 B1 02                 2841 	MOV	CL,2
1517                       2842 SYSTEM:
1517 E8 EB EA              2843 	CALL	5
151A C3                    2844 	RET
151B                       2845 
151B                       2846 CODBYT:
151B 82 3E 80 20 5A        2847 	CMP	B,[HEXFCB],"Z"
1520 74 F8                 2848 	JZ	RET
1522 50                    2849 	PUSH	AX
1523 8B 16 44 21           2850 	MOV	DX,[LASTAD]
1527 8B 1E 42 21           2851 	MOV	BX,[HEXADD]
152B 89 1E 44 21           2852 	MOV	[LASTAD],BX
152F 42                    2853 	INC	DX
1530 A0 46 21              2854 	MOV	AL,[HEXCNT]
1533 3C FB                 2855 	CMP	AL,-5
1535 74 07                 2856 	JZ	NEWLIN
1537 3B DA                 2857 	CMP	BX,DX
1539 74 2E                 2858 	JZ	AFHEX
153B E8 50 00              2859 	CALL	ENHEXL
153E                       2860 NEWLIN:
153E B0 3A                 2861 	MOV	AL,':'
1540 E8 8F 00              2862 	CALL	PUTCHR
1543 B0 FC                 2863 	MOV	AL,-4
1545 A2 46 21              2864 	MOV	[HEXCNT],AL
1548 32 C0                 2865 	XOR	AL,AL
154A A2 47 21              2866 	MOV	[CHKSUM],AL
154D 8B 1E 5A 21           2867 	MOV	BX,[HEXPNT]
1551 89 1E 40 21           2868 	MOV	[HEXLEN],BX
1555 E8 12 00              2869 	CALL	HEXBYT
1558 A0 43 21              2870 	MOV	AL,[HEXADD+1]
155B E8 0C 00              2871 	CALL	HEXBYT
155E A0 42 21              2872 	MOV	AL,[HEXADD]
1561 E8 06 00              2873 	CALL	HEXBYT
1564 32 C0                 2874 	XOR	AL,AL
1566 E8 01 00              2875 	CALL	HEXBYT
1569                       2876 AFHEX:
1569 58                    2877 	POP	AX
156A                       2878 HEXBYT:
156A 8A E8                 2879 	MOV	CH,AL
156C BB 47 21              2880 	MOV	BX,CHKSUM
156F 02 07                 2881 	ADD	AL,[BX]
1571 88 07                 2882 	MOV	[BX],AL
1573 8A C5                 2883 	MOV	AL,CH
1575 E8 84 00              2884 	CALL	UHALF
1578 E8 57 00              2885 	CALL	PUTCHR
157B 8A C5                 2886 	MOV	AL,CH
157D E8 84 00              2887 	CALL	LHALF
1580 E8 4F 00              2888 	CALL	PUTCHR
1583 BB 46 21              2889 	MOV	BX,HEXCNT
1586 FE 07                 2890 	INC	B,[BX]
1588 8A 07                 2891 	MOV	AL,[BX]
158A 3C 1A                 2892 	CMP	AL,26
158C 75 8C                 2893 	JNZ	RET
158E                       2894 ENHEXL:
158E 8B 3E 40 21           2895 	MOV	DI,[HEXLEN]
1592 8A E8                 2896 	MOV	CH,AL
1594 E8 65 00              2897 	CALL	UHALF
1597 AA                    2898 	STOB
1598 8A C5                 2899 	MOV	AL,CH
159A E8 67 00              2900 	CALL	LHALF
159D AA                    2901 	STOB
159E B0 FA                 2902 	MOV	AL,-6
15A0 A2 46 21              2903 	MOV	[HEXCNT],AL
15A3 A0 47 21              2904 	MOV	AL,[CHKSUM]
15A6 02 C5                 2905 	ADD	AL,CH
15A8 F6 D8                 2906 	NEG	AL
15AA E8 BD FF              2907 	CALL	HEXBYT
15AD B0 0D                 2908 	MOV	AL,13
15AF E8 20 00              2909 	CALL	PUTCHR
15B2 B0 0A                 2910 	MOV	AL,10
15B4 E8 1B 00              2911 	CALL	PUTCHR
15B7                       2912 WRTHEX:
15B7                       2913 ;Write out the line
15B7 BA 5E 21              2914 	MOV	DX,HEXBUF
15BA 89 16 5A 21           2915 	MOV	[HEXPNT],DX
15BE B4 1A                 2916 	MOV	AH,SETDMA
15C0 CD 21                 2917 	INT	33
15C2 2B FA                 2918 	SUB	DI,DX		;Length of buffer
15C4 8B CF                 2919 	MOV	CX,DI
15C6 BA 80 20              2920 	MOV	DX,HEXFCB
15C9 B4 28                 2921 	MOV	AH,BLKWRT
15CB CD 21                 2922 	INT	33
15CD 0A C0                 2923 	OR	AL,AL
15CF 75 25                 2924 	JNZ	DSKFUL
15D1 C3                    2925 	RET
15D2                       2926 
15D2                       2927 PUTCHR:
15D2 8B 3E 5A 21           2928 	MOV	DI,[HEXPNT]
15D6 AA                    2929 	STOB
15D7 89 3E 5A 21           2930 	MOV	[HEXPNT],DI
15DB C3                    2931 	RET
15DC                       2932 
15DC                       2933 FLUSHBUF:
15DC 8B CF                 2934 	MOV	CX,DI
15DE BA A4 21              2935 	MOV	DX,LSTBUF
15E1 8B FA                 2936 	MOV	DI,DX
15E3 2B CA                 2937 	SUB	CX,DX
15E5 74 F4                 2938 	JZ	RET		;Buffer empty?
15E7 B4 1A                 2939 	MOV	AH,SETDMA
15E9 CD 21                 2940 	INT	33
15EB BA A5 20              2941 	MOV	DX,LSTFCB
15EE B4 28                 2942 	MOV	AH,BLKWRT
15F0 CD 21                 2943 	INT	33
15F2 0A C0                 2944 	OR	AL,AL
15F4 74 E5                 2945 	JZ	RET
15F6                       2946 DSKFUL:
15F6 BB 27 20              2947 	MOV	BX,WRTERR
15F9 E9 7A EC              2948 	JMP	PRERR
15FC                       2949 
15FC                       2950 UHALF:
15FC D0 D8                 2951 	RCR	AL
15FE D0 D8                 2952 	RCR	AL
1600 D0 D8                 2953 	RCR	AL
1602 D0 D8                 2954 	RCR	AL
1604                       2955 LHALF:
1604 24 0F                 2956 	AND	AL,0FH
1606 0C 30                 2957 	OR	AL,30H
1608 3C 3A                 2958 	CMP	AL,'9'+1
160A 72 CF                 2959 	JC	RET
160C 04 07                 2960 	ADD	AL,7
160E C3                    2961 	RET
160F                       2962 
160F 00                    2963 NONE:	DB	0
1610                       2964 
1610                       2965 ; 8086 MNEMONIC TABLE
1610                       2966 
1610                       2967 ; This table is actually a sequence of subtables, each starting with a label.
1610                       2968 ; The label signifies which mnemonics the subtable applies to--A3, for example,
1610                       2969 ; means all 3-letter mnemonics beginning with A.
1610                       2970 
1610                       2971 A3:
1610 07                    2972 	DB	7
1611 64 64                 2973 	DB	'dd'
1613 C1 0D                 2974 	DW	GRP7
1615 02                    2975 	DB	2
1616 6E 64                 2976 	DB	'nd'
1618 97 0E                 2977 	DW	GRP13
161A 22                    2978 	DB	22H
161B 64 63                 2979 	DB	'dc'
161D C1 0D                 2980 	DW	GRP7
161F 12                    2981 	DB	12H
1620 61 61                 2982 	DB	'aa'
1622 9C 0B                 2983 	DW	PUT
1624 37                    2984 	DB	37H
1625 61 73                 2985 	DB	'as'
1627 9C 0B                 2986 	DW	PUT
1629 3F                    2987 	DB	3FH
162A 61 6D                 2988 	DB	'am'
162C 65 0E                 2989 	DW	GRP11
162E D4                    2990 	DB	0D4H
162F 61 64                 2991 	DB	'ad'
1631 65 0E                 2992 	DW	GRP11
1633 D5                    2993 	DB	0D5H
1634                       2994 A5:
1634 01                    2995 	DB	1
1635 6C 69 67 6E           2996 	DB	'lign'
1639 6D 0D                 2997 	DW	ALIGN
163B 00                    2998 	DB	0
163C                       2999 C3:
163C 07                    3000 	DB	7
163D 6D 70                 3001 	DB	'mp'
163F C1 0D                 3002 	DW	GRP7
1641 3A                    3003 	DB	3AH
1642 6C 63                 3004 	DB	'lc'
1644 9C 0B                 3005 	DW	PUT
1646 F8                    3006 	DB	0F8H
1647 6C 64                 3007 	DB	'ld'
1649 9C 0B                 3008 	DW	PUT
164B FC                    3009 	DB	0FCH
164C 6C 69                 3010 	DB	'li'
164E 9C 0B                 3011 	DW	PUT
1650 FA                    3012 	DB	0FAH
1651 6D 63                 3013 	DB	'mc'
1653 9C 0B                 3014 	DW	PUT
1655 F5                    3015 	DB	0F5H
1656 62 77                 3016 	DB	'bw'
1658 9C 0B                 3017 	DW	PUT
165A 98                    3018 	DB	98H
165B 77 64                 3019 	DB	'wd'
165D 9C 0B                 3020 	DW	PUT
165F 99                    3021 	DB	99H
1660                       3022 C4:
1660 03                    3023 	DB	3
1661 61 6C 6C              3024 	DB	'all'
1664 C1 0E                 3025 	DW	GRP14
1666 9A                    3026 	DB	9AH
1667 6D 70 62              3027 	DB	'mpb'
166A 9C 0B                 3028 	DW	PUT
166C A6                    3029 	DB	0A6H
166D 6D 70 77              3030 	DB	'mpw'
1670 9C 0B                 3031 	DW	PUT
1672 A7                    3032 	DB	0A7H
1673                       3033 C5:
1673 02                    3034 	DB	2
1674 6D 70 73 62           3035 	DB	'mpsb'
1678 9C 0B                 3036 	DW	PUT
167A A6                    3037 	DB	0A6H
167B 6D 70 73 77           3038 	DB	'mpsw'
167F 9C 0B                 3039 	DW	PUT
1681 A7                    3040 	DB	0A7H
1682                       3041 D2:
1682 05                    3042 	DB	5
1683 62                    3043 	DB	'b'
1684 CC 10                 3044 	DW	GRP23
1686 01                    3045 	DB	1
1687 77                    3046 	DB	'w'
1688 CC 10                 3047 	DW	GRP23
168A 00                    3048 	DB	0
168B 6D                    3049 	DB	'm'
168C CC 10                 3050 	DW	GRP23
168E 02                    3051 	DB	2
168F 73                    3052 	DB	's'
1690 3B 0D                 3053 	DW	GRP5
1692 01                    3054 	DB	1
1693 69                    3055 	DB	'i'
1694 9C 0B                 3056 	DW	PUT
1696 FA                    3057 	DB	0FAH
1697                       3058 D3:
1697 04                    3059 	DB	4
1698 65 63                 3060 	DB	'ec'
169A E9 0D                 3061 	DW	GRP8
169C 49                    3062 	DB	49H
169D 69 76                 3063 	DB	'iv'
169F 3D 0E                 3064 	DW	GRP10
16A1 30                    3065 	DB	30H
16A2 61 61                 3066 	DB	'aa'
16A4 9C 0B                 3067 	DW	PUT
16A6 27                    3068 	DB	27H
16A7 61 73                 3069 	DB	'as'
16A9 9C 0B                 3070 	DW	PUT
16AB 2F                    3071 	DB	2FH
16AC                       3072 D4:
16AC 01                    3073 	DB	1
16AD 6F 77 6E              3074 	DB	'own'
16B0 9C 0B                 3075 	DW	PUT
16B2 FD                    3076 	DB	0FDH
16B3                       3077 E2:
16B3 01                    3078 	DB	1
16B4 69                    3079 	DB	'i'
16B5 9C 0B                 3080 	DW	PUT
16B7 FB                    3081 	DB	0FBH
16B8                       3082 E3:
16B8 03                    3083 	DB	3
16B9 71 75                 3084 	DB	'qu'
16BB 3B 0D                 3085 	DW	GRP5
16BD 02                    3086 	DB	2
16BE 73 63                 3087 	DB	'sc'
16C0 1B 10                 3088 	DW	GRP19
16C2 D8                    3089 	DB	0D8H
16C3 6E 64                 3090 	DB	'nd'
16C5 5A 11                 3091 	DW	END
16C7 00                    3092 	DB	0
16C8                       3093 E5:
16C8 01                    3094 	DB	1
16C9 6E 64 69 66           3095 	DB	'ndif'
16CD 4A 11                 3096 	DW	ENDIF
16CF 00                    3097 	DB	0
16D0                       3098 H3:
16D0 01                    3099 	DB	1
16D1 6C 74                 3100 	DB	'lt'
16D3 9C 0B                 3101 	DW	PUT
16D5 F4                    3102 	DB	0F4H
16D6                       3103 H4:
16D6 01                    3104 	DB	1
16D7 61 6C 74              3105 	DB	'alt'
16DA 9C 0B                 3106 	DW	PUT
16DC F4                    3107 	DB	0F4H
16DD                       3108 I2:
16DD 02                    3109 	DB	2
16DE 6E                    3110 	DB	'n'
16DF 15 0D                 3111 	DW	GRP4
16E1 E4                    3112 	DB	0E4H
16E2 66                    3113 	DB	'f'
16E3 3B 0D                 3114 	DW	GRP5
16E5 04                    3115 	DB	4
16E6                       3116 I3:
16E6 04                    3117 	DB	4
16E7 6E 63                 3118 	DB	'nc'
16E9 E9 0D                 3119 	DW	GRP8
16EB 41                    3120 	DB	41H
16EC 6E 62                 3121 	DB	'nb'
16EE 15 0D                 3122 	DW	GRP4
16F0 E4                    3123 	DB	0E4H
16F1 6E 77                 3124 	DB	'nw'
16F3 15 0D                 3125 	DW	GRP4
16F5 E5                    3126 	DB	0E5H
16F6 6E 74                 3127 	DB	'nt'
16F8 F0 0F                 3128 	DW	GRP18
16FA CC                    3129 	DB	0CCH
16FB                       3130 I4:
16FB 04                    3131 	DB	4
16FC 6D 75 6C              3132 	DB	'mul'
16FF 3D 0E                 3133 	DW	GRP10
1701 28                    3134 	DB	28H
1702 64 69 76              3135 	DB	'div'
1705 3D 0E                 3136 	DW	GRP10
1707 38                    3137 	DB	38H
1708 72 65 74              3138 	DB	'ret'
170B 9C 0B                 3139 	DW	PUT
170D CF                    3140 	DB	0CFH
170E 6E 74 6F              3141 	DB	'nto'
1711 9C 0B                 3142 	DW	PUT
1713 CE                    3143 	DB	0CEH
1714                       3144 J2:
1714 0A                    3145 	DB	10
1715 70                    3146 	DB	'p'
1716 B7 0F                 3147 	DW	GRP17
1718 EB                    3148 	DB	0EBH
1719 7A                    3149 	DB	'z'
171A B7 0F                 3150 	DW	GRP17
171C 74                    3151 	DB	74H
171D 65                    3152 	DB	'e'
171E B7 0F                 3153 	DW	GRP17
1720 74                    3154 	DB	74H
1721 6C                    3155 	DB	'l'
1722 B7 0F                 3156 	DW	GRP17
1724 7C                    3157 	DB	7CH
1725 62                    3158 	DB	'b'
1726 B7 0F                 3159 	DW	GRP17
1728 72                    3160 	DB	72H
1729 61                    3161 	DB	'a'
172A B7 0F                 3162 	DW	GRP17
172C 77                    3163 	DB	77H
172D 67                    3164 	DB	'g'
172E B7 0F                 3165 	DW	GRP17
1730 7F                    3166 	DB	7FH
1731 6F                    3167 	DB	'o'
1732 B7 0F                 3168 	DW	GRP17
1734 70                    3169 	DB	70H
1735 73                    3170 	DB	's'
1736 B7 0F                 3171 	DW	GRP17
1738 78                    3172 	DB	78H
1739 63                    3173 	DB	'c'
173A B7 0F                 3174 	DW	GRP17
173C 72                    3175 	DB	72H
173D                       3176 J3:
173D 11                    3177 	DB	17
173E 6D 70                 3178 	DB	'mp'
1740 C1 0E                 3179 	DW	GRP14
1742 EA                    3180 	DB	0EAH
1743 6E 7A                 3181 	DB	'nz'
1745 B7 0F                 3182 	DW	GRP17
1747 75                    3183 	DB	75H
1748 6E 65                 3184 	DB	'ne'
174A B7 0F                 3185 	DW	GRP17
174C 75                    3186 	DB	75H
174D 6E 6C                 3187 	DB	'nl'
174F B7 0F                 3188 	DW	GRP17
1751 7D                    3189 	DB	7DH
1752 67 65                 3190 	DB	'ge'
1754 B7 0F                 3191 	DW	GRP17
1756 7D                    3192 	DB	7DH
1757 6E 62                 3193 	DB	'nb'
1759 B7 0F                 3194 	DW	GRP17
175B 73                    3195 	DB	73H
175C 61 65                 3196 	DB	'ae'
175E B7 0F                 3197 	DW	GRP17
1760 73                    3198 	DB	73H
1761 6E 63                 3199 	DB	'nc'
1763 B7 0F                 3200 	DW	GRP17
1765 73                    3201 	DB	73H
1766 6E 67                 3202 	DB	'ng'
1768 B7 0F                 3203 	DW	GRP17
176A 7E                    3204 	DB	7EH
176B 6C 65                 3205 	DB	'le'
176D B7 0F                 3206 	DW	GRP17
176F 7E                    3207 	DB	7EH
1770 6E 61                 3208 	DB	'na'
1772 B7 0F                 3209 	DW	GRP17
1774 76                    3210 	DB	76H
1775 62 65                 3211 	DB	'be'
1777 B7 0F                 3212 	DW	GRP17
1779 76                    3213 	DB	76H
177A 70 65                 3214 	DB	'pe'
177C B7 0F                 3215 	DW	GRP17
177E 7A                    3216 	DB	7AH
177F 6E 70                 3217 	DB	'np'
1781 B7 0F                 3218 	DW	GRP17
1783 7B                    3219 	DB	7BH
1784 70 6F                 3220 	DB	'po'
1786 B7 0F                 3221 	DW	GRP17
1788 7B                    3222 	DB	7BH
1789 6E 6F                 3223 	DB	'no'
178B B7 0F                 3224 	DW	GRP17
178D 71                    3225 	DB	71H
178E 6E 73                 3226 	DB	'ns'
1790 B7 0F                 3227 	DW	GRP17
1792 79                    3228 	DB	79H
1793                       3229 J4:
1793 06                    3230 	DB	6
1794 6D 70 73              3231 	DB	'mps'
1797 B7 0F                 3232 	DW	GRP17
1799 EB                    3233 	DB	0EBH
179A 63 78 7A              3234 	DB	'cxz'
179D B7 0F                 3235 	DW	GRP17
179F E3                    3236 	DB	0E3H
17A0 6E 67 65              3237 	DB	'nge'
17A3 B7 0F                 3238 	DW	GRP17
17A5 7C                    3239 	DB	7CH
17A6 6E 61 65              3240 	DB	'nae'
17A9 B7 0F                 3241 	DW	GRP17
17AB 72                    3242 	DB	72H
17AC 6E 62 65              3243 	DB	'nbe'
17AF B7 0F                 3244 	DW	GRP17
17B1 77                    3245 	DB	77H
17B2 6E 6C 65              3246 	DB	'nle'
17B5 B7 0F                 3247 	DW	GRP17
17B7 7F                    3248 	DB	7FH
17B8                       3249 L3:
17B8 03                    3250 	DB	3
17B9 65 61                 3251 	DB	'ea'
17BB B5 0D                 3252 	DW	GRP6
17BD 8D                    3253 	DB	8DH
17BE 64 73                 3254 	DB	'ds'
17C0 B5 0D                 3255 	DW	GRP6
17C2 C5                    3256 	DB	0C5H
17C3 65 73                 3257 	DB	'es'
17C5 B5 0D                 3258 	DW	GRP6
17C7 C4                    3259 	DB	0C4H
17C8                       3260 L4:
17C8 05                    3261 	DB	5
17C9 6F 6F 70              3262 	DB	'oop'
17CC B7 0F                 3263 	DW	GRP17
17CE E2                    3264 	DB	0E2H
17CF 6F 64 62              3265 	DB	'odb'
17D2 9C 0B                 3266 	DW	PUT
17D4 AC                    3267 	DB	0ACH
17D5 6F 64 77              3268 	DB	'odw'
17D8 9C 0B                 3269 	DW	PUT
17DA AD                    3270 	DB	0ADH
17DB 61 68 66              3271 	DB	'ahf'
17DE 9C 0B                 3272 	DW	PUT
17E0 9F                    3273 	DB	9FH
17E1 6F 63 6B              3274 	DB	'ock'
17E4 9C 0B                 3275 	DW	PUT
17E6 F0                    3276 	DB	0F0H
17E7                       3277 L5:
17E7 04                    3278 	DB	4
17E8 6F 6F 70 65           3279 	DB	'oope'
17EC B7 0F                 3280 	DW	GRP17
17EE E1                    3281 	DB	0E1H
17EF 6F 6F 70 7A           3282 	DB	'oopz'
17F3 B7 0F                 3283 	DW	GRP17
17F5 E1                    3284 	DB	0E1H
17F6 6F 64 73 62           3285 	DB	'odsb'
17FA 9C 0B                 3286 	DW	PUT
17FC AC                    3287 	DB	0ACH
17FD 6F 64 73 77           3288 	DB	'odsw'
1801 9C 0B                 3289 	DW	PUT
1803 AD                    3290 	DB	0ADH
1804                       3291 L6:
1804 02                    3292 	DB	2
1805 6F 6F 70 6E 65        3293 	DB	'oopne'
180A B7 0F                 3294 	DW	GRP17
180C E0                    3295 	DB	0E0H
180D 6F 6F 70 6E 7A        3296 	DB	'oopnz'
1812 B7 0F                 3297 	DW	GRP17
1814 E0                    3298 	DB	0E0H
1815                       3299 M3:
1815 02                    3300 	DB	2
1816 6F 76                 3301 	DB	'ov'
1818 33 0B                 3302 	DW	GRP1
181A 88                    3303 	DB	88H
181B 75 6C                 3304 	DB	'ul'
181D 3D 0E                 3305 	DW	GRP10
181F 20                    3306 	DB	20H
1820                       3307 M4:
1820 02                    3308 	DB	2
1821 6F 76 62              3309 	DB	'ovb'
1824 9C 0B                 3310 	DW	PUT
1826 A4                    3311 	DB	0A4H
1827 6F 76 77              3312 	DB	'ovw'
182A 9C 0B                 3313 	DW	PUT
182C A5                    3314 	DB	0A5H
182D                       3315 M5:
182D 02                    3316 	DB	2
182E 6F 76 73 62           3317 	DB	'ovsb'
1832 9C 0B                 3318 	DW	PUT
1834 A4                    3319 	DB	0A4H
1835 6F 76 73 77           3320 	DB	'ovsw'
1839 9C 0B                 3321 	DW	PUT
183B A5                    3322 	DB	0A5H
183C                       3323 N3:
183C 03                    3324 	DB	3
183D 6F 74                 3325 	DB	'ot'
183F EF 0D                 3326 	DW	GRP9
1841 10                    3327 	DB	10H
1842 65 67                 3328 	DB	'eg'
1844 EF 0D                 3329 	DW	GRP9
1846 18                    3330 	DB	18H
1847 6F 70                 3331 	DB	'op'
1849 9C 0B                 3332 	DW	PUT
184B 90                    3333 	DB	90H
184C                       3334 O2:
184C 01                    3335 	DB	1
184D 72                    3336 	DB	'r'
184E 97 0E                 3337 	DW	GRP13
1850 0A                    3338 	DB	0AH
1851                       3339 O3:
1851 02                    3340 	DB	2
1852 75 74                 3341 	DB	'ut'
1854 15 0D                 3342 	DW	GRP4
1856 E6                    3343 	DB	0E6H
1857 72 67                 3344 	DB	'rg'
1859 3B 0D                 3345 	DW	GRP5
185B 00                    3346 	DB	0
185C                       3347 O4:
185C 02                    3348 	DB	2
185D 75 74 62              3349 	DB	'utb'
1860 15 0D                 3350 	DW	GRP4
1862 E6                    3351 	DB	0E6H
1863 75 74 77              3352 	DB	'utw'
1866 15 0D                 3353 	DW	GRP4
1868 E7                    3354 	DB	0E7H
1869                       3355 P3:
1869 02                    3356 	DB	2
186A 6F 70                 3357 	DB	'op'
186C AB 10                 3358 	DW	GRP22
186E 8F                    3359 	DB	8FH
186F 75 74                 3360 	DB	'ut'
1871 3B 0D                 3361 	DW	GRP5
1873 03                    3362 	DB	3
1874                       3363 P4:
1874 02                    3364 	DB	2
1875 75 73 68              3365 	DB	'ush'
1878 84 0C                 3366 	DW	GRP2
187A FF                    3367 	DB	0FFH
187B 6F 70 66              3368 	DB	'opf'
187E 9C 0B                 3369 	DW	PUT
1880 9D                    3370 	DB	9DH
1881                       3371 P5:
1881 01                    3372 	DB	1
1882 75 73 68 66           3373 	DB	'ushf'
1886 9C 0B                 3374 	DW	PUT
1888 9C                    3375 	DB	9CH
1889                       3376 R3:
1889 06                    3377 	DB	6
188A 65 74                 3378 	DB	'et'
188C 3F 0F                 3379 	DW	GRP16
188E C3                    3380 	DB	0C3H
188F 65 70                 3381 	DB	'ep'
1891 9C 0B                 3382 	DW	PUT
1893 F3                    3383 	DB	0F3H
1894 6F 6C                 3384 	DB	'ol'
1896 6D 0E                 3385 	DW	GRP12
1898 00                    3386 	DB	0
1899 6F 72                 3387 	DB	'or'
189B 6D 0E                 3388 	DW	GRP12
189D 08                    3389 	DB	8
189E 63 6C                 3390 	DB	'cl'
18A0 6D 0E                 3391 	DW	GRP12
18A2 10                    3392 	DB	10H
18A3 63 72                 3393 	DB	'cr'
18A5 6D 0E                 3394 	DW	GRP12
18A7 18                    3395 	DB	18H
18A8                       3396 R4:
18A8 02                    3397 	DB	2
18A9 65 70 7A              3398 	DB	'epz'
18AC 9C 0B                 3399 	DW	PUT
18AE F3                    3400 	DB	0F3H
18AF 65 70 65              3401 	DB	'epe'
18B2 9C 0B                 3402 	DW	PUT
18B4 F3                    3403 	DB	0F3H
18B5                       3404 R5:
18B5 02                    3405 	DB	2
18B6 65 70 6E 7A           3406 	DB	'epnz'
18BA 9C 0B                 3407 	DW	PUT
18BC F2                    3408 	DB	0F2H
18BD 65 70 6E 65           3409 	DB	'epne'
18C1 9C 0B                 3410 	DW	PUT
18C3 F2                    3411 	DB	0F2H
18C4                       3412 S3:
18C4 0B                    3413 	DB	11
18C5 75 62                 3414 	DB	'ub'
18C7 C1 0D                 3415 	DW	GRP7
18C9 2A                    3416 	DB	2AH
18CA 62 62                 3417 	DB	'bb'
18CC C1 0D                 3418 	DW	GRP7
18CE 1A                    3419 	DB	1AH
18CF 62 63                 3420 	DB	'bc'
18D1 C1 0D                 3421 	DW	GRP7
18D3 1A                    3422 	DB	1AH
18D4 74 63                 3423 	DB	'tc'
18D6 9C 0B                 3424 	DW	PUT
18D8 F9                    3425 	DB	0F9H
18D9 74 64                 3426 	DB	'td'
18DB 9C 0B                 3427 	DW	PUT
18DD FD                    3428 	DB	0FDH
18DE 74 69                 3429 	DB	'ti'
18E0 9C 0B                 3430 	DW	PUT
18E2 FB                    3431 	DB	0FBH
18E3 68 6C                 3432 	DB	'hl'
18E5 6D 0E                 3433 	DW	GRP12
18E7 20                    3434 	DB	20H
18E8 68 72                 3435 	DB	'hr'
18EA 6D 0E                 3436 	DW	GRP12
18EC 28                    3437 	DB	28H
18ED 61 6C                 3438 	DB	'al'
18EF 6D 0E                 3439 	DW	GRP12
18F1 20                    3440 	DB	20H
18F2 61 72                 3441 	DB	'ar'
18F4 6D 0E                 3442 	DW	GRP12
18F6 38                    3443 	DB	38H
18F7 65 67                 3444 	DB	'eg'
18F9 93 10                 3445 	DW	GRP21
18FB 26                    3446 	DB	26H
18FC                       3447 S4:
18FC 05                    3448 	DB	5
18FD 63 61 62              3449 	DB	'cab'
1900 9C 0B                 3450 	DW	PUT
1902 AE                    3451 	DB	0AEH
1903 63 61 77              3452 	DB	'caw'
1906 9C 0B                 3453 	DW	PUT
1908 AF                    3454 	DB	0AFH
1909 74 6F 62              3455 	DB	'tob'
190C 9C 0B                 3456 	DW	PUT
190E AA                    3457 	DB	0AAH
190F 74 6F 77              3458 	DB	'tow'
1912 9C 0B                 3459 	DW	PUT
1914 AB                    3460 	DB	0ABH
1915 61 68 66              3461 	DB	'ahf'
1918 9C 0B                 3462 	DW	PUT
191A 9E                    3463 	DB	9EH
191B                       3464 S5:
191B 04                    3465 	DB	4
191C 63 61 73 62           3466 	DB	'casb'
1920 9C 0B                 3467 	DW	PUT
1922 AE                    3468 	DB	0AEH
1923 63 61 73 77           3469 	DB	'casw'
1927 9C 0B                 3470 	DW	PUT
1929 AF                    3471 	DB	0AFH
192A 74 6F 73 62           3472 	DB	'tosb'
192E 9C 0B                 3473 	DW	PUT
1930 AA                    3474 	DB	0AAH
1931 74 6F 73 77           3475 	DB	'tosw'
1935 9C 0B                 3476 	DW	PUT
1937 AB                    3477 	DB	0ABH
1938                       3478 T4:
1938 01                    3479 	DB	1
1939 65 73 74              3480 	DB	'est'
193C 82 10                 3481 	DW	GRP20
193E 84                    3482 	DB	84H
193F                       3483 U2:
193F 01                    3484 	DB	1
1940 70                    3485 	DB	'p'
1941 9C 0B                 3486 	DW	PUT
1943 FC                    3487 	DB	0FCH
1944                       3488 W4:
1944 01                    3489 	DB	1
1945 61 69 74              3490 	DB	'ait'
1948 9C 0B                 3491 	DW	PUT
194A 9B                    3492 	DB	9BH
194B                       3493 X3:
194B 01                    3494 	DB	1
194C 6F 72                 3495 	DB	'or'
194E 97 0E                 3496 	DW	GRP13
1950 32                    3497 	DB	32H
1951                       3498 X4:
1951 02                    3499 	DB	2
1952 63 68 67              3500 	DB	'chg'
1955 B5 0C                 3501 	DW	GRP3
1957 86                    3502 	DB	86H
1958 6C 61 74              3503 	DB	'lat'
195B 9C 0B                 3504 	DW	PUT
195D D7                    3505 	DB	0D7H
195E                       3506 
195E                       3507 
195E                       3508 ; 8087 MNEMONIC TABLE
195E                       3509 ; Similar to 8086 table above, except NOT distinguished by opcode length
195E                       3510 
195E                       3511 XM1:	;F2XM1
195E 01                    3512 	DB	1		;One opcode
195F 78 6D B1              3513 	DM	"xm1"
1962 01 F0                 3514 	DB	1,0F0H
1964                       3515 
1964                       3516 NDPA:
1964 03                    3517 	DB	3
1965 64 E4                 3518 	DM	"dd"
1967 0E C1                 3519 	DB	6+ARITH,0C1H
1969 64 64 F0              3520 	DM	"ddp"
196C 90 00                 3521 	DB	NEEDOP+STACKOP,0
196E 62 F3                 3522 	DM	"bs"
1970 01 E1                 3523 	DB	1,0E1H
1972                       3524 
1972                       3525 NDPB:
1972 02                    3526 	DB	2
1973 6C E4                 3527 	DM	"ld"
1975 9F 20                 3528 	DB	7+NEEDOP+MEMORY,20H
1977 73 74 F0              3529 	DM	"stp"
197A 9F 30                 3530 	DB	7+NEEDOP+MEMORY,30H
197C                       3531 
197C                       3532 NDPC:
197C 05                    3533 	DB	5
197D 6F ED                 3534 	DM	"om"
197F 68 D1                 3535 	DB	0+ONEREG+REAL,0D1H
1981 6F 6D F0              3536 	DM	"omp"
1984 68 D9                 3537 	DB	0+ONEREG+REAL,0D9H
1986 68 F3                 3538 	DM	"hs"
1988 01 E0                 3539 	DB	1,0E0H
198A 6F 6D 70 F0           3540 	DM	"ompp"
198E 06 D9                 3541 	DB	6,0D9H
1990 6C 65 F8              3542 	DM	"lex"
1993 03 E2                 3543 	DB	3,0E2H
1995                       3544 
1995                       3545 NDPD:
1995 06                    3546 	DB	6
1996 69 F6                 3547 	DM	"iv"
1998 0E F1                 3548 	DB	6+ARITH,0F1H
199A 69 76 F0              3549 	DM	"ivp"
199D 90 30                 3550 	DB	NEEDOP+STACKOP,30H
199F 69 76 F2              3551 	DM	"ivr"
19A2 0E F9                 3552 	DB	6+ARITH,0F9H
19A4 69 76 72 F0           3553 	DM	"ivrp"
19A8 90 38                 3554 	DB	NEEDOP+STACKOP,38H
19AA 65 63 73 74 F0        3555 	DM	"ecstp"
19AF 01 F6                 3556 	DB	1,0F6H
19B1 69 73 E9              3557 	DM	"isi"
19B4 03 E1                 3558 	DB	3,0E1H
19B6                       3559 
19B6                       3560 NDPE:
19B6 01                    3561 	DB	1
19B7 6E E9                 3562 	DM	"ni"
19B9 03 E0                 3563 	DB	3,0E0H
19BB                       3564 
19BB                       3565 NDPF:
19BB 01                    3566 	DB	1
19BC 72 65 E5              3567 	DM	"ree"
19BF C5 00                 3568 	DB	5+NEEDOP+ONEREG,0
19C1                       3569 
19C1                       3570 NDPI:
19C1 0D                    3571 	DB	13
19C2 61 64 E4              3572 	DM	"add"
19C5 A2 00                 3573 	DB	2+NEEDOP+INTEGER,0
19C7 6C E4                 3574 	DM	"ld"
19C9 B3 00                 3575 	DB	3+NEEDOP+INTEGER+EXTENDED,0
19CB 73 75 E2              3576 	DM	"sub"
19CE A2 20                 3577 	DB	2+NEEDOP+INTEGER,20H
19D0 73 74 F0              3578 	DM	"stp"
19D3 B3 18                 3579 	DB	3+NEEDOP+INTEGER+EXTENDED,18H
19D5 73 F4                 3580 	DM	"st"
19D7 A3 10                 3581 	DB	3+NEEDOP+INTEGER,10H
19D9 6D 75 EC              3582 	DM	"mul"
19DC A2 08                 3583 	DB	2+NEEDOP+INTEGER,8
19DE 64 69 F6              3584 	DM	"div"
19E1 A2 30                 3585 	DB	2+NEEDOP+INTEGER,30H
19E3 73 75 62 F2           3586 	DM	"subr"
19E7 A2 28                 3587 	DB	2+NEEDOP+INTEGER,28H
19E9 64 69 76 F2           3588 	DM	"divr"
19ED A2 38                 3589 	DB	2+NEEDOP+INTEGER,38H
19EF 63 6F ED              3590 	DM	"com"
19F2 A2 10                 3591 	DB	2+NEEDOP+INTEGER,10H
19F4 63 6F 6D F0           3592 	DM	"comp"
19F8 A2 18                 3593 	DB	2+NEEDOP+INTEGER,18H
19FA 6E 63 73 74 F0        3594 	DM	"ncstp"
19FF 01 F7                 3595 	DB	1,0F7H
1A01 6E 69 F4              3596 	DM	"nit"
1A04 03 E3                 3597 	DB	3,0E3H
1A06                       3598 
1A06                       3599 NDPL:
1A06 0A                    3600 	DB	10
1A07 E4                    3601 	DM	"d"
1A08 F9 00                 3602 	DB	1+NEEDOP+ONEREG+REAL+EXTENDED,0
1A0A 64 FA                 3603 	DM	"dz"
1A0C 01 EE                 3604 	DB	1,0EEH
1A0E 64 B1                 3605 	DM	"d1"
1A10 01 E8                 3606 	DB	1,0E8H
1A12 64 70 E9              3607 	DM	"dpi"
1A15 01 EB                 3608 	DB	1,0EBH
1A17 64 6C 32 F4           3609 	DM	"dl2t"
1A1B 01 E9                 3610 	DB	1,0E9H
1A1D 64 6C 32 E5           3611 	DM	"dl2e"
1A21 01 EA                 3612 	DB	1,0EAH
1A23 64 6C 67 B2           3613 	DM	"dlg2"
1A27 01 EC                 3614 	DB	1,0ECH
1A29 64 6C 6E B2           3615 	DM	"dln2"
1A2D 01 ED                 3616 	DB	1,0EDH
1A2F 64 63 F7              3617 	DM	"dcw"
1A32 99 28                 3618 	DB	1+NEEDOP+MEMORY,28H
1A34 64 65 6E F6           3619 	DM	"denv"
1A38 99 20                 3620 	DB	1+NEEDOP+MEMORY,20H
1A3A                       3621 
1A3A                       3622 NDPM:
1A3A 02                    3623 	DB	2
1A3B 75 EC                 3624 	DM	"ul"
1A3D 0E C9                 3625 	DB	6+ARITH,0C9H
1A3F 75 6C F0              3626 	DM	"ulp"
1A42 90 08                 3627 	DB	NEEDOP+STACKOP,8
1A44                       3628 
1A44                       3629 NDPO:
1A44 01                    3630 	DB	1
1A45 F0                    3631 	DM	"p"
1A46 81 00                 3632 	DB	NEEDOP+1,0	;Flag special handling
1A48                       3633 
1A48                       3634 NDPN:
1A48 01                    3635 	DB	1
1A49 6F F0                 3636 	DM	"op"
1A4B 01 D0                 3637 	DB	1,0D0H
1A4D                       3638 
1A4D                       3639 NDPP:
1A4D 03                    3640 	DB	3
1A4E 72 65 ED              3641 	DM	"rem"
1A51 01 F8                 3642 	DB	1,0F8H
1A53 74 61 EE              3643 	DM	"tan"
1A56 01 F2                 3644 	DB	1,0F2H
1A58 61 74 61 EE           3645 	DM	"atan"
1A5C 01 F3                 3646 	DB	1,0F3H
1A5E                       3647 
1A5E                       3648 NDPR:
1A5E 02                    3649 	DB	2
1A5F 6E 64 69 6E F4        3650 	DM	"ndint"
1A64 01 FC                 3651 	DB	1,0FCH
1A66 73 74 6F F2           3652 	DM	"stor"
1A6A 9D 20                 3653 	DB	5+NEEDOP+MEMORY,20H
1A6C                       3654 
1A6C                       3655 NDPS:
1A6C 0C                    3656 	DB	12
1A6D F4                    3657 	DM	"t"
1A6E ED D0                 3658 	DB	5+NEEDOP+ONEREG+REAL,0D0H
1A70 74 F0                 3659 	DM	"tp"
1A72 FF D8                 3660 	DB	7+NEEDOP+ONEREG+REAL+EXTENDED,0D8H
1A74 75 E2                 3661 	DM	"ub"
1A76 0E E1                 3662 	DB	6+ARITH,0E1H
1A78 75 62 F0              3663 	DM	"ubp"
1A7B 90 E0                 3664 	DB	NEEDOP+STACKOP,0E0H
1A7D 75 62 F2              3665 	DM	"ubr"
1A80 0E E9                 3666 	DB	6+ARITH,0E9H
1A82 75 62 72 F0           3667 	DM	"ubrp"
1A86 90 E8                 3668 	DB	NEEDOP+STACKOP,0E8H
1A88 71 72 F4              3669 	DM	"qrt"
1A8B 01 FA                 3670 	DB	1,0FAH
1A8D 63 61 6C E5           3671 	DM	"cale"
1A91 01 FD                 3672 	DB	1,0FDH
1A93 61 76 E5              3673 	DM	"ave"
1A96 9D 30                 3674 	DB	5+NEEDOP+MEMORY,30H
1A98 74 63 F7              3675 	DM	"tcw"
1A9B 99 38                 3676 	DB	1+NEEDOP+MEMORY,38H
1A9D 74 65 6E F6           3677 	DM	"tenv"
1AA1 99 30                 3678 	DB	1+NEEDOP+MEMORY,30H
1AA3 74 73 F7              3679 	DM	"tsw"
1AA6 9D 38                 3680 	DB	5+NEEDOP+MEMORY,38H
1AA8                       3681 
1AA8                       3682 NDPT:
1AA8 01                    3683 	DB	1
1AA9 73 F4                 3684 	DM	"st"
1AAB 01 E4                 3685 	DB	1,0E4H
1AAD                       3686 
1AAD                       3687 NDPW:
1AAD 01                    3688 	DB	1
1AAE 61 69 F4              3689 	DM	"ait"
1AB1 80 00                 3690 	DB	NEEDOP,0	;Flag special handling
1AB3                       3691 
1AB3                       3692 NDPX:
1AB3 03                    3693 	DB	3
1AB4 63 E8                 3694 	DM	"ch"
1AB6 41 C9                 3695 	DB	1+ONEREG,0C9H
1AB8 61 ED                 3696 	DM	"am"
1ABA 01 E5                 3697 	DB	1,0E5H
1ABC 74 72 61 63 F4        3698 	DM	"tract"
1AC1 01 F4                 3699 	DB	1,0F4H
1AC3                       3700 
1AC3                       3701 NDPY:
1AC3 02                    3702 	DB	2
1AC4 6C 32 F8              3703 	DM	"l2x"
1AC7 01 F1                 3704 	DB	1,0F1H
1AC9 6C 32 78 70 B1        3705 	DM	"l2xp1"
1ACE 01 F9                 3706 	DB	1,0F9H
1AD0                       3707 
1AD0                       3708 
1AD0                       3709 OPTAB:
1AD0                       3710 ; Table of pointers  to mnemonics. For each letter of the alphabet (the
1AD0                       3711 ; starting letter of the mnemonic), there are 5 entries. Each entry
1AD0                       3712 ; corresponds to a mnemonic whose length is 2, 3, 4, 5, and 6 characters
1AD0                       3713 ; long, respectively. If there are no mnemonics for a given combination
1AD0                       3714 ; of first letter and length (such as A-2), then the corresponding entry
1AD0                       3715 ; points to NONE. Otherwise, it points to a place in the mnemonic table
1AD0                       3716 ; for that type.
1AD0                       3717 
1AD0                       3718 ; This table only needs to be modified if a mnemonic is added to a group
1AD0                       3719 ; previously marked NONE. Change the NONE to a label made up of the first
1AD0                       3720 ; letter of the mnemonic and its length, then add a new subsection to
1AD0                       3721 ; the mnemonic table in alphabetical order.
1AD0                       3722 
1AD0 0F 16                 3723 	DW	NONE
1AD2 10 16                 3724 	DW	A3
1AD4 0F 16                 3725 	DW	NONE
1AD6 34 16                 3726 	DW	A5
1AD8 0F 16                 3727 	DW	NONE
1ADA 0F 16                 3728 	DW	NONE	;B
1ADC 0F 16                 3729 	DW	NONE
1ADE 0F 16                 3730 	DW	NONE
1AE0 0F 16                 3731 	DW	NONE
1AE2 0F 16                 3732 	DW	NONE
1AE4 0F 16                 3733 	DW	NONE	;C
1AE6 3C 16                 3734 	DW	C3
1AE8 60 16                 3735 	DW	C4
1AEA 73 16                 3736 	DW	C5
1AEC 0F 16                 3737 	DW	NONE
1AEE 82 16                 3738 	DW	D2	;D
1AF0 97 16                 3739 	DW	D3
1AF2 AC 16                 3740 	DW	D4
1AF4 0F 16                 3741 	DW	NONE
1AF6 0F 16                 3742 	DW	NONE
1AF8 B3 16                 3743 	DW	E2	;E
1AFA B8 16                 3744 	DW	E3
1AFC 0F 16                 3745 	DW	NONE
1AFE C8 16                 3746 	DW	E5
1B00 0F 16                 3747 	DW	NONE
1B02 0F 16                 3748 	DW	NONE	;F
1B04 0F 16                 3749 	DW	NONE
1B06 0F 16                 3750 	DW	NONE
1B08 0F 16                 3751 	DW	NONE
1B0A 0F 16                 3752 	DW	NONE
1B0C 0F 16                 3753 	DW	NONE	;G
1B0E 0F 16                 3754 	DW	NONE
1B10 0F 16                 3755 	DW	NONE
1B12 0F 16                 3756 	DW	NONE
1B14 0F 16                 3757 	DW	NONE
1B16 0F 16                 3758 	DW	NONE	;H
1B18 D0 16                 3759 	DW	H3
1B1A D6 16                 3760 	DW	H4
1B1C 0F 16                 3761 	DW	NONE
1B1E 0F 16                 3762 	DW	NONE
1B20 DD 16                 3763 	DW	I2	;I
1B22 E6 16                 3764 	DW	I3
1B24 FB 16                 3765 	DW	I4
1B26 0F 16                 3766 	DW	NONE
1B28 0F 16                 3767 	DW	NONE
1B2A 14 17                 3768 	DW	J2	;J
1B2C 3D 17                 3769 	DW	J3
1B2E 93 17                 3770 	DW	J4
1B30 0F 16                 3771 	DW	NONE
1B32 0F 16                 3772 	DW	NONE
1B34 0F 16                 3773 	DW	NONE	;K
1B36 0F 16                 3774 	DW	NONE
1B38 0F 16                 3775 	DW	NONE
1B3A 0F 16                 3776 	DW	NONE
1B3C 0F 16                 3777 	DW	NONE
1B3E 0F 16                 3778 	DW	NONE	;L
1B40 B8 17                 3779 	DW	L3
1B42 C8 17                 3780 	DW	L4
1B44 E7 17                 3781 	DW	L5
1B46 04 18                 3782 	DW	L6
1B48 0F 16                 3783 	DW	NONE	;M
1B4A 15 18                 3784 	DW	M3
1B4C 20 18                 3785 	DW	M4
1B4E 2D 18                 3786 	DW	M5
1B50 0F 16                 3787 	DW	NONE
1B52 0F 16                 3788 	DW	NONE	;N
1B54 3C 18                 3789 	DW	N3
1B56 0F 16                 3790 	DW	NONE
1B58 0F 16                 3791 	DW	NONE
1B5A 0F 16                 3792 	DW	NONE
1B5C 4C 18                 3793 	DW	O2	;O
1B5E 51 18                 3794 	DW	O3
1B60 5C 18                 3795 	DW	O4
1B62 0F 16                 3796 	DW	NONE
1B64 0F 16                 3797 	DW	NONE
1B66 0F 16                 3798 	DW	NONE	;P
1B68 69 18                 3799 	DW	P3
1B6A 74 18                 3800 	DW	P4
1B6C 81 18                 3801 	DW	P5
1B6E 0F 16                 3802 	DW	NONE
1B70 0F 16                 3803 	DW	NONE	;Q
1B72 0F 16                 3804 	DW	NONE
1B74 0F 16                 3805 	DW	NONE
1B76 0F 16                 3806 	DW	NONE
1B78 0F 16                 3807 	DW	NONE
1B7A 0F 16                 3808 	DW	NONE	;R
1B7C 89 18                 3809 	DW	R3
1B7E A8 18                 3810 	DW	R4
1B80 B5 18                 3811 	DW	R5
1B82 0F 16                 3812 	DW	NONE
1B84 0F 16                 3813 	DW	NONE	;S
1B86 C4 18                 3814 	DW	S3
1B88 FC 18                 3815 	DW	S4
1B8A 1B 19                 3816 	DW	S5
1B8C 0F 16                 3817 	DW	NONE
1B8E 0F 16                 3818 	DW	NONE	;T
1B90 0F 16                 3819 	DW	NONE
1B92 38 19                 3820 	DW	T4
1B94 0F 16                 3821 	DW	NONE
1B96 0F 16                 3822 	DW	NONE
1B98 3F 19                 3823 	DW	U2	;U
1B9A 0F 16                 3824 	DW	NONE
1B9C 0F 16                 3825 	DW	NONE
1B9E 0F 16                 3826 	DW	NONE
1BA0 0F 16                 3827 	DW	NONE
1BA2 0F 16                 3828 	DW	NONE	;V
1BA4 0F 16                 3829 	DW	NONE
1BA6 0F 16                 3830 	DW	NONE
1BA8 0F 16                 3831 	DW	NONE
1BAA 0F 16                 3832 	DW	NONE
1BAC 0F 16                 3833 	DW	NONE	;W
1BAE 0F 16                 3834 	DW	NONE
1BB0 44 19                 3835 	DW	W4
1BB2 0F 16                 3836 	DW	NONE
1BB4 0F 16                 3837 	DW	NONE
1BB6 0F 16                 3838 	DW	NONE	;X
1BB8 4B 19                 3839 	DW	X3
1BBA 51 19                 3840 	DW	X4
1BBC 0F 16                 3841 	DW	NONE
1BBE 0F 16                 3842 	DW	NONE
1BC0 0F 16                 3843 	DW	NONE	;Y
1BC2 0F 16                 3844 	DW	NONE
1BC4 0F 16                 3845 	DW	NONE
1BC6 0F 16                 3846 	DW	NONE
1BC8 0F 16                 3847 	DW	NONE
1BCA 0F 16                 3848 	DW	NONE	;Z
1BCC 0F 16                 3849 	DW	NONE
1BCE 0F 16                 3850 	DW	NONE
1BD0 0F 16                 3851 	DW	NONE
1BD2 0F 16                 3852 	DW	NONE
1BD4                       3853 
1BD4                       3854 NDPTAB:
1BD4                       3855 ;Lookup table for 8087 mnemonics. There is one entry for each letter of the
1BD4                       3856 ;alphabet
1BD4 64 19                 3857 	DW	NDPA
1BD6 72 19                 3858 	DW	NDPB
1BD8 7C 19                 3859 	DW	NDPC
1BDA 95 19                 3860 	DW	NDPD
1BDC B6 19                 3861 	DW	NDPE
1BDE BB 19                 3862 	DW	NDPF
1BE0 0F 16                 3863 	DW	NONE	;G
1BE2 0F 16                 3864 	DW	NONE	;H
1BE4 C1 19                 3865 	DW	NDPI
1BE6 0F 16                 3866 	DW	NONE	;J
1BE8 0F 16                 3867 	DW	NONE	;K
1BEA 06 1A                 3868 	DW	NDPL
1BEC 3A 1A                 3869 	DW	NDPM
1BEE 48 1A                 3870 	DW	NDPN
1BF0 44 1A                 3871 	DW	NDPO
1BF2 4D 1A                 3872 	DW	NDPP
1BF4 0F 16                 3873 	DW	NONE	;Q
1BF6 5E 1A                 3874 	DW	NDPR
1BF8 6C 1A                 3875 	DW	NDPS
1BFA A8 1A                 3876 	DW	NDPT
1BFC 0F 16                 3877 	DW	NONE	;U
1BFE 0F 16                 3878 	DW	NONE	;V
1C00 AD 1A                 3879 	DW	NDPW
1C02 B3 1A                 3880 	DW	NDPX
1C04 C3 1A                 3881 	DW	NDPY
1C06 0F 16                 3882 	DW	NONE	;Z
1C08                       3883 
1C08                       3884 ;Error message table
1C08                       3885 
1C08                       3886 ERRTAB:
1C08 01 52 65 67 69 73 74  3887 	DM	1,"Register not allowed in immediate value"
     65 72 20 6E 6F 74 20 
     61 6C 6C 6F 77 65 64 
     20 69 6E 20 69 6D 6D 
     65 64 69 61 74 65 20 
     76 61 6C 75 E5       
1C30 02 49 6E 64 65 78 20  3888 	DM	2,"Index or base register must be BP, BX, SI, or DI"
     6F 72 20 62 61 73 65 
     20 72 65 67 69 73 74 
     65 72 20 6D 75 73 74 
     20 62 65 20 42 50 2C 
     20 42 58 2C 20 53 49 
     2C 20 6F 72 20 44 C9 
1C61 03 4F 6E 6C 79 20 6F  3889 	DM	3,"Only one base register (BX, BP) allowed"
     6E 65 20 62 61 73 65 
     20 72 65 67 69 73 74 
     65 72 20 28 42 58 2C 
     20 42 50 29 20 61 6C 
     6C 6F 77 65 E4       
1C89 04 4F 6E 6C 79 20 6F  3890 	DM	4,"Only one index register (SI or DI) allowed"
     6E 65 20 69 6E 64 65 
     78 20 72 65 67 69 73 
     74 65 72 20 28 53 49 
     20 6F 72 20 44 49 29 
     20 61 6C 6C 6F 77 65 
     E4                   
1CB4 05 4F 6E 6C 79 20 61  3891 	DM	5,"Only addition allowed on register or undefined label"
     64 64 69 74 69 6F 6E 
     20 61 6C 6C 6F 77 65 
     64 20 6F 6E 20 72 65 
     67 69 73 74 65 72 20 
     6F 72 20 75 6E 64 65 
     66 69 6E 65 64 20 6C 
     61 62 65 EC          
1CE9 06 4F 6E 6C 79 20 6F  3892 	DM	6,"Only one undefined label per expression allowed"
     6E 65 20 75 6E 64 65 
     66 69 6E 65 64 20 6C 
     61 62 65 6C 20 70 65 
     72 20 65 78 70 72 65 
     73 73 69 6F 6E 20 61 
     6C 6C 6F 77 65 E4    
1D19 07 49 6C 6C 65 67 61  3893 	DM	7,"Illegal digit in hexadecimal number"
     6C 20 64 69 67 69 74 
     20 69 6E 20 68 65 78 
     61 64 65 63 69 6D 61 
     6C 20 6E 75 6D 62 65 
     F2                   
1D3D 08 49 6C 6C 65 67 61  3894 	DM	8,"Illegal digit in decimal number"
     6C 20 64 69 67 69 74 
     20 69 6E 20 64 65 63 
     69 6D 61 6C 20 6E 75 
     6D 62 65 F2          
1D5D 0A 49 6C 6C 65 67 61  3895 	DM	10,"Illegal character in label or opcode"
     6C 20 63 68 61 72 61 
     63 74 65 72 20 69 6E 
     20 6C 61 62 65 6C 20 
     6F 72 20 6F 70 63 6F 
     64 E5                
1D82 0B 4C 61 62 65 6C 20  3896 	DM	11,"Label defined twice"
     64 65 66 69 6E 65 64 
     20 74 77 69 63 E5    
1D96 0C 4F 70 63 6F 64 65  3897 	DM	12,"Opcode not recognized"
     20 6E 6F 74 20 72 65 
     63 6F 67 6E 69 7A 65 
     E4                   
1DAC 14 49 6E 76 61 6C 69  3898 	DM	20,"Invalid operand"
     64 20 6F 70 65 72 61 
     6E E4                
1DBC 15 22 2C 22 20 61 6E  3899 	DM	21,'"," and second operand expected'
     64 20 73 65 63 6F 6E 
     64 20 6F 70 65 72 61 
     6E 64 20 65 78 70 65 
     63 74 65 E4          
1DDC 16 52 65 67 69 73 74  3900 	DM	22,"Register mismatch"
     65 72 20 6D 69 73 6D 
     61 74 63 E8          
1DEE 17 49 6D 6D 65 64 69  3901 	DM	23,"Immediate operand not allowed"
     61 74 65 20 6F 70 65 
     72 61 6E 64 20 6E 6F 
     74 20 61 6C 6C 6F 77 
     65 E4                
1E0C 18 22 5D 22 20 65 78  3902 	DM	24,'"]" expected'
     70 65 63 74 65 E4    
1E19 19 54 77 6F 20 6D 65  3903 	DM	25,"Two memory operands not allowed"
     6D 6F 72 79 20 6F 70 
     65 72 61 6E 64 73 20 
     6E 6F 74 20 61 6C 6C 
     6F 77 65 E4          
1E39 1A 44 65 73 74 69 6E  3904 	DM	26,"Destination must not be immediate value"
     61 74 69 6F 6E 20 6D 
     75 73 74 20 6E 6F 74 
     20 62 65 20 69 6D 6D 
     65 64 69 61 74 65 20 
     76 61 6C 75 E5       
1E61 1B 42 6F 74 68 20 6F  3905 	DM	27,"Both operands must not be registers"
     70 65 72 61 6E 64 73 
     20 6D 75 73 74 20 6E 
     6F 74 20 62 65 20 72 
     65 67 69 73 74 65 72 
     F3                   
1E85 1C 4F 70 65 72 61 6E  3906 	DM	28,"Operand must be segment register"
     64 20 6D 75 73 74 20 
     62 65 20 73 65 67 6D 
     65 6E 74 20 72 65 67 
     69 73 74 65 F2       
1EA6 1D 46 69 72 73 74 20  3907 	DM	29,"First operand must be register"
     6F 70 65 72 61 6E 64 
     20 6D 75 73 74 20 62 
     65 20 72 65 67 69 73 
     74 65 F2             
1EC5 1E 55 6E 64 65 66 69  3908 	DM	30,"Undefined label not allowed"
     6E 65 64 20 6C 61 62 
     65 6C 20 6E 6F 74 20 
     61 6C 6C 6F 77 65 E4 
1EE1 1F 56 61 6C 75 65 20  3909 	DM	31,"Value out of range"
     6F 75 74 20 6F 66 20 
     72 61 6E 67 E5       
1EF4 20 4D 69 73 73 69 6E  3910 	DM	32,"Missing or illegal operand size flag"
     67 20 6F 72 20 69 6C 
     6C 65 67 61 6C 20 6F 
     70 65 72 61 6E 64 20 
     73 69 7A 65 20 66 6C 
     61 E7                
1F19 21 4D 75 73 74 20 68  3911 	DM	33,"Must have label on same line"
     61 76 65 20 6C 61 62 
     65 6C 20 6F 6E 20 73 
     61 6D 65 20 6C 69 6E 
     E5                   
1F36 23 5A 65 72 6F 2D 6C  3912 	DM	35,"Zero-length string illegal"
     65 6E 67 74 68 20 73 
     74 72 69 6E 67 20 69 
     6C 6C 65 67 61 EC    
1F51 24 45 4E 44 49 46 20  3913 	DM	36,"ENDIF without IF"
     77 69 74 68 6F 75 74 
     20 49 C6             
1F62 25 4F 6E 65 2D 63 68  3914 	DM	37,"One-character strings only"
     61 72 61 63 74 65 72 
     20 73 74 72 69 6E 67 
     73 20 6F 6E 6C F9    
1F7D 26 49 6C 6C 65 67 61  3915 	DM	38,"Illegal expression"
     6C 20 65 78 70 72 65 
     73 73 69 6F EE       
1F90 27 45 6E 64 20 6F 66  3916 	DM	39,"End of string not found"
     20 73 74 72 69 6E 67 
     20 6E 6F 74 20 66 6F 
     75 6E E4             
1FA8 64 55 6E 64 65 66 69  3917 	DM	100,"Undefined label"
     6E 65 64 20 6C 61 62 
     65 EC                
1FB8 65 56 61 6C 75 65 20  3918 	DM	101,"Value out of range (forward)"
     6F 75 74 20 6F 66 20 
     72 61 6E 67 65 20 28 
     66 6F 72 77 61 72 64 
     A9                   
1FD5 FF                    3919 	DB	255
1FD6                       3920 
1FD6 2A 2A 2A 2A 2A 20 45  3921 ERRMES:	DM	'***** ERROR:  '
     52 52 4F 52 3A 20 A0 
1FE4 0D 0A 46 69 6C 65 20  3922 NOSPAC:	DB	13,10,'File creation error',13,10,"$"
     63 72 65 61 74 69 6F 
     6E 20 65 72 72 6F 72 
     0D 0A 24             
1FFC 0D 0A 49 6E 73 75 66  3923 NOMEM:	DB	13,10,'Insufficient memory',13,10,'$'
     66 69 63 69 65 6E 74 
     20 6D 65 6D 6F 72 79 
     0D 0A 24             
2014 0D 0A 46 69 6C 65 20  3924 NOFILE:	DB	13,10,'File not found',13,10,'$'
     6E 6F 74 20 66 6F 75 
     6E 64 0D 0A 24       
2027 0D 0A 44 69 73 6B 20  3925 WRTERR:	DB	13,10,'Disk full',13,10,'$'
     66 75 6C 6C 0D 0A 24 
2035 0D 0A 42 61 64 20 64  3926 BADDSK:	DB	13,10,'Bad disk specifier',13,10,'$'
     69 73 6B 20 73 70 65 
     63 69 66 69 65 72 0D 
     0A 24                
204C 0D 0A 0D 0A 45 72 72  3927 ERCNTM:	DM	13,10,13,10,'Error Count ='
     6F 72 20 43 6F 75 6E 
     74 20 BD             
205D 0D 0A 53 79 6D 62 6F  3928 SYMMES:	DM	13,10,'Symbol Table',13,10,13,10
     6C 20 54 61 62 6C 65 
     0D 0A 0D 8A          
206F 41 53 4D 00 00        3929 EXTEND:	DB	'ASM',0,0
2074 05 65 6E 64 69 66     3930 IFEND:	DB	5,'endif'
207A 02 69 66              3931 IFNEST:	DB	2,'if'
207D 72 65 F4              3932 RETSTR:	DM	'ret'
2080 00 20 20 20 20 20 20  3933 HEXFCB:	DB	0,'        HEX',0,0,0,0
     20 20 48 45 58 00 00 
     00 00                
2090                       3934 	DS	16
20A0 00 00 00 00 00        3935 	DB	0,0,0,0,0
20A5 00 20 20 20 20 20 20  3936 LSTFCB:	DB	0,'        PRN',0,0,0,0
     20 20 50 52 4E 00 00 
     00 00                
20B5                       3937 	DS	16
20C5 00 00 00 00 00        3938 	DB	0,0,0,0,0
20CA                       3939 PC:	DS	2
20CC                       3940 OLDPC:	DS	2
20CE                       3941 LABPT:	DS	2
20D0                       3942 FLAG:	DS	1
20D1                       3943 MAXFLG:	DS	1
20D2                       3944 ADDR:	DS	2
20D4                       3945 ALABEL:	DS	2
20D6                       3946 DATA:	DS	2
20D8                       3947 DLABEL:	DS	2
20DA                       3948 CON:	DS	2
20DC                       3949 UNDEF:	DS	2
20DE                       3950 LENID:	DS	1
20DF                       3951 ID:	DS	80
212F                       3952 CHR:	DS	1
2130                       3953 SYM:	DS	1
2131                       3954 BASE:	DS	2
2133                       3955 HEAP:	DS	2
2135                       3956 SYMFLG:	DS	1
2136                       3957 SYMLIN:	DS	1
2137                       3958 CODE:	DS	2
2139                       3959 DATSIZ:	DS	1
213A                       3960 RELOC:	DS	1
213B                       3961 BCOUNT:	DS	1
213C                       3962 COUNT:	DS	1
213D                       3963 ERR:	DS	1
213E                       3964 LINE:	DS	2
2140                       3965 HEXLEN:	DS	2
2142                       3966 HEXADD:	DS	2
2144                       3967 LASTAD:	DS	2
2146                       3968 HEXCNT:	DS	1
2147                       3969 CHKSUM:	DS	1
2148                       3970 LINFLG:	DS	1
2149                       3971 PREV:	DS	1
214A                       3972 IFFLG:	DS	1
214B                       3973 CHKLAB:	DS	1
214C                       3974 ERRCNT:	DS	2
214E                       3975 LSTRET:	DS	2
2150                       3976 RETPT:	DS	2
2152                       3977 LSTDEV:	DS	2
2154                       3978 SPC:	DS	1
2155                       3979 NOWAIT:	DS	1
2156                       3980 IX:	DS	2
2158                       3981 IY:	DS	2
215A                       3982 HEXPNT:	DS	2
215C                       3983 LSTPNT:	DS	2
215E                       3984 HEXBUF:	DS	HEXBUFSIZ
21A4                       3985 LSTBUF:	DS	LSTBUFSIZ
25A4                       3986 BUFPT:	DS	2
25A6                       3987 SRCBUF:	DS	BUFSIZ
29A6                       3988 	DS	100H
2AA6                       3989 	ALIGN
2AA6                       3990 STACK:	EQU	$
2AA6                       3991 START:	EQU	$


Error Count =    0

Symbol Table

a3	1610	a5	1634	abort	0273	accimm	0EA0	accj	0DE6
add	04CE	addr	20D2	afhex	1569	aimm	0EA9	alabel	20D4
align	0D6D	allret	0858	arith	0008	asmlin	0954	baddsk	2035
badflag	0AD9	badop	04E3	base	2131	bcount	213B	begin	0176
blkwrt	0028	blnk	1257	bpj	0576	bufpt	25A4	bufsiz	0400
bxj	0579	bytimm	0B53	bytsiz	05DE	c3	163C	c4	1660
c5	1673	chkdsk	02A0	chklab	214B	chkret	0830	chksum	2147
chr	212F	close	0010	codbyt	151B	code	2137	codlp	1242
con	20DA	const	0001	count	213C	cpslp	08F2	create	08AC
crlf	12E7	d2	1682	d3	1697	d4	16AC	data	20D6
datsiz	2139	dds	1291	dec	0666	default	0194	defbyt	11E5
digit	131D	dij	056A	direct	0F06	dlabel	20D8	dollar	061B
domul	051E	doret	0FB0	dorg	129C	dosymtab		13ED
dput	12A3	dsj	0D77	dskerr	02AC	dskful	15F6	e2	16B3
e3	16B8	e5	16C8	emark	1217	empty	08A4	end	115A
endcond	1143	enddat	10E6	endif	114A	endj	024E	endlin	0253
endln	0251	endop	0A12	endsym	140B	endterm	0527	enhexl	158E
enter	089B	eol	000D	equ	0D89	ercntm	204C	err	213D
err1	03BC	err10	0FEC	err11	10C9	err2	0567	err30	05A1
err4	06B6	err5	0951	err6	0D12	err7	0DBE	err8	0EBE
err9	0FC1	errcnt	214C	errj	105D	errj1	0E55	errj3	073D
errj4	0ADB	errjmp	1157	errlook	14EA	errmes	1FD6	error	02B1
errtab	1C08	escimm	1067	escmem	1060	exacc	0D00	exit	1422
exmem	0D07	exmem1	0D09	expression		049A	extend	206F
extended		0010	factor	052B	fcb	005C	filchk	135A
findop	09A6	fini	1391	finij	1214	finimm	0B73	fixed	0D33
fixline	11AC	fixup	11CC	flag	20D0	flg	042A	flgtab	0740
flushbuf		15DC	fndndp	0A06	formattab		0B23
fpreg	0745	freg	0006	fwait	0A3F	g10	0E57	gen	0BA6
gen1	0BA9	genint	1013	getch	02DA	getchr	05F0	getdat	10CF
geteol	0266	getfact	04F9	getformat		0AF5	getlab	0902
getlet	06B9	getop	03C8	getop1	03CB	getop2	03BF	getsp	0F54
getsy	0627	getsym	0602	getval	043B	gotit	06A5	gotop	0F19
grp1	0B33	grp10	0E3D	grp11	0E65	grp12	0E6D	grp13	0E97
grp14	0EC1	grp16	0F3F	grp17	0FB7	grp18	0FF0	grp19	101B
grp2	0C84	grp20	1082	grp21	1093	grp22	10AB	grp23	10CC
grp3	0CB5	grp4	0D15	grp5	0D3B	grp6	0DB5	grp7	0DC1
grp8	0DE9	grp9	0DEF	h3	16D0	h4	16D6	havdef	11DE
havmes	14F4	havndp	0A47	havop	09C3	havreg	0777	header	0102
heap	2133	hex	0690	hex1	0695	hexadd	2142	hexbuf	215E
hexbufsiz		0046	hexbyt	156A	hexcnt	2146	hexend	13B6
hexfcb	2080	hexlen	2140	hexpnt	215A	hidig	1318	i2	16DD
i3	16E6	i4	16FB	id	20DF	if	1101	ifend	2074
ifflg	214A	ifnest	207A	imm	0B8C	immed	0B5D	integer	0020
ix	2156	iy	2158	j2	1714	j3	173D	j4	1793
l0000	019C	l0002	0242	l0003	05B6	l0004	0722	l0006	0B45
l0008	0CED	l0011	0F8D	l0012	13AF	l0014	1438	l3	17B8
l4	17C8	l5	17E7	l6	1804	labchk	0928	label	092F
labpt	20CE	lastad	2144	lead	12FD	lenid	20DE	letter	06FD
lhalf	1604	line	213E	linflg	2148	list	133E	listret	1367
load	036B	longj	0F29	longr	0F68	look	07EF	lookit	087C
lookndp	0A00	lookret	0823	lookup	0878	loop	0229	lstbuf	21A4
lstbufsiz		0400	lstdev	2152	lstfcb	20A5	lstpnt	215C
lstret	214E	m3	1815	m4	1820	m5	182D	make	0016
makfil	027E	maxflg	20D1	mem	03FF	memop	0ADE	memory	0018
mode	0462	mop	0E1A	moreid	06D7	mrerr	03BA	mrops	02EC
mulop	04EB	n3	183C	ndpa	1964	ndpb	1972	ndpc	197C
ndpd	1995	ndpe	19B6	ndpf	19BB	ndpi	19C1	ndpl	1A06
ndpm	1A3A	ndpn	1A48	ndpo	1A44	ndpop	09C8	ndpp	1A4D
ndpr	1A5E	ndps	1A6C	ndpt	1AA8	ndptab	1BD4	ndpw	1AAD
ndpx	1AB3	ndpy	1AC3	needop	0080	newlin	153E	newloc	0DA3
nexb	0616	nexbt	11B7	nexfact	0520	nexlin	025B	
nexsymlin		148F	nextchj	0624	nextchr	02B6	nexterm	04D0
nextmes	14EE	nilify	08E5	nocon	04DE	node	1425	nodec	0F8F
noerr	1232	noext	14C6	nofil	1262	nofile	2014	noflg	071A
noind	048E	nomem	1FFC	nomod	02E4	nomore	06F1	none	160F
noopchk	0AB9	noops	0AC0	noprn	01BB	norev	0ACD	nospac	1FE4
not1	091A	notac	039F	notlon	0F7B	notrg	0EE4	noundef	0C43
nowait	2155	nreg	03F7	nwait	0A55	o2	184C	o3	1851
o4	185C	objbt	11C9	object	0100	oldpc	20CC	one	0DF7
onej	0E63	oneop	0DF3	onereg	0040	open	000F	operate	04BA
operr	09BE	operrj	0A1A	optab	1AD0	org	0D9D	out	1512
out10	12F0	outa	1510	outlin	12AA	outln	12CD	p3	1869
p4	1874	p5	1881	packreg	109E	paren	0582	pc	20CA
phex	1384	phexb	1339	plsmns	04B0	pmem	0CA2	preg	07C3
prerr	0276	pret	0C3F	prev	2149	print	1504	
printmes		0009	prnchk	134F	prnerr	14FE	prtcnt	12D9
put	0B9C	putadd	0C5C	putaddj	0F03	putbj	0B5A	putbw	0C12
putbyt	0BF2	putcd	0BE1	putchk	0C1A	putchr	15D2	putinc	0BDD
putmem	0B13	putop	0D69	putreg	0AAA	putwor	0BEB	pxreg	0CAE
r3	1889	r4	18A8	r5	18B5	read	0014	readid	06D2
real	0028	reg	0002	regchk	077C	regtab	07E7	reloc	213A
reperr	14D5	retpt	2150	retstr	207D	rightson		1497
rngerr	120D	rop	0E2D	rr	0321	rr1	0325	s3	18C4
s4	18FC	s5	191B	savcd	149F	savdat	10F7	savflg	072E
savnflg	09DA	savpt	137E	scanb	060B	scanreg	07D0	scant	060E
segchk	033C	segtab	07EB	setdma	001A	sholin	1248	sij	056D
skipcd	110A	skiplp	110E	small	080F	smput	0C39	spc	2154
spcfun	1285	specialop		0A25	spend	127B	srcbuf	25A6
sreg	0004	st0dest	0AA6	stack	2AA6	stackop	0010	start	2AA6
sterr	03B8	stimm	0B81	store	0361	strgdat	05C7	string	05A4
strtlin	1329	supz	1325	sym	2130	symdmp	13DA	symflg	2135
symlin	2136	symmes	205D	symsav	072A	symwid	0005	system	1517
t4	1938	tab	14BF	tabval	146B	term	04E8	testtyp	11C2
try2xm1	0A1C	twobt	0C7A	u2	193F	uhalf	15FC	undef	20DC
undefid	0000	uval	0592	val	03DF	val1	03E1	w4	1944
wrend	115C	wrtbuf	1369	wrterr	2027	wrthex	15B7	wrtsym	145F
x3	194B	x4	1951	xm1	195E	xreg	0003	xrg	037E
zerlen	05E8	
D:
