INDEX 287 directive, 7-1 387 support, 7-2 A-after operator in macros, 11-6 A86 environment variable, 3-4 A86.

LIB file, 13-3 A86.LIB library catalog, 2-1 A86LIB environment variable, 13-5 A86LIB library tool, 13-3 AAD with operand, 5-4 AAM with operands, 5-4 about the author, 1-6 ABS operator in EXTRN, 10-6 absolute segments in OBJ mode, 10-10 address, my, 1-1 align operand list, 10-9 align specification, 10-9 alignment of words, 9-3 allocation directives, 9-3 alphabetical listing, 13-1 ampersand, use to specify standard input, 3-5 AND expression operator, 8-7 angle brackets in MASM, 12-3 archiving, 13-7 arithmetic on floating-point numbers, 7-4 assembler variables, 9-10 assertion checking, 9-10 ASSUME directive, 6-3 asterisk multiplication operator, 8-6 AT combine type, 10-10 at-sign @, in symbols, 4-2 attribute operators/specifiers, 8-9 AUTOEXEC.BAT, 3-4 B operator in EXTRN, 10-6 B override expression operator, 8-9 B-before operator in macros, 11-6 base registers, 6-2 base, default, 12-2 based structure example, 6-2 based structures, 9-6 bases for numbers, 8-1 bases, ambiguous, 8-1 batch file controls, 11-14 BCD numbers, 7-5 benefits of registration, 1-3 BIN extension for object files, 9-3 BIN extension, 3-2 binary base, 8-1 Binary Coded Decimal numbers, 7-5 biography, 1-6 BIOS interface, books on, 3-1 BIT expression operator, 8-6 books on assembler, recommended, 3-1 Boolean negation operator, 8-7 Borland Turbo C, using A86 with, 13-7 brackets, 8-11 British contact, 1-1 bugs, reporting, 1-6

17-1

17-2 built-in constant names, 7-4 built-in symbols, 16-1 built-in symbols, equates to, 9-8 BY operator, 8-5 BYTE align type, 10-9 BYTE override expression operator, 8-9 BYTE PTR and WORD PTR, 12-6 C programming language, linking to, 10-1 C switch, 3-2 C, inline assembly statements, 13-7 C-loops in macros, 11-5 capacity, 1-5 capacity, source file, 3-6 case sensitivity, 3-2 case-insensitive comparisons, 8-9 catalog file A86.LIB, 13-3 categories of A86 elements, 4-1 cb specifier, 6-6 cd specifier, 6-6 changing the default base, 8-2 character loops in macros, 11-5 characters allowable in symbols, 4-2 characters recognized in A86 language, 4-2 choices for 87 operands, 7-6 class name, specifying, 10-11 classes, 10-4 clear-register macro, 11-1 clear-register macro, 11-5 closing of macro loops, 11-10 code display, 13-6 CODE ENDS directive, 9-2 code generation of forward references, 9-7 code label specifier, 6-6 CODE SEGMENT directive, 9-1 CODE segment, link to Pascal, 10-11 colon operator, 8-11 colon, deciding when to use, 4-4 columnar output, 2-2 COM extension, 3-2 COM programs, how to detect, 12-1 combine operand list, 10-9 combine specification, 10-9 combine types, 10-9 combining switches, 3-4 COMMENT directive, 4-2 comments in macros, removal of, 11-2 comments, 4-2 COMMON combine type, 10-10 comparison of strings, 8-8 compatibility, 12-1 compression of macro text, 11-2 computation models, 10-2 concatenating terms in an expression, 8-5 conditional assembly and macros, 11-13 conditional assembly and XREF, 11-14 conditional assembly, 11-11 conditional calls, see IF, 5-1

