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