You've already forked Paterson-Listings
mirror of
https://github.com/DOS-History/Paterson-Listings.git
synced 2026-04-29 09:13:41 -07:00
8065d4d8be
Initial import of the transcribed source code from Tim Paterson's DOS listings. Co-authored-by: RichCini <rich.cini@gmail.com>
3754 lines
170 KiB
Plaintext
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
|
|
|