17-3 conditional jump, far, see IF, 5-1 conditional returns, 5-2 constant operand to FLD, 7-4 constants, floating, 8-2 constants, format of, 8-1 constants, large, 9-5 constants, overview, 4-4 contacting me, 1-6 contents, 0-3 control-character notation, 8-5 control-Z key, 2-2 controls, invocation, user-definable, 11-14 conversion of macros, 13-3 crashes, system, on lack of FWAIT, 7-2 creating programs to assemble, 3-1 credit cards, 1-1 cross reference listing, 13-1 cw specifier, 6-6 D operator in EXTRN, 10-6 D override expression operator, 8-9 D switch, 3-3 data allocation statements, samples, 4-1 DATA ENDS directive, 9-2 DATA SEGMENT directive, 9-1 DATA segment, link to Pascal, 10-11 DB directive, 9-3 DD directive, 9-3 DD examples, 9-5 DEC, multiple and numeric operands, 5-1 decimal base, 8-1 decimal output of macro operands, 11-8 default base, changing, 8-2 default base, decimal, 3-3 default bases, 8-1 default forward references, 3-4 default output file name, 3-6 default segment registers, 6-2 default segment, OBJ mode, 10-12 defined symbols, testing for, 8-8 defining macros, 11-1 demonstration, 2-1 description of 87 instructions, 7-6 description of instructions, 6-8 digits in file names, 3-6 digits, hex, 8-1 directives in a86, 9-1 directives, samples, 4-1 displacement field, 6-4 display of symbol values, 13-2 displaying macro expansions, 13-2 division operator, 8-6 dollar sign $, in symbols, 4-2 dollar sign operator, 8-12 DOS interface, books on, 3-1 double hash ## signs in macros, 11-2 double hash signs ## in macros, 11-13 double-precision, 7-5

17-4 double-quotes in strings, 9-5 doubleword pointer initialization, 9-5 DQ directive, 9-3 DQ example, 9-5 DT directive, 9-3 DT example, 9-5 DUP construct, 9-4 duplicate definitions, 9-9 DW directive, 9-3 DWORD override expression operator, 8-9 E switch, 3-3 EA byte, 6-4 eb specifier, 6-6 editing programs, 3-1 effective address codes table, 6-5 effective addresses, 6-1 effective addresses, encoding, 6-4 ELSE, 11-12 ELSEIF, 11-12 EM end-of-macro symbol, 11-1 emulation, floating-point, 7-2 encoding of effective addresses, 6-4 encoding of floating-point numbers, 8-2 END directive, 10-7 END in non-OBJ mode, 12-4 end of a macro, 11-1 end of file, 10-7 ENDIF, 11-12 ENDM, 12-3 ENDP directive, 9-11 ENDS directive, OBJ mode, 10-11 ENDS directives in COM mode, 9-2 English contact, 1-1 environment string, invocation equates in, 11-15 environment variable A86LIB, 13-5 environment variable, a86, 3-4 EQ expression operator, 8-8 EQ in comparing strings, 8-8 EQU directive, 9-8 equal-sign string compare, 8-9 equals-sign directive, 9-10 equates to built-in symbols, 9-8 equates to interrupts, 9-9 ER end-of-repeat symbol, 11-4 ERDEMO.BAT batch file, 2-1 ERR extension, 3-3 error file redirection, 3-3 error messages, 1-5 error messages, explanation, 14-1 evaluating macro operands, 11-8 EVEN directive, 9-3 ew specifier, 6-6 EX exit macro symbol, 11-10 examples of A86 statements, 4-1 examples of floating constants, 8-3 examples of numbers, 4-2 examples of type matching, 4-5

