Files
Yufeng Gao 8065d4d8be Initial commit
Initial import of the transcribed source code from Tim Paterson's
DOS listings.

Co-authored-by: RichCini <rich.cini@gmail.com>
2026-04-22 01:04:31 +10:00

3754 lines
170 KiB
Plaintext

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