17-5 examples of useful memory accesses, 6-3 exclamation point operator, 8-7 exclusive features, 5-1 EXE programs, how to detect, 12-1 exiting from middle of macro, 11-10 EXITM simulation, 11-10 EXITM, 12-3 EXMAC demo, 2-2 EXMAC tool, 13-2 expansions of macros, displaying, 13-2 explicit EXTRNs, 3-4 explicit EXTRNs, forcing, 10-7 explicit OBJ specification, 10-1 explicit public names, 10-5 explicit WAITs, 7-1 exponent specifier, 8-2 expressions in conditional assembly, 11-11 expressions involving forward references, 9-7 extended-precision operands, 7-5 extensions of source files, 3-6 external names and LINK, 10-3 extra coprocessor support, 7-2 EXTRN directive, 10-6 EXTRNs, explicit, 3-4 F operator in EXTRN, 10-6 F override expression operator, 8-9 F switch, 3-3 f switch, 7-3 F6 to terminate file, 2-2 FAKE.EXE, 13-7 far label constants, 8-12 FAR override expression operator, 8-9 FBANK instruction on IIT-2C87, 7-2 FDISI instruction, 7-1 features, exclusive, 5-1 FENI instruction, 7-1 file containing symbols, 13-1 file in which a symbol was defined, 13-2 file lists, 3-6 file maintenance, 3-6 file names, digits in, 3-6 files, source, 3-1 finding symbol values, 13-2 FLD, immediate operand, 7-4 floating constants, examples of, 8-3 floating point operand types, 7-5 floating point operands, choices for, 7-6 floating point stack, 7-3 floating-point constants, format of, 8-2 floating-point emulation, 7-2 floating-point processor, 7-1 footprint, code generation, 1-3 forcing explicit EXTRNs, 10-7 forcing explicit EXTRNs, 3-4 forcing library lookup, 13-5 format of assembler source lines, 4-3 format of macros, 11-2

17-6 FORTRAN, 10-10 forward references, 12-2 forward references, 9-6 forward references, default, 3-4 fragments, 10-3 FSETPM instruction, 7-1 FSTSW AX form, 7-1 FWAIT instruction, 7-1 Gates, Bill, 13-7 GE expression operator, 8-8 generated code, displaying, 13-6 Great Britain contact, 1-1 greater-mark ">" for local symbols, 5-3 GROUP directive, 10-12 groups, reason for, 10-3 GT expression operator, 8-8 hash sign # in invocation, 13-5 hash sign #, conditional assembly, 11-11 hash signs # in macros, 11-13 hash signs # in macros, 11-2 hash signs #, literalizing in macros, 11-2 hexadecimal base, 8-1 HIGH operator, 8-4 high-level language computation models, 10-2 history of A86, 15-1 ib specifier, 6-6 IBM, 12-1 IBM-PC AT computer, 7-2 IEEE standard for floating-point, 8-2 IF conditional assembly symbol, 11-11 IF statement, 5-1 IFDIF, 12-3 IFE, 12-3 IFIDN, 12-3 IIT-2C87 support, 7-2 immediate operand to FLD, 7-4 implicit public names, 10-5 INC, multiple and numeric operands, 5-1 incentives to register, 1-3 INCLUDE, 12-4 indefinite repeats, 11-5 index expressions, 8-4 index registers, 6-2 indexed memory, 6-2 inferior assemblers, 12-1 inferior assemblers, porting to, 12-5 initializations of floating-point numbers, 7-4 instruction set chart, explanation, 6-6 instruction set, 87, 7-6 instruction statements, samples, 4-1 instructions, list of, 6-8 instructions, special, 6-7 integer operands to 8087, 7-5 Intel assembler, 12-1 Intel meeting, 10-3 interactive macro tool, 13-3 intermediate numeric results, 7-5

17-7 interrupt equates, 9-9 interrupts, grabbing, 12-2 invocation of A86, 3-1 invocation variables in environment string, 11-15 invocation variables, 11-14 IRET operand, 5-2 IRP and IRPC functionality, 11-1 IRP, 12-3 IRPC, 12-3 iw specifier, 6-6 juxtaposing terms in an expression, 8-5 keyboard entry coding example, 11-3 keywords, 4-2 L last-operand in macros, 11-5 L switch, 3-3 L2E and L2T constants, 7-4 LABEL directive, 9-11 labels, examples, 4-4 language, A86, 4-1 large constant initialization, 9-5 large macro operand numbers, 11-9 large model of segmentation, 10-2 last-operand in macros, 11-5 LE expression operator, 8-8 LEA instruction, optimizing, 3-3 LEA optimization, 5-4 leading underscore, in C, 10-1 legal terms, 1-1 length byte, generating in macro, 11-8 length of a symbol name, 4-2 LG2 constant, 7-4 line-format, 4-3 LINES.8 library file, 2-1 LINK program, 10-3 linkage, 10-1 list of instructions, 6-8 listing macros, 13-3 listing of 87 instructions, 7-6 listing of cross references, 13-1 listing of symbols, 13-1 listings with A86, 13-5 LN2 constant, 7-4 loading named segments, 12-2 local labels in macros, 11-10 local labels, simulating, 12-5 local symbols, 5-3 local symbols, specifying, 9-10 location, this, operator, 8-12 logical operators, 8-7 long default jump, 3-3 LONG expression operator, 8-9 looping in macros, 11-4 loops with large index, 11-9 LOW operator, 8-4 lower case letters in symbols, 3-2 LT expression operator, 8-8 m specifier, 6-6

17-8 macro compatibility, 12-2 macro exiting from within loop, 11-10 macro expansion demo, 2-2 macro expansions, displaying, 13-2 macro file, default, 3-5 macro loops, closing, 11-10 macro loops, skipping increments, 11-6 macro operand substitution, 11-2 macro operands, computing number, 11-9 macros and conditional assembly, 11-13 macros, 11-1 macros, defining, 11-1 mailing list, 1-4 main module, 10-3 MAIN symbol, 10-7 maintenance of files, 3-6 manual, scope of, 3-1 MASK, 12-4 MASM 8087/287 code generation, 7-1 MASM compatibility, 12-1 MASM compatible CODE, DATA, 10-11 MASM conditional assembly, simulating, 11-14 MASM, mimicking, 13-7 matching of types, examples, 4-5 matrix multiplication on IIT-2C87, 7-2 maximum length of a symbol name (127), 4-2 maximum source file size, 3-6 meeting at Intel, 10-3 MEMORY combine type, 10-10 memory forms, overlooked, 6-3 memory operand forms to 87 instructions, 7-4 memory requirements, 3-6 memory resident code, 12-2 memory variables, specifying, 6-1 menu systems and A86, 3-5 MEXP.BAT batch file, 2-2 Microsoft, 12-1 minus operator, 8-5 MIX tool, compatibility, 3-4 mixing constant types in word inits., 8-5 mnemonics, 8086, 6-8 mnemonics, one for many instructions, 4-4 MOD modulo operator, 8-6 model of segmentation, grotesque, 10-3 ModRM byte, 6-4 modular programming, encouraging, 13-6 module names, 10-5 modules, object, 10-3 Morse, Steve, 3-1 MOV of immediate value into segment reg, 5-2 MOV of memory operands, 5-2 MOV of segment registers, 5-2 MOV substitute for LEA, 5-4 MOV with three operands, 5-2 move-memory macro example, 11-1 MSDOS.8 library file, 2-1 MTCOLS.BAT batch file, 2-2

17-9 multiple allocation using DUP, 9-4 multiple files in OBJ mode, 10-1 multiple increments in macro loops, 11-6 multiple operands to PUSH,POP,INC,DEC, 5-1 multiply by 10 coding example, 10-1 multiply operator, 8-6 NAME directive, 10-5 NAME in non-OBJ mode, 12-4 name of output files, 3-2 NE expression operator, 8-8 NE in comparing strings, 8-8 NEAR expression operator, 8-11 NEC chips, lack of AAD with operands, 5-4 NEC chips, special instructions, 6-8 negation, Boolean, 8-7 negative R-loops in macros, 11-7 nested IF blocks, 11-12 nested PROCs, lack of, 9-10 nesting of loops in macros, 11-8 NIL prefix, 9-9 non-combinable segments, 10-10 NOP and EVEN directive, 9-3 Norton, Peter, 3-1 NOT expression operator, 8-7 null invocation names, 11-15 null operands to macros, 11-3 number operands in expressions, 8-4 numbers, examples, 4-2 numbers, examples, 8-1 numbers, floating, 8-2 numbers, format of, 8-1 numeric operands to INC,DEC, 5-1 O switch, 10-1 O switch, 3-2 O switch, 3-4 OBJ file generation, 3-4 OBJ internal optimization, 3-4 OBJ production made easy, 10-1 object file name, 3-2 object modules, 10-3 octal base, 8-1 OFFSET expression operator, 8-10 opcodes, 8086, 6-8 opcodes, 87, 7-6 operand choices for 87 instructions, 7-6 operand number, generating, 11-9 operand types to 87 instructions, 7-4 operating system requirements, 3-6 operation of A86, 3-1 operator precedence, 8-13 Optimized LEA instruction, 5-4 OR expression operator, 8-7 ORG directive, 9-2 outer segment, OBJ mode, 10-12 output files, naming, 3-2 overlooked memory forms, 6-3 overrides, segment, 12-2

17-10 overrides, segment, 6-3 overview of A86, 1-4 overview of expressions, 8-3 PAGE directive, 12-4 PAGE specifier, 10-9 PAGE.8 program, 2-1 PAGE.BAD source file, 2-1 PAGE.COM program, 2-1 PARA specifier, 10-9 parenthesized operand numbers, 11-9 Pascal segment names, 10-11 Pascal, linking to, 10-2 passing macro operands by value, 11-8 period operator, 8-5 permanent switch settings, 3-4 phone number, my, 1-1 phone numbers of my bulletin boards, 1-6 PI constant, 7-4 piping file names to A86, 3-5 plus operator, 8-5 POP, multiple operands, 5-1 port programs to inferior assemblers, 12-5 pound sign #, SEE hash sign Power C, compatibility, 3-4 powers of ten, 8-2 precedence of operators, 8-13 prices, 1-2 printer eject program, 2-1 PROC directive, 9-10 procedure-level summary listings, 13-1 procedures, 9-10 program location operator, 8-12 program starting location, OBJ mode, 10-7 programs, how to create, 3-1 prompt for file names, 3-5 protected mode instructions, 6-7 PTR operator, 8-5 PUBLIC combine type, 10-9 PUBLIC directive, 10-5 public names and LINK, 10-3 PUSH multiple operands, simulating, 12-5 PUSH, multiple operands, 5-1 Q operator in EXTRN, 10-6 Q override expression operator, 8-9 question mark ?, in symbols, 4-2 question-mark operator, 9-4 quoted-string macro operands, 11-3 QWORD override expression operator, 8-9 R-loops in macros, 11-4 R-loops, negative, 11-7 RADIX directive, 8-2 rb register specifier, 6-7 RECORD, 12-4 red tape, 1-4 red tape, 10-1 redefinable symbols, 5-3 redefining invocation variables, 11-15

17-11 redefining symbols, 9-9 redirection of error files, 3-3 references to a symbol, 13-2 registers, 8086, 4-3 registers, general, 6-1 registration benefits, 1-3 registration benefits, 13-3 relational operators, 8-8 relocation and linkage, 10-1 repeating code using DUP, 9-4 REPT directive, simulating, 11-9 requirements, system, 3-6 reserved symbols, 16-1 RET instruction, meaning of, 9-10 RET operand, 5-2 RETF instruction and PROC, 9-10 RETF operand, 5-2 REV.8 source file, 2-1 REV.COM program, 2-1 reversing strings example, 2-1 revision history, 15-1 rw register specifier, 6-7 S switch, 3-4 samples of A86 statements, 4-1 scientific notation, 8-2 SEG operator, 10-13 SEGMENT AT, non-OMF, 12-4 SEGMENT directive, non-OBJ mode, 12-4 SEGMENT directive, OBJ mode, 10-8 segment override colon operator, 8-12 segment overrides, 12-2 segment overrides, 6-3 segment registers, default, 6-2 segmentation and memory access, 6-2 segmentation models, 10-2 segments in A86, 9-1 segments, loading named, 12-2 shareware distribution, 0-1 shifting expression operators, 8-6 SHL and SHR expression operator, 8-6 SHORT expression operator, 8-9 simple macro syntax, 11-1 single-precision, 7-5 size of macro operands, 11-8 size of source files, 3-6 size of structures, 8-12 slash division operator, 8-6 slash specifier, 6-4 small model of computation, 10-2 source files, 3-1 source libraries, 13-3 special instructions, 6-8 Specialty Software, 7-2 speed, 1-4 square brackets operator, 8-11 ST floating-point stack specifier, 8-12 STACK combine type, 10-9

17-12 STACK segment, relocatable, 10-11 stack segments in OBJ mode, 10-9 stack, floating point, 7-3 standard input and output, 13-3 standard input command tail, 3-5 starting location, OBJ mode, 10-7 strategies for file maintenance, 3-6 string allocation, 9-5 string comparison operators, 8-8 STRUC directive, 9-6 STRUC, implicit via SEGMENT AT, 12-4 structure initialization, 12-3 structure, based, example, 6-2 structured programming constructs, 5-1 structures and MASM, 12-3 structures, size of, 8-12 sub-directories of programs, 3-6 substitution of macro operands, 11-2 subtraction operator, 8-6 SUBTTL, 12-4 summary of procedure calls, 13-1 suppressing symbols file, 3-4 switches, assembler, 3-2 switches, combining, 3-4 switches, user-definable, 11-14 SYM extension, 3-2 symbol table file name, 3-2 symbols file, 13-1 symbols file, suppressing, 3-4 symbols listing, 13-1 symbols, allowable characters for, 4-2 symbols, redefining, 9-9 symbols, reserved, 16-1 system crashes on lack of FWAIT, 7-2 system requirements, 3-6 T operator in EXTRN, 10-6 T override expression operator, 8-9 table of contents, 0-3 table of effective address bytes, 6-5 tabs, diatribe against, 4-3 TBYTE override expression operator, 8-9 TCOLS.8 source file, 2-2 TCOLS.COM program, 2-2 telephone number, my, 1-1 telephone numbers of my bulletin boards, 1-6 terms, legal, 1-1 TEST with one operand, 5-4 Texas, 11-12 Texas, 11-14 TEXT segment name, 10-12 THIS operator, 8-12 tips for memory access, 6-3 TITLE, 12-4 TO in invocation, 3-2 Turbo C, using A86 with, 13-7 Turbo Pascal segment names, 10-11 Turbo Pascal, linking to, 10-2

17-13 type display of symbols, 13-1 type matching, examples, 4-5 TYPE operator, 8-12 types in the a86 language, 4-3 types, assumed, 10-2 undefined symbol types, assumed, 10-2 undefined symbols listing in OBJ mode, 10-6 underscore, in symbols, 4-2 underscore, leading, in C, 10-1 underscores within numbers, 8-1 unusable user symbols, 16-1 up arrow symbol and invocation equates, 11-15 USAGE.8 library file, 2-1 value, passing by, 11-8 values of symbols, 13-2 variable forward references, 9-7 variable operands in expressions, 8-4 variables declared at invocation, 11-14 variables, 9-10 variables, examples, 4-3 verbose forms, floating point, 7-3 verbose PROC, 9-11 version history, 15-1 W operator in EXTRN, 10-6 W override expression operator, 8-9 WAIT instruction, 7-1 Wettstein, Greg, 1-6 WIDTH, 12-4 wild cards in source files, 3-2 wild cards, order of, 3-6 WORD align type, 10-9 WORD override expression operator, 8-9 WORD PTR, 12-6 X specifier for numeric bases, 8-1 X switch, 10-7 X switch, 3-4 XCHG of memory operands, 5-2 XCHG with segment register, 5-2 XOR expression operator, 8-7 XREF and conditional assembly, 11-14 XREF demo, 2-2 XREF tool, 13-1 XRF extension, 13-1