home *** CD-ROM | disk | FTP | other *** search
Text File | 2013-11-08 | 185.9 KB | 5,701 lines |
- Microsoft(R) Macro Assembler Reference
-
-
- for the MS-DOS(R) and OS/2 Operating Systems
-
-
- Microsoft Corporation
- Information in this document is subject to change without notice and does
- not represent a commitment on the part of Microsoft Corporation. The
- software described in this document is furnished under a license agreement
- or nondisclosure agreement. The software may be used or copied only in
- accordance with the terms of the agreement. The purchaser may make one copy
- for backup purposes. No part of this manual may be reproduced or
- transmitted in any form or by any means, electronic or mechanical, including
- photocopying and recording, for any purpose other than the purchaser's
- personal use without the written permission of Microsoft Corporation.
-
-
- (C) Copyright Microsoft Corporation, 1987, 1988. All rights reserved.
- Simultaneously published in the U.S. and Canada.
-
- Printed and bound in the United States of America.
-
- Timings and encodings in this manual are used with permission of Intel and
- come from the following publications:
-
- Intel Corporation. iAPX 86, 88, 186 and 188 User's Manual, Programmer's
- Reference. Santa Clara, Calif. 1986.
- Intel Corporation. iAPX 286 Programmer's Reference Manual including the iAPX
- 286 Numeric Supplement, Santa Clara, Calif. 1985.
-
- Intel Corporation. 80386 Programmer's Reference Manual. Santa Clara, Calif.
- 1986
- Intel Corporation. 80387 80-bit CHMOS III Numeric Processor Extension. Santa
- Clara, Calif. 1987.
- Intel Corporation. i486 Microprocessor, Santa Clara, Calif. 1989.
-
- Document No. 410610002-500-R01-1287
- 10 9 8 7 6 5 4 3 2 1
-
- Part No. 04696
-
-
-
- Document Conventions
-
-
- KEY TERMS
- Bold type indicates text that must be typed exactly as shown. This includes
- assembly-language instructions, directives, symbols, and operators, as well
- as keywords in other languages.
-
-
- placeholders
- Italics indicate variable information supplied by the user.
-
- Examples
- This typeface indicates example programs, user input, and screen output.
-
-
- [optional items]
- Double brackets indicate that the enclosed item is optional.
-
-
- {choice1 | choice2}
- Braces and a vertical bar indicate a choice between two or more items. You
- must choose one of the items unless double square brackets surround the
- braces.
-
-
- Repeating elements...
- Three dots following an item indicate that more items having the same form
- may be typed.
-
- SHIFT+F1
- Small capital letters indicate key names.
-
-
-
- Tools
-
-
-
- BIND
-
- The BIND utility converts an OS/2 program to run under both DOS and OS/2.
-
- Command-Line Syntax
- BIND infile [libraries] [options]
-
-
- Options
- ╓┌───────────────────────────────────┌───────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /HELP Option name: /HELP. Calls QuickHelp
- for help on BIND.
-
- /MAP [ mapfile] Option name: /M[AP]. Generates a map
- of the DOS part of the executable file.
-
- /NAMES functions/NAMES @filename Option name: /N[AMES]. Specifies
- functions supported under OS/2 only.
- Use with a list of functions separated
- by spaces or a file specification
- preceded by @.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- preceded by @.
-
- /NOLOGO Option name: /NOLOGO. Suppresses the
- BIND copyright message.
-
- /O outfile Option name: /O[UTFILE]. Specifies the
- name for the bound application.
-
- /? Option name: /?. Displays a brief
- summary of BIND command-line syntax.
-
-
-
-
-
-
-
- Environment Variables
- ╓┌───────────┌───────────────────────────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- LIB Specifies search path for library files.
- LINK Specifies default command-line options for the linker.
- TMPf Specifies path for the VM.TMP file.
-
-
-
-
- Microsoft(R) CodeView(R) Debugger
-
- The Microsoft(R) CodeView(R) debugger runs the assembled or compiled program
- while simultaneously displaying the program source code, program variables,
- memory locations, processor registers, and other pertinent information.
-
- Command-Line Syntax
- CV [options] executablefile [arguments]
- CVP [options] executablefile [arguments]
-
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /2 Permits the use of two monitors.
-
- /25 Starts in 25-line mode.
-
- /43 Starts in 43-line mode.
-
- /50 Starts in 50-line mode.
-
- /B Starts in black-and-white mode.
-
- /C commands Executes commands on start-up.
-
- /D[ buffersize] Enables disk overlays (CV only).
-
- /E Enables use of expanded memory (CV only).
-
- /F Exchanges screens by flipping between
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /F Exchanges screens by flipping between
- video pages (CV only).
-
- /G Eliminates refresh snow on CGA monitors
- (CV only).
-
- /I[0 | 1] Turns nonmaskable-interrupt and
- 8259-interrupt trapping on (/I1) or off
- (/I0) (CV only).
-
- /K Disables installation of keyboard
- monitors for the program being debugged.
-
- /L dll Loads symbolic information for the
- specified dynamic-link library (CVP
- only).
-
- /M Disables CodeView use of the mouse (use
- this option when debugging an
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- this option when debugging an
- application that supports the mouse).
-
- /N[0 | 1] /N0 tells CodeView to trap nonmaskable
- interrupts; /N1 tells it not to trap (CV
- only).
-
- /O Enables debugging of multiple processes
- (CVP only).
-
- /R Enables 80386/486 debug registers (CV
- only).
-
- /S Exchanges screens by changing buffers
- (primarily for use with graphics
- programs) (CV only).
-
- /TSF Toggles TOOLS.INI entry to read/not read
- the CURRENT.STS file.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- the CURRENT.STS file.
-
- /X Enables use of extended memory (CV only).
-
-
-
-
-
-
-
- Environment Variables
-
- variable Description
- ────────────────────────────────────────────────────────────────────────────
- HELPFILES Specifies path of help files or list of help filenames.
- INIT Specifies path for TOOLS.INI and CURRENT.STS files.
-
-
-
-
- CVPACK
-
- The CVPACK utility reduces the size of an executable file that contains
- CodeView debugging information.
-
- Command-Line Syntax
- CVPACK [options] exefile
-
-
- Options
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /HELP Calls QuickHelp for help on CVPACK.
- /P Packs the file to the smallest possible size.
- /? Displays a brief summary of CVPACK command-line syntax.
-
-
-
-
- EXEHDR
-
- The EXEHDR utility displays and modifies the contents of an executable-file
- header.
-
- Command-Line Syntax
- EXEHDR [options] filenames
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option action
- ────────────────────────────────────────────────────────────────────────────
- /HEAP: number Option name: /HEA[P]. Sets the heap
- allocation field to number bytes for
- segmented executable files.
-
- /HELP Option name: /HEL[P]. Calls QuickHelp
- for help on EXEHDR.
-
- /MAX: number Option name: /MA[X]. Sets the maximum
- Option action
- ────────────────────────────────────────────────────────────────────────────
- /MAX: number Option name: /MA[X]. Sets the maximum
- memory allocation to number paragraphs
- for DOS executable files.
-
-
-
- /MIN: number Option name: /MI[N]. Sets the minimum
- memory allocation to number paragraphs
- for DOS executable files.
-
- /NEW Option name: /NE[WFILES]. Enables
- support for HPFS.
-
- /NOLOGO Option name: /NO[LOGO]. Suppresses the
- EXEHDR copyright message.
-
- /PM: type Option name: /P[MTYPE]. Sets the
- application type for OS/2 or Microsoft
- Windows[tm], where type is one of the
- Option action
- ────────────────────────────────────────────────────────────────────────────
- Windows[tm], where type is one of the
- following: PM (or WINDOWAPI), VIO (or
- WINDOWCOMPAT), or NOVIO (or
- NOTWINDOWCOMPAT).
-
- /RESET Option name: /R[ESETERROR]. Clears the
- error bit in the header of an OS/2 or
- Windows executable file.
-
- /STACK: number Option name: /S[TACK]. Sets the stack
- allocation to number bytes.
-
- /V Option name: /V[ERBOSE]. Provides more
- information about segmented executable
- files, including the default flags in
- the segment table, all run-time
- relocations, and additional fields from
- the header.
-
- Option action
- ────────────────────────────────────────────────────────────────────────────
- /? Option name: /?. Displays a brief
- summary of EXEHDR command-line syntax.
-
-
-
-
-
-
- EXP
-
- The EXP utility deletes all files in the hidden DELETED subdirectory of the
- current or specified directory. EXP is used along with RM and UNDEL to
- manage backup files.
-
- Command-Line Syntax
- EXP [options] [directories]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /HELP Calls QuickHelp for help on EXP.
-
- /Q Suppresses display of deleted files.
-
- /R Recurses into subdirectories of the
- current or specified directory.
-
- /? Displays a brief summary of EXP
- command-line syntax.
-
-
-
-
-
-
- HELPMAKE
-
- The HELPMAKE utility creates help files and customizes the help files
- supplied with Microsoft language products.
-
- Command-Line Syntax
- HELPMAKE {/E[n] | /D[c] | /H | /?} [options] sourcefiles
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /A c Specifies c as an application-specific
- control character for the help database,
- marking a line that contains special
- information for internal use by the
- application.
-
- /C Indicates that the context strings are
- case sensitive so that at run time all
- searches for help topics will be case
- sensitive.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- sensitive.
-
- /D Fully decodes the help database.
-
- /DS Splits the concatenated, compressed help
- database into its components, using
- their original names. No decompression
- occurs.
-
- /DU Decompresses the database and removes
- all screen formatting and
- cross-references.
-
- /E[ n] Creates ("encodes") a help database from
- a specified text file (or files). The
- optional n indicates the amount of
- compression to take place. The value of
- n can range from 0 to 15.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /H[ELP] Calls the QuickHelp utility. If HELPMAKE
- cannot find QuickHelp or the help file,
- it displays a brief summary of HELPMAKE
- command-line syntax.
-
- /K filename Specifies a file containing
- word-separator characters. This file
- must contain a single line of characters
- that separate words. ASCII characters
- from 0 to 32 (including the space) and
- character 127 are always separators. If
- the /K option is not specified, the
- following characters are also considered
- separators:
-
-
- /L Locks the generated file so that it
- cannot be decoded by HELPMAKE at a later
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- cannot be decoded by HELPMAKE at a later
- time.
-
- /NOLOGO Suppresses the HELPMAKE copyright
- message.
-
- /O outfile Specifies outfile as the name of the
- help database. The name outfile is
- optional with the /D option.
-
-
-
- /S n Specifies the type of input file,
- according to the following n values:
-
- /T During encoding, translates dot commands
- to application-specific commands. During
- decoding, translates application
- commands to dot commands. The /T option
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- commands to dot commands. The /T option
- forces /A:.
-
- /V[ n] Sets the verbosity of the diagnostic and
- informational output, depending on the
- value of n. The value of n can range
- from 0 to 6.
-
- /W width Sets the fixed width of the resulting
- help text in number of characters. The
- value of width can range from 11 to 255.
-
- /? Displays a brief summary of HELPMAKE
- command-line syntax.
-
-
-
-
-
- H2INC
-
- The H2INC utility converts C header (.H) files into MASM- compatible include
- (.INC) files. It translates declarations and prototypes, but does not
- translate code.
-
- Command-Line SyntaxH2INC [options] filename.H
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /C Passes comments in the .H file to the
- .INC file.
-
- /Fa [ filename] Specifies that the output file contain
- only equivalent MASM statements. This is
- the default.
-
- /Fc [ filename] Specifies that the output file contain
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /Fc [ filename] Specifies that the output file contain
- equivalent MASM statements plus original
- C statements converted to comment lines.
-
- /HELP Calls QuickHelp for help on H2INC.
-
- /Ht Enables generation of text equates. By
- default, text items are not translated.
-
- /Mn Instructs H2INC to explicitly declare
- the distances for all pointers and
- functions.
-
- /Ni Suppresses the expansion of nested
- include files.
-
- /Zn string Adds string to all names generated by
- H2INC. Used to eliminate name conflicts
- with other H2INC-generated include files.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- with other H2INC-generated include files.
-
-
-
- /Zu Makes all structure and union tag names
- unique.
-
- /? Displays a brief summary of H2INC
- command-line syntax.
-
-
-
-
- Note: H2INC also supports the following options from Microsoft C, version
- 6.0: /AC, /AH, /AL, /AM, /AS, /AT, /D, /F, /Fi, /G0, /G1, /G2, /G3, /G4,
- /Gc, /Gd, /Gr, /I, /J, /Tc, /U, /u, /W0, /W1, /W2, /W3, /W4, /X, /Za, /Zc,
- /Ze, /Zp1, /Zp2, /Zp4.
-
- Environment Variables
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- CL Specifies default command-line options.
-
- H2INC Specifies default command-line options.
- Appended after the CL environment
- variable.
-
- INCLUDE Specifies search path for include files.
-
-
-
-
-
-
- IMPLIB
-
- The IMPLIB utility creates import libraries used by LINK to link
- dynamic-link libraries with applications.
-
- Command-Line Syntax
- IMPLIB [options] implibname {dllfile... | deffile...}
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option action
- ────────────────────────────────────────────────────────────────────────────
- /HELP Option name: /H[ELP]. Calls QuickHelp
- for help on IMPLIB.
-
- /NOI Option name: /NOI[GNORECASE]. Preserves
- case for entry names in DLLs.
-
- /NOLOGO Option name: /NOL[OGO]. Suppresses the
- IMPLIB copyright message.
-
- /? Option name: /?. Displays a brief
- summary of IMPLIB command-line syntax.
-
-
-
-
-
- LIB
-
- The LIB utility helps create, organize, and maintain run-time libraries.
- Command-Line SyntaxLIB inlibrary [options] [commands] [, [listfile] [,
- [outlibrary] ] ] [;]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /HELP
-
- /IGN Option name: /I[GNORECASE]. Tells LIB to
- ignore case when comparing symbols (the
- default). Use to combine a library
- marked /NOI with an unmarked library to
- create a new case-insensitive library.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- create a new case-insensitive library.
-
- /NOE Option name: NOE[XTDICTIONARY]. Prevents
- LIB from creating an extended dictionary.
-
- /NOI Option name: /NOI[GNORECASE]. Tells LIB
- to preserve case when comparing symbols.
- When combining libraries, if any library
- is marked /NOI, the output library is
- case sensitive, unless /IGN is specified.
-
- /NOLOGO Option name: /NOL[OGO]. Suppresses the
- LIB copyright message.
-
- /PAGE: number Option name: /P[AGESIZE]. Specifies the
- page size (in bytes) of a new library or
- changes the page size of an existing
- library. The default for a new library
- is 16.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- is 16.
-
- /? Option name: /?. Displays a brief
- summary of LIB command-line syntax.
-
-
-
-
-
-
- Commands
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Operator Action
- ────────────────────────────────────────────────────────────────────────────
- + name Appends an object file or library file.
-
- - name Deletes a module.
-
- -+ name Replaces a module by deleting it and
- Operator Action
- ────────────────────────────────────────────────────────────────────────────
- -+ name Replaces a module by deleting it and
- appending an object file with the same
- name.
-
- * name Copies a module to a new object file.
-
- -* name Moves a module out of the library by
- copying it to a new object file and then
- deleting it.
-
-
-
-
-
-
- LINK
-
- The LINK utility combines object files into a single executable file or
- dynamic-link library.
-
- Command-Line Syntax
- LINK objfiles [, [exefile] [, [mapfile] [, [libraries] [, [deffile] ] ] ] ]
- [;]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /ALIGN: size Option name: /A[LIGNMENT]. Directs LINK
- to align segment data in a segmented
- executable file along the boundaries
- specified by size bytes, where size
- must be a power of two.
-
- /BATCH Option name: /B[ATCH]. Suppresses
- prompts for library or object files not
- found.
-
- /CO Option name: /CO[DEVIEW]. Adds symbolic
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /CO Option name: /CO[DEVIEW]. Adds symbolic
- data and line numbers needed by the
- Microsoft CodeView debugger. This option
- is incompatible with the /EXEPACK option.
-
- /CPARM: number Option name: /CP[ARMAXALLOC]. Sets the
- program's maximum memory allocation to
- number of 16-byte paragraphs.
-
- /DOSSEG Option name: /DO[SSEG]. Orders segments
- in the default order used by Microsoft
- high-level languages.
-
- /DSALLOC Option name: /DS[ALLOCATE]. Directs LINK
- to load all data starting at the high
- end of the data segment. The /DSALLOC
- option is for assembly-language programs
- that create DOS .EXE files.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /EXEPACK Option name: /E[XEPACK]. Packs the
- executable file. The /EXEPACK option is
- incompatible with either /INCR or /CO.
- Do not use /EXEPACK on a Windows program.
-
- /FARCALL Option name: /F[ARCALLTRANSLATION].
- Optimizes far calls. The /FARCALL option
- is on automatically when using /TINY.
- Use the /PACKC option with /FARCALL when
- linking for OS/2; /PACKC is not
- recommended with /FARCALL when linking
- for Windows.
-
- /HELP Option name: /HE[LP]. Calls QuickHelp
- for help on LINK.
-
- /HIGH Option name: /HI[GH]. Places the
- executable file as high in memory as
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- executable file as high in memory as
- possible. Use /HIGH with the /DSALLOC
- option. This option is for
- assembly-language programs that create
- DOS .EXE files.
-
- /INCR Option name: /INC[REMENTAL]. Prepares
- for incremental linking with ILINK. This
- option is incompatible with /EXEPACK and
- /TINY.
-
- /INFO Option name: /INF[ORMATION]. Displays to
- the standard output the phase of linking
- and names of object files being linked.
-
- /LINE Option name: /LI[NENUMBERS]. Adds
- source-file line numbers and associated
- addresses to the map file. The object
- file must be created with line numbers.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- file must be created with line numbers.
- This option creates a map file even if
- mapfile is not specified.
-
- /MAP Option name: /M[AP]. Adds public symbols
- to the map file.
-
- /NOD[: libraryname] Option name: /NOD[EFAULTLIBRARYSEARCH].
- Ignores the specified default library.
- Specify without libraryname to ignore
- all default libraries.
-
- /NOE Option name: /NOE[XTDICTIONARY].
- Prevents LINK from searching extended
- dictionaries in libraries. Use /NOE when
- redefinition of a symbol causes error
- L2044.
-
- /NOFARCALL Option name: /NOF[ARCALLTRANSLATION].
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /NOFARCALL Option name: /NOF[ARCALLTRANSLATION].
- Turns off far-call optimization.
-
- /NOI Option name: /NOI[GNORECASE]. Preserves
- case in identifiers.
-
- /NOLOGO Option name: /NOL[OGO]. Suppresses the
- LINK copyright message
-
- /NONULLS Option name: /NON[ULLSDOSSEG]. Orders
- segments as with the /DOSSEG option, but
- with no additional bytes at the
- beginning of the _TEXT segment (if
- defined). This option overrides /DOSSEG.
-
- /NOPACKC Option name: /NOP[ACKCODE]. Turns off
- code segment packing.
-
- /PACKC[: number] Option name: /PACKC[ODE]. Packs
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /PACKC[: number] Option name: /PACKC[ODE]. Packs
- neighboring code segments together.
- Specify number bytes to set the maximum
- size for physical segments formed by
- /PACKC.
-
- /PACKD[: number] Option name: /PACKD[ATA]. Packs
- neighboring data segments together.
- Specify number bytes to set the maximum
- size for physical segments formed by
- /PACKD. This option is for OS/2 and
- Windows only.
-
- /PAUSE Option name: /PAU[SE]. Pauses during the
- link session for disk changes.
-
- /PM: type Option name: /PM[TYPE]. Specifies the
- type of Windows or OS/2 application
- where type is one of the following: PM
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- where type is one of the following: PM
- (or WINDOWAPI), VIO (or WINDOWCOMPAT),
- or NOVIO (or NOTWINDOWCOMPAT).
-
- /STACK: number Option name: /ST[ACK]. Sets the stack
- size to number bytes, from 1 byte to
- 64K.
-
- /TINY Option name: /T[INY]. Creates a
- tiny-model DOS program with a .COM
- extension instead of .EXE. Incompatible
- with /INCR.
-
- /? Option name: /?. Displays a brief
- summary of LINK command-line syntax.
-
-
-
- Note: Several rarely used options not listed above are described in online
- help.
-
- Environment Variables
- ╓┌────────────────┌──────────────────────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- INIT Specifies path for the TOOLS.INI file.
- LIB Specifies search path for library files.
- LINK Specifies default command-line options.
- TMP Specifies path for the VM.TMP file.
-
-
-
-
- MASM
-
- The MASM program converts command-line options from MASM style to ML style,
- adds options to maximize compatibility, and calls ML.EXE.
-
- Command-Line Syntax
- MASM [options] sourcefile [, [objectfile] [, [listingfile]
- [, [crossreferencefile] ] ] ] [;]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /A Orders segments alphabetically. Results
- in a warning. Ignored.
-
- /B Sets internal buffer size. Ignored.
-
- /C Creates a cross-reference file.
- Translated to /FR.
-
- /D Creates a Pass 1 listing. Ignored.
-
- /D symbol[ = value] Defines a symbol. Unchanged.
-
- /E Emulates floating-point instructions.
- Translated to /FPi.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- Translated to /FPi.
-
- /H Lists command-line arguments. Translated
- to /help.
-
- /HELP Calls QuickHelp for help on the MASM
- driver.
-
- /I pathname Specifies an include path. Unchanged.
-
- /L Creates a normal listing. Translated to
- /Fl.
-
- /LA Lists all. Translated to /Fl and /Sa.
-
- /ML Treats names as case sensitive.
- Translated to /Cp.
-
- /MU Converts names to uppercase. Translated
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /MU Converts names to uppercase. Translated
- to /Cu.
-
- /MX Preserves case on nonlocal names.
- Translated to /Cx.
-
- /N Suppresses table in listing file.
- Translated to /Sn.
-
- /P Checks for impure code. Use OPTION
- READONLY. Ignored.
-
- /S Orders segments sequentially. Results in
- a warning. Ignored.
-
- /T Enables terse assembly. Translated to
- /nologo.
-
- /V Enables verbose assembly. Ignored.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /V Enables verbose assembly. Ignored.
-
- /W0 Enables warning level 0. Unchanged.
-
- /W1 Enables warning level 1. Unchanged.
-
- /W2 Enables warning level 2. Unchanged.
-
- /X Lists false conditionals. Translated to
- /Sx.
-
- /Z Displays error lines on screen. Ignored.
-
- /ZD Generates line numbers for CodeView.
- Translated to /Zd.
-
- /ZI Generates symbols for CodeView.
- Translated to /Zi.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
-
-
-
-
-
- Environment Variables
- ╓┌────────────────┌──────────────────────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- INCLUDE Specifies default path for .INC files.
- MASM Specifies default command-line options.
- TMP Specifies path for temporary files.
-
-
-
-
-
- ML
-
- The ML program assembles and links one or more assembly-language source
- files. The command-line options are case sensitive.
-
- Command-Line Syntax
- ML [options] filename [ [options] filename]... [/link linkoptions]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /AT Enables tiny-memory-model support.
- Enables error messages for code
- constructs that violate the requirements
- for .COM format files. Note that this is
- not equivalent to the .MODEL TINY
- directive.
-
- /Bl filename Selects an alternate linker.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /c
-
- /Cp Preserves case of all user identifiers.
-
- /Cu Maps all identifiers to uppercase
- (default).
-
- /Cx Preserves case in public and extern
- symbols.
-
- /D symbol[ = value] Defines a text macro with the given name.
- If value is missing, it is blank.
- Multiple tokens separated by spaces must
- be enclosed in quotation marks.
-
- /EP Generates a preprocessed source listing
- (sent to STDOUT). See /Sf.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
-
-
- /F hexnum Sets stack size to hexnum bytes (this
- is the same as /link /STACK: number).
- The value must be expressed in
- hexadecimal notation. There must be a
- space between /F and hexnum.
-
- /Fb [ filename] Creates a bound executable file.
-
- /Fe filename Names the executable file.
-
- /Fl [ filename] Generates an assembled code listing. See
- /Sf.
-
- /Fm [ filename] Creates a linker map file.
-
- /Fo filename Names an object file.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /Fo filename Names an object file.
-
- /FPi Generates emulator fixups for
- floating-point arithmetic
- (mixed-language only).
-
- /Fr [ filename] Generates a source browser .SBR file.
-
- /FR [ filename] Generates an extended form of a source
- browser .SBR file.
-
- /Gc Specifies use of FORTRAN- or
- Pascal-style function calling and naming
- conventions. Same as OPTION
- LANGUAGE:PASCAL.
-
- /Gd Specifies use of C-style function
- calling and naming conventions. Same as
- OPTION LANGUAGE:C.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- OPTION LANGUAGE:C.
-
- /H number Restricts external names to number
- significant characters. The default is
- 31 characters.
-
- /help Calls QuickHelp for help on ML.
-
- /I pathname Sets path for include file. A maximum of
- 10 /I options is allowed.
-
- /nologo Suppresses messages for successful
- assembly.
-
- /Sa Turns on listing of all available
- information.
-
- /Sf Adds first-pass listing to listing file.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /Sg Turns on listing of assembly-generated
- code.
-
- /Sl width Sets the line width of source listing in
- characters per line. Range is 60 to 255
- or 0. Default is 0. Same as PAGE ,
- width.
-
- /Sn Turns off symbol table when producing a
- listing.
-
- /Sp length Sets the page length of source listing
- in lines per page. Range is 10 to 255 or
- 0. Default is 0. Same as PAGE length.
-
- /Ss text Specifies text for source listing. Same
- as SUBTITLE text.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /St text Specifies title for source listing. Same
- as TITLE text.
-
- /Sx Turns on false conditionals in listing.
-
- /Ta filename Assembles source file whose name does
- not end with the .ASM extension.
-
- /w Same as /W0.
-
- /W level Sets the warning level: level 0, 1, 2,
- or 3.
-
-
-
- /WX Returns an error code if warnings are
- generated.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /Zd Generates line-number information in
- object file.
-
- /Zf Makes all symbols public.
-
- /Zi Generates CodeView information in object
- file.
-
- /Zm Enables M510 option for maximum
- compatibility with MASM 5.1.
-
- /Zp [ alignment] Packs structures on the specified byte
- boundary. The alignment may be 1, 2, or
- 4.
-
- /Zs Performs a syntax check only.
-
- /? Displays a brief summary of ML
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /? Displays a brief summary of ML
- command-line syntax.
-
-
-
-
-
-
-
- QuickAssembler Support
-
- For compatibility with QuickAssembler makefiles, ML recognizes the following
- options:
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /a Orders segments alphabetically. In MASM
- 6.0, the .ALPHA directive must be used.
- Ignored.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- Ignored.
-
- /Cl Equivalent to /Cp.
-
- /Ez Prints the source for error lines to the
- screen. This option is no longer
- supported and is ignored by MASM 6.0.
-
- /P1 Performs one-pass assembly. MASM 6.0
- always performs a single pass through
- the source file. This option is ignored
- by MASM 6.0.
-
- /P2 Performs two-pass assembly. MASM 6.0
- always performs a single pass through
- the source file. This option is ignored
- by MASM 6.0.
-
- /s Orders segments sequentially. In MASM
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /s Orders segments sequentially. In MASM
- 6.0, the .SEQ directive must be used.
- Ignored.
-
- /Sq Equivalent to /Sl0 /Sp0.
-
-
-
-
-
-
- Environment Variables
- ╓┌────────────────┌──────────────────────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- INCLUDE Specifies search path for include files.
- ML Specifies default command-line options.
- TMP Specifies path for temporary files.
-
-
-
- NMAKE
-
- The NMAKE utility automates the process of compiling and linking project
- files.
-
- Command-Line Syntax
- NMAKE [options] [macros] [targets]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /A Executes all commands even if targets
- are not out-of-date.
-
- /C Suppresses the NMAKE copyright message
- and prevents nonfatal error or warning
- messages from being displayed.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- messages from being displayed.
-
- /D Displays the modification time of each
- file when the times of targets and
- dependents are checked.
-
- /E Causes environment variables to override
- macro definitions within description
- files.
-
- /F filename Specifies filename as the name of the
- description file to use. If a dash (-)
- is entered instead of a filename, NMAKE
- reads the description file from the
- standard input device.If /F is not
- specified, NMAKE uses MAKEFILE as the
- description file. If MAKEFILE does not
- exist, NMAKE builds command-line targets
- using inference rules.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- using inference rules.
-
- /HELP Calls QuickHelp for help on NMAKE.
-
- /I Ignores exit codes from commands in the
- description file. NMAKE continues
- executing the rest of the description
- file despite the errors.
-
- /N Displays but does not execute commands
- from the description file.
-
- /NOLOGO Suppresses the NMAKE copyright message.
-
- /P Displays all macro definitions,
- inference rules, target descriptions,
- and the . SUFFIXES list.
-
- /Q Checks modification times of
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /Q Checks modification times of
- command-line targets (or first target in
- the description file if no command-line
- targets are specified). NMAKE returns a
- zero exit code if all such targets are
- up-to-date and a nonzero exit code if
- any target is out-of-date. Only
- preprocessing commands in the
- description file are executed.
-
- /R Ignores inference rules and macros that
- are defined in the TOOLS.INI file or are
- predefined.
-
- /S Suppresses display of commands as they
- are executed.
-
- /T Changes modification times of
- command-line targets (or first target in
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- command-line targets (or first target in
- the description file if no command-line
- targets are specified) to the current
- time. Only preprocessing commands in the
- description file are executed. The
- contents of target files are not
- modified.
-
- /X filename Sends all error output to filename,
- which can be either a file or a device.
- If a dash (-) is entered instead of a
- filename, the error output is sent to
- the standard output device.
-
- /Z Internal option for use by the Microsoft
- Programmer's WorkBench (PWB).
-
- /? Displays a brief summary of NMAKE
- command-line syntax.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- command-line syntax.
-
-
-
-
-
-
- Environment Variable
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- INIT Specifies path for TOOLS.INI file, which
- may contain macros, inference rules, and
- description blocks.
-
-
-
-
-
- PWB (Programmer's WorkBench)
-
- The Microsoft Programmer's WorkBench (PWB) provides an integrated
- environment for developing programs in assembly language. The command-line
- options are case sensitive.
-
- Command-Line Syntax
- PWB [options] [files]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /D[ init] Prevents PWB from examining
- initialization files, where init is one
- or more of the following characters:
-
- A Disable autoload extensions
- (including language-specific extensions
- and online help)
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- and online help)
-
- S Ignore CURRENT.STS
-
- T Ignore TOOLS.INI
-
- If the /D option does not include an
- init character, it is equivalent to
- specifying /DAST (all files
-
-
- /e cmdstr Executes the command or sequence of
- commands at start-up. The entire cmdstr
- argument must be placed in double
- quotation marks if it contains a space.
- If cmdstr contains literal double
- quotation marks, place a backslash (\)
- in front of each double quotation mark.
- To include a literal backslash in the
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- To include a literal backslash in the
- command string, use double backslashes
- (\\).
-
- /m mark Moves the cursor to the specified mark
- instead of moving it to the last known
- position. The mark can be a line number.
-
- /P[ init] Specifies a program list for PWB to read,
- where init can be
-
- F file Read a foreign program list
- (one not created using PWB).
-
- L Read the last program list.
- Use this option to start PWB in the same
- state you left it.
-
- P file Read a PWB program list.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- P file Read a PWB program list.
-
- /r Starts PWB in no-edit mode. Functions
- that modify files are disallowed.
-
- [ [/t] file...] Loads the specified file at start-up.
- The file specification can contain
- wildcards. If multiple files are
- specified, PWB loads only the first file.
- When the Exit function is invoked, PWB
- saves the current file and loads the
- next file in the list. Files specified
- with /t are temporary; PWB does not add
- them to the file history on the File
- menu.
-
- No other options can follow /t on the
- command line. Each temporary file must
- be specified in a separate /t option.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- be specified in a separate /t option.
-
- /? Displays a brief summary of PWB
- command-line syntax.
-
-
-
-
-
- Environment Variables
- ╓┌────────────┌──────────────────────────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- HELPFILES Specifies path of help files or list of help filenames.
- INIT Specifies path for TOOLS.INI and CURRENT.STS files.
- TMP Specifies path for temporary files.
-
-
-
-
- PWBRMAKE
-
- PWBRMAKE converts the .SBR files created by the assembler into database .BSC
- files that can be read by the Microsoft Programmer's WorkBench (PWB) Source
- Browser. The command-line options are case sensitive.
-
- Command-Line Syntax
- PWBRMAKE [options] sbrfiles
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /Ei filename/Ei ( filename...) Excludes the contents of the specified
- include files from the database. To
- specify multiple filenames, separate
- them with spaces and enclose the list in
- parentheses.
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /Em Excludes symbols in the body of macros.
- Use /Em to include only macro names.
-
- /Es Excludes from the database every include
- file specified with an absolute pathname
- or found in an absolute path specified
- in the INCLUDE environment variable.
-
-
-
- /HELP Calls QuickHelp for help on PWBRMAKE.
-
- /Iu Includes unreferenced symbols.
-
- /n Forces a nonincremental build and
- prevents truncation of .SBR files.
-
- /o filename Specifies a name for the database file.
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /o filename Specifies a name for the database file.
-
- /v Displays verbose output.
-
- /? Displays a brief summary of PWBRMAKE
- command-line syntax.
-
-
-
-
-
- QuickHelp
-
- The QuickHelp utility displays online help files. All MASM reserved words
- and error messages can be used for topic.
-
- Command-Line Syntax
- QH [options] [topic]
-
-
- Options
- ╓┌─────────────────────────────────┌─────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /d filename Specifies either a specific database
- name or a path where the databases are
- found.
-
- /l number Specifies the number of lines the
- QuickHelp window should occupy.
-
- /m number Changes the screen mode to display the
- specified number of lines, where number
- is in the range 25 to 60.
-
- /p filename Sets the name of the paste file.
-
- /pa [ filename] Specifies that pasting operations are
- appended to the current paste file
- (rather than overwriting the file).
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- (rather than overwriting the file).
-
- /q Prevents the version box from being
- displayed when QuickHelp is installed as
- a keyboard monitor.
-
- /r command Specifies the command that QuickHelp
- should execute when the right mouse
- button is pressed. The command can be
- one of the following letters:
-
- l Display last topic
-
- i Display history of help topics
-
- w Hide window
-
- b Display previous topic
-
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- e Find next topic
-
- t Display contents
-
- /s Specifies that clicking the mouse above
- or below the scroll box causes QuickHelp
- to scroll by lines rather than by pages.
-
- /sg number Specifies the number of screen groups
- that QuickHelp should monitor, where
- number is in the range 1 to 12. This
- option is valid only when QuickHelp is
- detached from an OS/2 protected-mode
- screen group.
-
- /t name Directs QuickHelp to copy the specified
- section of the given topic to the
- current paste file and exit. The name
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- current paste file and exit. The name
- may be
-
- All Paste the entire topic
-
- Syntax Paste the syntax only
-
- Example Paste the example only
-
- If the topic is not found, QuickHelp
- returns an exit code of 1.
-
- /u Specifies that QuickHelp is being run by
- a utility. If the topic specified on the
- command line is not found, QuickHelp
- immediately exits with an exit code of 3.
-
-
-
-
-
-
- Environment Variables
- ╓┌────────────┌──────────────────────────────────────────────────────────────╖
- Variable Description
- ────────────────────────────────────────────────────────────────────────────
- HELPFILES Specifies path of help files or list of help filenames.
- QH Specifies default command-line options.
- TMP Specifies directory of default paste file.
-
-
-
-
- RM
-
- The RM utility moves a file to a hidden DELETED subdirectory of the
- directory containing the file. Use the UNDEL utility to recover the file and
- the EXP utility to expunge the hidden file.
-
- Command-Line Syntax
- RM [options] [files]
-
-
- Options
- ╓┌──────────────┌────────────────────────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /F Deletes read-only files without prompting.
- /HELP Calls QuickHelp for help on RM.
- /I Inquires for permission before removing each file.
- /K Keeps read-only files without prompting.
- /R directory Recurses into subdirectories of the specified directory.
- /? Displays a brief summary of RM command-line syntax.
-
-
-
-
- UNDEL
-
- The UNDEL utility moves a file from a hidden DELETED subdirectory to the
- parent directory. UNDEL is used along with EXP and RM to manage backup
- files.
-
- Command-Line Syntax
- UNDEL [{option | files}]
-
-
- Options
- ╓┌──────────┌────────────────────────────────────────────────────────────────╖
- Option Action
- ────────────────────────────────────────────────────────────────────────────
- /HELP Calls QuickHelp for help on UNDEL.
- /? Displays a brief summary of UNDEL command-line syntax.
-
-
-
-
-
- Cross-References
-
-
-
- Topical Cross-Reference for Directives
-
-
- Simplified Segment
- .MODEL
- .STARTUP
- .EXIT
- .CODE
- .STACK
- .DATA
- .DATA?
- .FARDATA
- .FARDATA?
- .CONST
- .DOSSEG
-
-
- Segment
- SEGMENT
- ENDS
- GROUP
- ASSUME
- END
- .ALPHA
- .DOSSEG
- .SEQ
-
-
- Conditional Assembly
- IF
- IFE
- IFB/IFNB
- IFDEF/IFNDEF
- IFDIF/IFDIFI
- IFIDN/IFIDNI
- ELSE
- ENDIF
-
-
- Macros
- MACRO
- LOCAL
- PURGE
- GOTO
- ENDM
- EXITM
-
-
- Data Allocation
- BYTE/SBYTE
- WORD/SWORD
- DWORD/SDWORD
- FWORD
- QWORD
- TBYTE
- LABEL
- ALIGN
- EVEN
- ORG
- REAL4
- REAL8
- REAL10
-
-
- Code Labels
- LABEL
- ALIGN
- EVEN
- ORG
-
-
- Scope
- PUBLIC
- EXTERNDEF
- EXTERN
- COMM
- INCLUDELIB
-
-
- Structure and Record
- RECORD
- STRUCT
- UNION
- ENDS
- TYPEDEF
-
-
- String
- CATSTR
- SIZESTR
- SUBSTR
- INSTR
-
-
- Equates
- EQU
- =
- TEXTEQU
-
-
- Repeat Blocks
- REPEAT
- WHILE
- FOR
- FORC
- ENDM
- GOTO
-
-
- Conditional Control Flow
- .IF
- .ELSE
- .ELSEIF
- .ENDIF
- .WHILE
- .ENDW
- .REPEAT
- .UNTIL/
- .UNTILCXZ
- .BREAK
- .CONTINUE
-
-
- Listing Control
- TITLE
- SUBTITLE
- PAGE
- .LIST
- .NOLIST
- .LISTIF
- .NOLISTIF
- .TFCOND
- .LISTMACROALL
- .NOLISTMACRO
- .LISTMACRO
- .CREF
- .NOCREF
- .LISTALL
-
-
- Conditional Error
- .ERR
- .ERRE
- .ERRNZ
- .ERRB
- .ERRNB
- .ERRDEF
- .ERRNDEF
- .ERRDIF/.ERRDIFI
- .ERRIDN/.ERRIDNI
-
-
- Processor
- .8086 .486
- .186 .486P
- .286 .8087
- .286P .287
- .386 .387
- .386P .NO87
-
-
- Procedures
- PROC
- ENDP
- PROTO
- INVOKE
- USES
-
-
- Miscellaneous
- OPTION
- COMMENT
- ECHO
- .RADIX
- END
- PUSHCONTEXT
- POPCONTEXT
- INCLUDE
- INCLUDELIB
- ASSUME
-
-
-
-
- Topical Cross-Reference for Symbols
-
-
- Segment Information
- @code
- @CodeSize
- @CurSeg
- @data
- @DataSize
- @fardata
- @fardata?
- @Model
- @stack
- @WordSize
-
-
- Macro Functions
- @CatStr
- @InStr
- @SizeStr
- @SubStr
-
-
- Environment Information
- @Cpu
- @Environ
- @Interface
- @Version
-
-
- Date and Time Information
- @Date
- @Time
-
-
- File Information
- @FileCur
- @FileName
- @Line
-
-
- Miscellaneous
- $
- ?
- @@:
- @B
- @F
-
-
- Topical Cross-Reference for Operators
-
-
- Arithmetic
- + MOD
- - .
- * []
- /
-
-
- Macro
- <> %
- ! &
- ;;
-
-
- Relational
- EQ GE
- NE LT
- GT LE
-
-
- Logical
- and ShiftAND
- OR
- XOR
- NOT
- SHL
- SHR
-
-
- Record
- MASK
- WIDTH
-
-
- Segment
- :
- SEG
- OFFSET
- LROFFSET
-
-
- Type
- HIGH
- HIGHWORD
- LOW
- LOWWORD
- PTR
- SHORT
- SIZE
- SIZEOF
- LENGTH
- LENGTHOF
- THIS
- TYPE
- OPATTR
-
-
- Control Flow
- ! = =
- != >=
- && <=
- || >
- & <
-
-
- Miscellaneous
- ; :
- DUP ::
- " " ' '
- CARRY?
- OVERFLOW?
- PARITY?
- SIGN?
- ZERO?
-
-
-
- Directives
-
- name = expression
- Assigns the numeric value of expression to name. The symbol may be
- redefined later.
-
-
- .186
- Enables assembly of instructions for the 80186 processor; disables assembly
- of instructions introduced with later processors. Also enables 8087
- instructions.
-
-
- .286
- Enables assembly of nonprivileged instructions for the 80286 processor;
- disables assembly of instructions introduced with later processors. Also
- enables 80287 instructions.
-
-
- .286P
- Enables assembly of all instructions (including privileged) for the 80286
- processor; disables assembly of instructions introduced with later
- processors. Also enables 80287 instructions.
-
-
- .287
- Enables assembly of instructions for the 80287 coprocessor; disables
- assembly of instructions introduced with later coprocessors.
-
- .386
- Enables assembly of nonprivileged instructions for the 80386 processor;
- disables assembly of instructions introduced with later processors. Also
- enables 80387 instructions.
-
- .386P
- Enables assembly of all instructions (including privileged) for the 80386
- processor; disables assembly of instructions introduced with later
- processors. Also enables 80387 instructions.
-
- .387
- Enables assembly of instructions for the 80387 coprocessor.
-
- .486
- Enables assembly of nonprivileged instructions for the 80486 processor.
-
- .486P
- Enables assembly of all instructions (including privileged) for the 80486
- processor.
-
- .8086
- Enables assembly of 8086 instructions (and the identical 8088 instructions);
- disables assembly of instructions introduced with later processors. Also
- enables 8087 instructions. This is the default mode for processors.
-
- .8087
- Enables assembly of 8087 instructions; disables assembly of instructions
- introduced with later coprocessors. This is the default mode for
- coprocessors.
-
- ALIGN [ number]
- Aligns the next variable or instruction on a byte that is a multiple of
- number.
-
- .ALPHA
- Orders segments alphabetically.
-
- ASSUME segregister : name [ , segregister : name]...
- ASSUME dataregister : type [ , dataregister : type]...
-
-
- ASSUME register :ERROR [ , register :ERROR]...
-
-
- ASSUME [ register :] NOTHING [ , register :NOTHING]...
- Enables error-checking for register values. After an ASSUME is put into
- effect, the assembler watches for changes to the values of the given
- registers. ERROR generates an error if the register is used at all. NOTHING
- assumptions in one statement.
-
- .BREAK [ .IF condition]
- Generates code to terminate a .WHILE or .REPEAT block if condition is
- true.
-
- [ name] BYTE initializer [ , initializer]...
- Allocates and optionally initializes a byte of storage for each
- initializer. Can also be used as a type specifier anywhere a type is legal.
-
- name CATSTR [ textitem1 [ , textitem2]...]
- Concatenates text items. Each text item can be a literal string, a constant
- preceded by a %, or the string returned by a macro function.
-
- .CODE [ name]
- When used with .MODEL, indicates the start of a code segment called name
- (the default segment name is _TEXT for tiny, small, compact, and flat
- models, or module_TEXT for other models).
-
- COMM definition [ , definition]...
- Creates a communal variable with the attributes specified in definition.
- Each definition has the following form:
-
- [ langtype] [ NEAR | FAR] label : type[ : count]
-
- The label is the name of the variable. The type can be any type specifier
- ( BYTE, WORD, etc.) or an integer specifying the number of bytes. The
- count specifies the number of data objects (one is the default).
-
- COMMENT delimiter [ text]
- [ text]
- [ text] delimiter [ text]
- Treats all text between or on the same line as the delimiters as a comment.
-
- .CONST
- When used with .MODEL, starts a constant data segment (with segment name
- CONST). This segment has the read-only attribute.
-
- .CONTINUE [ .IF condition]
-
- Generates code to jump to the top of a .WHILE or .REPEAT block if
- condition is true.
-
- .CREF
- Enables listing of symbols in the symbol portion of the symbol table and
- browser file.
-
- .DATA
- When used with .MODEL, starts a near data segment for initialized data
- (segment name _DATA).
-
- .DATA?
- When used with .MODEL, starts a near data segment for uninitialized data
- (segment name _BSS).
-
- .DOSSEG
- Orders the segments according to the DOS segment convention: CODE first,
- then segments not in DGROUP, and then segments in DGROUP. The segments in
- DGROUP follow this order: segments not in BSS or STACK, then BSS segments,
- and finally STACK segments. Primarily used for ensuring CodeView support in
- MASM stand-alone programs. Same as DOSSEG.
-
- DOSSEG
- Identical to . DOSSEG, which is the preferred form.
-
- DB
- Can be used to define data like BYTE.
-
- DD
- Can be used to define data like DWORD.
-
- DF
- Can be used to define data like FWORD.
-
- DQ
- Can be used to define data like QWORD.
-
- DT
- Can be used to define data like TBYTE.
-
- DW
- Can be used to define data like WORD.
-
- [ name] DWORD initializer [ , initializer]...
- Allocates and optionally initializes a doubleword (4 bytes) of storage for
- each initializer. Can also be used as a type specifier anywhere a type is
- legal.
-
- ECHO message
- Displays message to the standard output device (by default, the screen).
- Same as %OUT.
-
- .ELSE
- See .IF.
-
- ELSE
- Marks the beginning of an alternate block within a conditional block. See IF.
-
- END [ address]
- Marks the end of a module and, optionally, sets the program entry point to
- address.
-
- .ENDIF
- See .IF.
-
- ENDIF
- See IF.
-
- ENDM
- Terminates a macro or repeat block. See MACRO, FOR, FORC, REPEAT, or WHIL
- name ENDP
- Marks the end of procedure name previously begun with PROC. See PROC.
-
- name ENDS
- Marks the end of segment, structure, or union name previously begun with SEG
-
- .ENDW
- See .WHILE.
-
- name EQU expression
- Assigns numeric value of expression to name. The name cannot be redefined
- later.
-
- name EQU < text >
- Assigns specified text to name. The name can be assigned a different text
-
- .ERR [ message]
- Generates an error.
-
- .ERRB < textitem > [ , message]
- Generates an error if textitem is blank.
-
- .ERRDEF name [ , message]
- Generates an error if name is a previously defined label, variable, or
- symbol.
-
- .ERRDIF[ I] < textitem1 >, < textitem2 > [ , message]
- Generates an error if the text items are different. If I is given, the
- comparison is case insensitive.
-
- .ERRE expression [ , message]
- Generates an error if expression is false (0).
-
- .ERRIDN[ I] < textitem1 >, < textitem2 > [ , message]
- Generates an error if the text items are identical. If I is given, the
- comparison is case insensitive.
-
- .ERRNB < textitem > [ , message]
- Generates an error if textitem is not blank.
-
- .ERRNDEF name [ , message]
- Generates an error if name has not been defined.
-
- .ERRNZ expression [ , message]
- Generates an error if expression is true (nonzero).
-
- EVEN
- Aligns the next variable or instruction on an even byte.
-
- .EXIT [ expression]
- Generates termination code. Returns optional expression to shell.
-
- EXITM [ expression]
- Terminates expansion of the current repeat or macro block and begins
- assembly of the next statement outside the block. In a macro function,
- expression is the value returned.
-
- EXTERN [ langtype] name [ ( altid )] : type
- [ , [ langtype] name [ ( altid )] : type]...
- Defines one or more external variables, labels, or symbols called name
- whose type is type. The type can be ABS, which imports name as a
- constant. Same as EXTRN.
-
- EXTERNDEF [ langtype] name : type [ , [ langtype] name : type]...
- Defines one or more external variables, labels, or symbols called name
- whose type is type. If name is defined in the module, it is treated as
-
- PUBLIC. If name is referenced in the module, it is treated as EXTERN. If
- name is not referenced, it is ignored. The type can be ABS, which imports
- name as a constant. Normally used in include files.
-
- EXTRN
- See EXTERN.
-
- .FARDATA [ name]
- When used with .MODEL, starts a far data segment for initialized data
- (segment name FAR_DATA or name).
-
- .FARDATA? [ name]
- When used with .MODEL, starts a far data segment for uninitialized data
- (segment name FAR_BSS or name).
-
- FOR parameter [ :REQ | := default] , < argument [ , argument]... >
- statements
-
- ENDM
- Marks a block that will be repeated once for each argument, with the
- current argument replacing parameter on each repetition. Same as IRP.
-
- FORC parameter , < string >
- statements
-
- ENDM
- Marks a block that will be repeated once for each character in string, with
- the current character replacing parameter on each repetition. Same as
-
- IRPC.
- [ name] FWORD initializer [ , initializer]...
- Allocates and optionally initializes 6 bytes of storage for each
- initializer. Can also be used as a type specifier anywhere a type is legal.
-
- GOTO macrolabel
- Transfers assembly to the line marked : macrolabel. GOTO is permitted only
- inside MACRO, FOR, FORC, REPEAT, and WHILE blocks. The label must be
- the only directive on the line and must be preceded by a leading colon.
-
- name GROUP segment [ , segment]...
- Add the specified segments to the group called name.
-
- .IF condition1
- statements
- [ .ELSEIF condition2
- statements]
- [ .ELSE
- statements]
- .ENDIF
- Generates code that tests condition1 (for example, AX > 7) and executes the
- statements if that condition is true. If an .ELSE follows, its statements
- are executed if the original condition was false. Note: The conditions are
- evaluated at run time.
-
- IF expression1
- ifstatements
- [ ELSEIF expression2
- elseifstatements]
- [ ELSE
- elsestatements]
- ENDIF
- Grants assembly of ifstatements if expression1 is true (nonzero) or
- elseifstatements if expression1 is false (0) and expression2 is true. The
- following directives may be substituted for ELSEIF: ELSEIFB, ELSEIFDEF,
-
- ELSEIFDIF, ELSEIFDIFI, ELSEIFE, ELSEIFIDN, ELSEIFIDNI, ELSEIFNB, and ELS
- is false. Note: The expressions are evaluated at assembly time.
-
- IFB textitem
- Grants assembly if textitem is blank. See IF for complete syntax.
-
- IFDEF name
- Grants assembly if name is a previously defined label, variable, or symbol.
- See IF for complete syntax.
-
- IFDIF[ I] textitem1 , textitem2
- Grants assembly if the text items are different. If I is given, the
- comparison is case insensitive. See IF for complete syntax.
-
- IFE expression
- Grants assembly if expression is false (0). See IF for complete syntax.
-
- IFIDN[ I] textitem1 , textitem2
- Grants assembly if the text items are identical. If I is given, the
- comparison is case insensitive. See IF for complete syntax.
-
- IFNB textitem
- Grants assembly if textitem is not blank. See IF for complete syntax.
-
- IFNDEF name
- Grants assembly if name has not been defined. See IF for complete syntax.
-
- INCLUDE filename
- Inserts source code from the source file given by filename into the current
- source file during assembly. The filename must be enclosed in angle
- brackets if it includes a backslash, semicolon, greater-than symbol,
- less-than symbol, single quotation mark, or double quotation mark.
-
- INCLUDELIB libraryname
- Informs the linker that the current module should be linked with
- libraryname. The libraryname must be enclosed in angle brackets if it
- includes a backslash, semicolon, greater-than symbol, less-than symbol,
- single quotation mark, or double quotation mark.
- name INSTR [ position ,] textitem1 , textitem2
- Finds the first occurrence of textitem2 in textitem1. The starting
- position is optional. Each text item can be a literal string, a constant
- preceded by a %, or the string returned by a macro function.
-
- INVOKE expression [ , arguments]
-
- Calls the procedure at the address given by expression, passing the
- arguments on the stack or in registers according to the standard calling
- conventions of the language type. Each argument passed to the procedure may
- be an expression, a register pair, or an address expression (an expression
- preceded by ADDR).
-
- IRP
- See FOR.
-
- IRPC
- See FORC.
- name LABEL type
- Creates a new label by assigning the current location-counter value and the
- given type to name.
- name LABEL [ NEAR | FAR | PROC] PTR [ type]
-
- Creates a new label by assigning the current location-counter value and the
- given type to name.
-
- .LALL
- See .LISTMACROALL.
-
- .LFCOND
- See .LISTIF.
-
- .LIST
- Starts listing of statements. This is the default.
-
- .LISTALL
- Starts listing of all statements. Equivalent to the combination of .LIST,
-
- .LISTIF, and .LISTMACROALL.
- .LISTIF
- Starts listing of statements in false conditional blocks. Same as .LFCOND.
-
- .LISTMACRO
- Starts listing of macro expansion statements that generate code or data.
- This is the default. Same as .XALL.
-
- .LISTMACROALL
- Starts listing of all statements in macros. Same as .LALL.
-
- LOCAL localname [ , localname]...
- Within a macro, LOCAL defines labels that are unique to each instance of
- the macro.
-
- LOCAL label [ [ count ] ] [ : type] [ , label [ [ count ] ] [ type]
- ]...
- Within a procedure definition ( PROC), LOCAL creates stack-based variables
- that exist for the duration of the procedure. The label may be a simple
- variable or an array containing count elements.
- name MACRO [ parameter [ :REQ | := default | :VARARG] ]...
- statements
-
-
- ENDM [ value]
- Marks a macro block called name and establishes parameter placeholders for
- arguments passed when the macro is called. A macro function returns value
- to the calling statement.
-
- .MODEL memorymodel [ , langtype] [ , ostype] [ , stackoption]
- Initializes the program memory model. The memorymodel may be TINY, SMALL,
-
- COMPACT, MEDIUM, LARGE, HUGE, or FLAT. The langtype may be C, BASIC,
-
- FORTRAN, PASCAL, SYSCALL, or STDCALL. The ostype may be OS_DOS or
-
- OS_OS2. The stackoption may be NEARSTACK or FARSTACK.
-
- NAME modulename
- Ignored in version 6.0.
-
- .NO87
- Disallows assembly of all floating-point instructions.
-
- .NOCREF [ name[ , name]...]
- Suppresses listing of symbols in the symbol table and browser file. If names
- are specified, only the given names are suppressed. Same as .XCREF.
-
- .NOLIST
- Suppresses program listing. Same as .XLIST.
-
- .NOLISTIF
- Suppresses listing of conditional blocks whose condition evaluates to false
- (0). This is the default. Same as .SFCOND.
-
- .NOLISTMACRO
- Suppresses listing of macro expansions. Same as .SALL.
-
- OPTION optionlist
- Enables and disables features of the assembler. Available options include
-
- CASEMAP, DODD DOTNAME, NODOTNAME, EPILOGUEEE EMULATOR, NOEMULATOR,
- EPILOGUE, EXPR16, EXPR32, LANGUAGE, LJMP, NOLJMP, M510, NOM510,
- NOKEYWORD, NOSIGNEXTEND, OFFSET, OLDMACROS, NOOLDMACROS, OLDSTRUCTS,
- NOOLDSTRUCTS, PROC, PROLOGUE, READONLY, NOREADONLY, SCOPED, NOSCOPED,
- and SEGMENT.
-
- ORG expression
- Sets the location counter to expression.
-
- %OUT
- See ECHO.
-
- PAGE [ [ length] , width]
- Sets line length and character width of the program listing. If no
- arguments are given, generates a page break.
-
- PAGE +
- Increments the section number and resets the page number to 1.
-
- POPCONTEXT context
- Restores part or all of the current context (saved by the PUSHCONTEXT
- directive). The context can be ASSUMES, RADIX, LISTING, CPU, or ALL.
-
- label PROC [ distance] [ langtype] [ visibility] [ < prologuearg >]
- [ USES reglist] [ , parameter [ : tag] ]...
- statements
- label ENDP
- Marks start and end of a procedure block called label. The statements in
- the block can be called with the CALL instruction or INVOKE directive.
-
- label PROTO [ distance] [ langtype] [ , [ parameter] : tag]...
- Prototypes a function.
-
- PUBLIC [ langtype] name [ , [ langtype] name]...
- Makes each variable, label, or absolute symbol specified as name available
- to all other modules in the program.
-
- PURGE macroname [ , macroname]...
- Deletes the specified macros from memory.
-
- PUSHCONTEXT context
- Saves part or all of the current context: segment register assumes, radix
- value, listing and cref flags, or processor/coprocessor values. The context
- can be ASSUMES, RADIX, LISTING, CPU, or ALL.
-
- [ name] QWORD initializer [ , initializer]...
- Allocates and optionally initializes 8 bytes of storage for each
- initializer. Can also be used as a type specifier anywhere a type is legal.
-
- .RADIX expression
- Sets the default radix, in the range 2 to 16, to the value of expression.
-
- name REAL4 initializer [ , initializer]...
- Allocates and optionally initializes a single-precision (4-byte)
- floating-point number for each initializer.
-
- name REAL8 initializer [ , initializer]...
- Allocates and optionally initializes a double-precision (8-byte)
- floating-point number for each initializer.
-
- name REAL10 initializer [ , initializer]...
- Allocates and optionally initializes a 10-byte floating-point number for
- each initializer.
-
- recordname RECORD fieldname : width [ = expression]
- [ , fieldname : width [ = expression] ]...
- Declares a record type consisting of the specified fields. The fieldname
- names the field, width specifies the number of bits, and expression gives
- its initial value.
-
- .REPEAT
- statements
- .UNTIL condition
- Generates code that repeats execution of the block of statements until
- condition becomes true. .UNTILCXZ, which becomes true when CX is zero, may
- be substituted for .UNTIL. The condition is optional with .UNTILCXZ.
-
- REPEAT expression
- statements
- ENDM
- Marks a block that is to be repeated expression times. Same as REPT.
-
- REPT
- See REPEAT.
-
- .SALL
- See .NOLISTMACRO.
- name SBYTE initializer [ , initializer]...
- Allocates and optionally initializes a signed byte of storage for each
- initializer. Can also be used as a type specifier anywhere a type is legal.
-
- name SDWORD initializer [ , initializer]...
- Allocates and optionally initializes a signed doubleword
- (4 bytes) of storage for each initializer. Can also be used as a type
- specifier anywhere a type is legal.
-
- name SEGMENT [ READONLY] [ align] [ combine] [ use] [ ' class ']
- statements
- name ENDS
- Defines a program segment called name having segment attributes align (BYTE
- AT address, PRIVATE), use ( USE16, USE32, FLAT), and class.
-
- .SEQ
- Orders segments sequentially (the default order).
-
- .SFCOND
- See .NOLISTIF.
-
- name SIZESTR textitem
- Finds the size of a text item.
-
- .STACK [ size]
- When used with .MODEL, defines a stack segment (with segment name STACK).
- The optional size specifies the number of bytes for the stack (default
- 1,024). The .STACK directive automatically closes the stack statement.
-
- .STARTUP
- Generates program start-up code.
-
- STRUC
- See STRUCT.
-
- name STRUCT [ alignment] [ , NONUNIQUE]
- fielddeclarations
- name ENDS
- Declares a structure type having the specified fielddeclarations. Each
- field must be a valid data definition. Same as STRUC.
-
-
- STRUC
- STRUCT
-
- name SUBSTR textitem , position [ , length]
- Returns a substring of textitem, starting at position. The textitem can
- be a literal string, a constant preceded by a %, or the string returned by
- a macro function.
-
- SUBTITLE text
- Defines the listing subtitle. Same as SUBTTL.
-
- SUBTTL
- See SUBTITLE.
- name SWORD initializer [ , initializer]...
-
- Allocates and optionally initializes a signed word (2 bytes) of storage for
- each initializer. Can also be used as a type specifier anywhere a type is
- legal.
- [ name] TBYTE initializer [ , initializer]...
- Allocates and optionally initializes 10 bytes of storage for each
- initializer. Can also be used as a type specifier anywhere a type is legal.
- name TEXTEQU [ textitem]
-
- Assigns textitem to name. The textitem can be a literal string, a
- constant preceded by a %, or the string returned by a macro function.
-
- .TFCOND
- Toggles listing of false conditional blocks.
-
- TITLE text
- Defines the program listing title.
-
- name TYPEDEF type
- Defines a new type called name, which is equivalent to type.
-
- name UNION [ alignment] [ , NONUNIQUE]
- fielddeclarations
- [ name] ENDS
- Declares a union of one or more data types. The fielddeclarations must be
- valid data definitions. Omit the ENDS name label on nested UNION
- definitions.
-
- .UNTIL
- See .REPEAT.
-
- .UNTILCXZ
- See .REPEAT.
-
- .WHILE condition
- statements
- .ENDW
- Generates code that executes the block of statements while condition
- remains true.
-
- WHILE expression
- statements
- ENDM
- Repeats assembly of block statements as long as expression remains true.
-
- [ name] WORD initializer [ , initializer]...
- Allocates and optionally initializes a word (2 bytes) of storage for each
-
- initializer. Can also be used as a type specifier anywhere a type is legal.
-
- .XALL
- See .LISTMACRO.
-
- .XCREF
- See .NOCREF.
-
- .XLIST
- See .NOLIST.
-
-
-
-
- Predefined Symbols
-
- $
- The current value of the location counter.
-
- ?
- In data declarations, a value that the assembler allocates but does not
- initialize.
-
- @@:
- Defines a local code label. Overrides any previous @@: labels. See @B and
-
- @F.
- The location of the previous @@: label.
- @CatStr( string1 [ , string2...] )
-
- Macro function that concatenates one or more strings. Returns a string.
-
-
- @code
- The name of the code segment (text macro).
-
- @CodeSize
- 0 for TINY, SMALL, COMPACT, and FLAT models, and 1 for MEDIUM, LARGE,
- and HUGE models (numeric equate).
-
- @Cpu
- A bit mask specifying the processor mode (numeric equate).
-
- @CurSeg
- The name of the current segment (text macro).
-
- @data
- The name of the default data group. Evaluates to DGROUP for all models
- except FLAT. Evaluates to FLAT under the FLAT memory model (text macro).
-
-
- @DataSize
- 0 for TINY, SMALL, MEDIUM, and FLAT models, 1 for COMPACT and LARGE
- models, and 2 for HUGE model (numeric equate).
-
- @Date
- The system date in the format mm/dd/yy (text macro).
-
- @Environ( envvar )
- Value of environment variable envvar (macro function).
-
-
- @F
- The location of the next @@: label.
-
- @fardata
- The name of the segment defined by the .FARDATA directive (text macro).
-
- @fardata?
- The name of the segment defined by the .FARDATA? directive (text macro).
-
- @FileCur
- The name of the current file (text macro).
-
- @FileName
- The base name of the main file being assembled (text macro).
-
- @InStr( [ position] , string1 , string2 )
-
- Macro function that finds the first occurrence of string2 in string1. The
- starting position within string1 is optional. Returns an integer (0 if
- string2 is not found).
-
-
- @Interface
- Information about the language parameters (numeric equate).
-
- @Line
- The source line number in the current file (numeric equate).
-
- @Model
- 1 for TINY model, 2 for SMALL model, 3 for COMPACT model, 4 for MEDIUM
- model, 5 for LARGE model, 6 for HUGE model, and 7 for FLAT model (numeric
- equate).
-
- @SizeStr( string )
- Macro function that returns the length of the given string. Returns an
- integer.
-
- @SubStr( string , position [ , length] )
- Macro function that returns a substring starting at position.
-
- @stack
- DGROUP for near stacks or STACK for far stacks (text macro).
-
- @Time
- The system time in 24-hour hh:mm:ss format (text macro).
-
- @Version
- 600 in MASM 6.0 (text macro).
-
- @WordSize
- 2 for a 16-bit segment or 4 for a 32-bit segment (numeric equate).
-
-
-
- Operators
-
-
- expression1 + expression2
- Returns expression1 plus expression2.
-
- expression1 - expression2
- Returns expression1 minus expression2.
-
- expression1 * expression2
- Returns expression1 times expression2.
-
- expression1 / expression2
- Returns expression1 divided by expression2.
-
- -expression
- Reverses the sign of expression.
-
- [expression1] [expression2 ]
- Returns expression1 plus [expression2 ].
-
- segment : expression
- Overrides the default segment of expression with segment. The segment can
- be a segment register, group name, segment name, or segment expression. The e
-
- expression . field [ . field]...
- Returns expression plus the offset of field within its structure or union.
-
- [register ]. field [ . field]...
- Returns value at the location pointed to by register plus the offset of
- field within its structure or union.
-
- <text >
- Treats text as a single literal element.
-
- "text"
- Treats "text" as a string.
-
- 'text'
- Treats 'text' as a string.
-
- !character
- Treats character as a literal character rather than as an operator or
- symbol.
-
- ;text
- Treats text as a comment.
-
- ;;text
- Treats text as a comment that will not be listed in expanded macros.
-
- %expression
- Treats the value of expression in a macro argument as text.
-
- ¶meter &
- Replaces parameter with its corresponding argument value.
-
- ABS
- See the EXTERNDEF directive.
-
- ADDR
- See the INVOKE directive.
-
- expression1 AND expression2
- Returns the result of a bitwise Boolean AND done on expression1 and expressio
-
- count DUP (initialvalue [ , initialvalue]...)
- Specifies count number of declarations of initialvalue.
-
- expression1 EQ expression2
- Returns true (-1) if expression1 equals expression2, or returns false (0)
- if it does not.
-
- expression1 GE expression2
- Returns true (-1) if expression1 is greater than or equal to expression2,
- or returns false (0) if it is not.
-
- expression1 GT expression2
- Returns true (-1) if expression1 is greater than expression2, or returns
- false (0) if it is not.
-
- HIGH expression
- Returns the high byte of expression.
-
- HIGHWORD expression
- Returns the high word of expression.
-
- expression1 LE expression2
- Returns true (-1) if expression1 is less than or equal to expression2, or
- returns false (0) if it is not.
-
- LENGTH variable
- Returns the number of data items in variable created by the first
- initializer.
-
- LENGTHOF variable
- Returns the number of data objects in variable.
-
- LOW expression
- Returns the low byte of expression.
-
- LOWWORD expression
- Returns the low word of expression.
-
- LROFFSET expression
- Returns the offset of expression. Same as OFFSET, but it generates a
- loader resolved offset, which allows Windows to relocate code segments.
-
- expression1 LT expression2
- Returns true (-1) if expression1 is less than expression2, or returns
- false (0) if it is not.
-
- MASK {recordfieldname | record}
- Returns a bit mask in which the bits in recordfieldname or record are set
- and all other bits are cleared.
-
- expression1 MOD expression2
- Returns the remainder of dividing expression1 by expression2.
-
- expression1 NE expression2
- Returns true (-1) if expression1 does not equal expression2, or returns
- false (0) if it does.
-
- NOT expression
- Returns expression with all bits reversed.
-
- OFFSET expression
- Returns the offset of expression.
-
- OPATTR expression
-
- Returns a word defining the mode and scope of expression. The low byte is
- identical to the byte returned by .TYPE. The high byte contains additional
- information.
-
- expression1 OR expression2
- Returns the result of a bitwise OR done on expression1 and expression2.
-
- type PTR expression
- Forces the expression to be treated as having the specified type.
-
- [distance] PTR type
-
- Specifies a pointer to type.
-
- SEG expression
- Returns the segment of expression.
-
- expression SHL count
- Returns the result of shifting the bits of expression left count number of
- bits.
-
- SHORT label
- Sets the type of label to short. All jumps to
- label must be short (within
- the range -128 to +127 bytes from the jump instruction to label).
-
- expression SHR count
- Returns the result of shifting the bits of expression right count number
- of bits.
-
- SIZE variable
- Returns the number of bytes in variable allocated by the first initializer.
-
- SIZEOF {variable | type}
- Returns the number of bytes in variable or type.
-
- THIS type
- Returns an operand of specified type whose offset and segment values are
- equal to the current location-counter value.
-
- .TYPE expression
- See OPATTR.
-
- TYPE expression
- Returns the type of expression.
-
- WIDTH {recordfieldname | record}
- Returns the width in bits of the current recordfieldname or record.
-
- expression1 XOR expression2
- Returns the result of a bitwise Boolean XOR done on expression1 and
- expression2.
-
-
-
-
-
- Run-Time Operators
-
- The following operators are used only within .IF, .WHILE, or .REPEAT
- blocks and are evaluated at run time, not at assembly time:
-
- expression1 == expression2
- Is equal to.
-
- expression1 != expression2
- Is not equal to.
-
- expression1 > expression2
- Is greater than.
-
- expression1 >= expression2
- Is greater than or equal to.
-
- expression1 < expression2
- Is less than.
-
- expression1 <= expression2
- Is less than or equal to.
-
- expression1 || expression2
- Logical OR.
-
- expression1 && expression2
- Logical AND.
-
- expression1 & expression2
- Bitwise AND.
-
- ! expression
- Logical negation.
-
- CARRY?
- Carry (C) processor flag.
-
- OVERFLOW?
- Overflow (O) processor flag.
-
- PARITY?
- Parity (P) processor flag.
-
- SIGN?
- Sign (S) processor flag.
-
- ZERO?
- Zero (Z) processor flag.
-
-
- Processor
-
-
-
- Topical Cross-Reference for Processor
-
-
- Data Transfer
- MOV
- MOVS
- MOVSX
- MOVZX
- XCHG
- LODS
- STOS
- LEA
- LDS/LES
- LFS/LGS/LSS
- XLAT/XLATB
- BSWAP#
- CMPXCHG#
- XADD#
-
-
- Stack
- PUSH
- PUSHF
- PUSHA*
- POP
- POPF
- POPA*
- ENTER*
- LEAVE*
-
-
- Input/Output
- IN
- INS*
- OUT
- OUTS*
-
-
- Type Conversion
- CBW
- CWD
- CWDE
- CDQ
- BSWAP#
-
-
- Flag
- CLC
- CLD
- CLI
- CMC
- STC
- STD
- STI
- POPF
- PUSHF
- LAHF
- SAHF
-
-
- String
- MOVS
- LODS
- STOS
- SCAS
- CMPS
- INS*
- OUTS*
- REP
- REPE/REPZ
- REPNE/REPNZ
-
-
- Arithmetic
- ADD
- ADC
- INC
- SUB
- SBB
- DEC
- NEG
- IMUL
- MUL
- DIV
- IDIV
- XADD#
-
-
- Bit Operations
- AND
- OR
- XOR
- NOT
- ROL
- ROR
- RCL
- RCR
- SHL/SAL
- SHR
- SAR
- SHLD
- SHRD
- BSF
- BSR
- BT
- BTC
- BTR
- BTS
-
-
- Compare
- CMP
- CMPS
- TEST
- BT
- BTC
- BTR
- BTS
- CMPXCHG#
-
-
- Unconditional Transfer
- CALL
- INT
- IRET
- RET
- RETN/RETF
- JMP
-
-
- Loop
- LOOP
- LOOPE/LOOPZ
- LOOPNE/LOOPNZ
- JCXZ/JECXZ
-
-
- Conditional Transfer
- JB/JNAE
- JAE/JNB
- JBE/JNA
- JA/JNBE
- JE/JZ
- JNE/JNZ
- JL/JNGE
- JGE/JNL
- JLE/JNG
- JG/JNLE
- JS
- JNS
- JC
- JNC
- JO
- JNO
- JP/JPE
- JNP/JPO
- JCXZ/JECXZ
- INTO
- BOUND*
-
-
- Conditional Set
- SETB/SETNAE
- SETAE/SETNB
- SETBE/SETNA
- SETA/SETNBE
- SETE/SETZ
- SETNE/SETNZ
- SETL/SETNGE
- SETGE/SETNL
- SETLE/SETNG
- SETG/SETNLE
- SETS
- SETNS
- SETC
- SETNC
- SETO
- SETNO
- SETP/SETPE
- SETNP/SETPO
-
-
- BCD Conversion
- AAA
- AAS
- AAM
- AAD
- DAA
- DAS
-
-
- Processor Control
- NOP
- WAIT
- LOCK
- HLT
-
-
- Process Control
- ARPL
- CLTS
- LAR
- LGDT/LIDT/LLDT
- LMSW
- LSL
- LTR
- SGDT/SIDT/SLDT
- SMSW
- STR
- VERR
- VERW
- MOV special
- INVD#
- INVLPG#
- WBINVD#
-
-
-
- Interpreting Processor Instructions
-
- This section provides an alphabetical reference to the instructions for the
- 8086, 8088, 80286, 80386, and 80486 processors. Figure 1 gives a key to each
- element of the reference.
-
-
- Flags
- The first row of the display has a one-character abbreviation for the flag
- name. Only the flags common to all processors are shown.
-
- O Overflow T Trap A Auxiliary carry
- D Direction S Sign P Parity
- I Interrupt Z Zero C Carry
-
-
- The second line has codes indicating how the flag can be affected.
- 1 Sets the flag
- 0 Clears the flag
- ? May change the flag, but the value is not predictable
- blank No effect on the flag
- +- Modifies according to the rules associated with the flag
-
- Syntax
- Each encoding variation may have different syntaxes corresponding to
- different addressing modes. The following abbreviations are used:
- reg
- A general-purpose register of any size
- segreg
- One of the segment registers: DS, ES, SS, or CS (also FS or GS on the
- 80386/486)
- accum
- An accumulator register of any size: AL or AX (also EAX on the 80386/486)
- mem
- A direct or indirect memory operand of any size
- label
- A labeled memory location in the code segment
- src,dest
- A source or destination memory operand used in a string operation
- immed
- A constant operand
- In some cases abbreviations have numeric suffixes to specify that the
- operand must be a particular size. For example, reg16 means that only a
- 16-bit (word) register is accepted.
-
-
- Examples
- One or more examples are shown for each syntax. Their position is not
- related to the clock speeds in the right column.
-
- Clock Speeds
- Column 3 shows the clock speeds for each processor. Sometimes an instruction
- may have more than one clock speed. Multiple speeds are separated by commas.
- If several speeds are part of an expression, they are enclosed in
- parentheses. The following abbreviations are used to specify variations:
- EA Effective address. This applies only to the 8088 and 8086 processors,
- described in the next section.
- b,w,d Byte, word, or doubleword operands.
- pm Protected mode.
- n Iterations. Repeated instructions may have a base number of clocks pl
- number of clocks for each iteration. For example, 8+4n means eight clocks
- plus four clocks for each iteration.
- noj No jump. For conditional jump instructions, noj indicates the speed i
- condition is false and the jump is not taken.
- m Next instruction components. Some control transfer instructions take
- different times depending on the length of the next instruction executed. On
- the 8088 and 8086, m is never a factor. On the 80286, m is the number of
- bytes in the instruction. On the 80386/486, m is the number of components.
- Each byte of encoding is a component, and the displacement and data are
- separate components.
- W88,88 8088 exceptions. See "Timings on the 8088 and 8086 Processors."
-
- Clocks can be converted to nanoseconds by dividing one microsecond by the
- number of megahertz (MHz) at which the processor is running. For example, on
- a processor running at 8 MHz, one clock takes 125 nanoseconds (1000 MHz per
- nanosecond / 8 MHz).
-
- The clock counts are for best-case timings. Actual timings vary depending on
- wait states, alignment of the instruction, the status of the prefetch queue,
- and other factors.
-
-
- Timings on the 8088 and 8086 Processors
- Because of its 8-bit data bus, the 8088 always requires two fetches to get a
- 16-bit operand. Instructions that work on 16-bit memory operands therefore
- take longer on the 8088 than on the 8086. Separate 8088 timings are shown in
- parentheses following the main timing. For example, 9 (W88=13) means that
- the 8086 with any operands or the 8088 with byte operands take 9 clocks, but
- the 8088 with word operands takes 13 clocks. Similarly, 16 (88=24) means
- that the 8086 takes 16 clocks, but the 8088 takes 24 clocks.
- On the 8088 and 8086, the effective address (EA) value must be added for
- instructions that operate on memory operands. A displacement is any direct
- memory or constant operand, or any combination of the two. Below are the
- number of clocks to add for the effective address.
- ╓┌───────────────────────────────┌──────────┌────────────────────────────────╖
- ────────────────────────────────────────────────────────────────────────────
- Components EA Clocks Examples
-
- Displacement 6 mov ax,stuffmov ax,stuff+2
-
- Base or index 5 mov ax,[bx]mov ax,[di]
-
- ────────────────────────────────────────────────────────────────────────────
- Displacementplus base or index 9 mov ax,[bp+8]mov
- ax,stuff[di]
-
- Base plus index (BP+DI,BX+SI) 7 mov ax,[bx+si]mov ax,[bp+di]
-
- Base plus index (BP+SI,BX+DI) 8 mov ax,[bx+di]mov ax,[bp+si]
-
- Base plus indexplus 11 mov ax,stuff[bx+si]mov
- displacement (BP+DI+disp ax,[bp+di+8]
- ,BX+SI+disp)
-
- Base plus indexplus 12 mov ax,stuff[bx+di]mov
- displacement (BP+SI+disp ax,[bp+si+20]
- ,BX+DI+disp)
-
- Segment override EA+2 mov ax,es:stuffmov
- ax,ds:[bp+10]
-
-
-
-
-
- Timings on the 80286-80486 Processors
- On the 80286-80486 processors, the effective address calculation is handled
- by hardware and is therefore not a factor in clock calculations except in
- one case. If a memory operand includes all three possible elements--a
- displacement, a base register, and an index register--then add one clock. On
- the 80486, the extra clock is not always used. Examples are shown below.
-
- mov ax,[bx+di] ;No extra
- mov ax,array[bx+di] ;One extra
- mov ax,[bx+di+6] ;One extra
-
-
- Note: 80186 and 80188 timings are different from 8088, 8086, and 80286
- timings. They are not shown in this manual. Timings are also not shown for
- protected-mode transfers through gates or for the virtual 8086 mode
- available on the 80386/486 processors.
-
- Interpreting Encodings
- Encodings are shown for each variation of the instruction. This section
- describes encoding for all processors except the 80386/486. The encodings
- take the form of boxes filled with 0s and 1s for bits that are constant for
- the instruction variation, and abbreviations (in italics) for the following
- variable bits or bitfields:
- d
- Direction bit. If set, do memory to register or register to register; the
- reg field is the destination. If cleared, do register to memory; the reg
- field is the source.
-
- w
- Word/byte bit. If set, use 16-bit or 32-bit operands. If cleared, use 8-bit
- operands.
-
- s
- Sign bit. If set, sign-extend 8-bit immediate data to 16 bits.
-
- mod
- Mode. This two-bit field gives the register/memory mode with displacement.
- The possible values are shown below.
-
- mod Meaning
- 00 This value can have two meanings:
- If r/m is 110, a direct memory operand is used.
- If r/m is not 110, the displacement is 0 and an indirect memory operand is
- used. The operand must be based, indexed, or based indexed.
- 01 An indirect memory operand is used with an 8-bit displacement.
- 10 An indirect memory operand is used with a 16-bit displacement.
- 11 A two-register instruction is used; the reg field specifies the
- destination and the r/m field specifies the source.
-
-
- reg
- Register. This three-bit field specifies one of the general-purpose
- registers:
-
- reg 16/32 biut if w=1 8-bit if w=0
- 000 AX/EAX AL
- 001 CX/ECX CL
- 010 DX/EDX DL
- 011 BX/EBX BL
- 100 SP/ESP AH
- 101 BP/EBP CH
- 110 SI/ESI DH
- 111 DI/EDI BH
-
- The reg field is sometimes used to specify encoding information rather than
- a register.
- sreg
- Segment register. This field specifies one of the segment registers.
- sreg Register
- 000 ES
- 001 CS
- 010 SS
- 011 DS
- 100 FS
- 101 GS
-
-
- r/m
- Register/memory. This three-bit field specifies a register or memory r/m
- operand.
- If the mod field is 11, r/m specifies the source register using the reg
- field codes. Otherwise, the field has one of the following values:
-
- r/m Operand Address
-
- 000 DS:[BX+SI+disp]
- 001 DS:[BX+DI+disp]
- 010 SS:[BP+SI+disp]
- 011 SS:[BP+DI+disp]
- 100 DS:[SI+disp]
- 101 DS:[DI+disp]
- 110 SS:[BP+disp]*
-
- * If mod is 00 and r/m is 110, then the operand is treated as a direct
- memory operand. This means that the operand [BP] is encoded as [BP+0] rather
- than having a short-form like other register indirect operands. Encoding
- [BX] takes one byte, but encoding [BP] takes two.
- 111 DS:[BX+disp]
-
-
- disp
- Displacement. These bytes give the offset for memory operands. The possible
- lengths (in bytes) are shown in parentheses.
-
- data
- Data. These bytes gives the actual value for constant values. The possible
- lengths (in bytes) are shown in parentheses.
-
- If a memory operand has a segment override, the entire instruction has one
- of the following bytes as a prefix:
-
- Prefix Segment
- 00101110 (2Eh) CS
- 00111110 (3Eh) DS
- 00100110 (26h) ES
- 00110110 (36h) SS
- 01100100 (64h) FS
- 01100101 (65h) GS
-
- Example
- As an example, assume you want to calculate the encoding for the following
- statement (where warray is a 16-bit variable):
- add warray[bx+di],-3
-
- First look up the encoding for the immediate to memory syntax of the ADD
- instruction:
- 100000sw
- mod,000,r/m
-
- data (0, 1, or 2)
-
-
- Since the destination is a word operand, the w bit is set. The 8-bit
- immediate data must be sign-extended to 16 bits in order to fit into the
- operand, so the s bit is also set. The first byte of the instruction is
- therefore 10000011 (83h).
- Since the memory operand can be anywhere in the segment, it must have a
- 16-bit offset (displacement). Therefore the mod field is 10. The reg field
- is 000, as shown in the encoding. The r/m coding for [bx+di+disp] is 001.
- The second byte is 10000001 (81h).
- The next two bytes are the offset of warray. The low byte of the offset is
- stored first and the high byte second. For this example, assume that warray
- is located at offset 10EFh.
- The last byte of the instruction is used to store the 8-bit immediate value
- -3 (FDh). This value is encoded as 8 bits (but sign-extended to 16 bits by
- the processor).
-
- 83 81 EF 10 FD
-
- You can confirm this by assembling the instruction and looking at the
- resulting assembly listing.
-
- Interpreting 80386/486 Encoding Extensions
- This book shows 80386/486 encodings for instructions that are available only
- on the 80386/486 processors. For other instructions, encodings are shown
- only for the 16-bit subset available on all processors. This section tells
- how to convert the 80286 encodings shown in the book to 80386/486 encodings
- that use extensions such as 32-bit registers and memory operands.
- The extended 80386/486 encodings differ in that they can have additional
- prefix bytes, a Scaled Index Base (SIB) byte, and 32-bit displacement and
- immediate bytes. Use of these elements is closely tied to the segment word
- size. The use type of the code segment determines whether the instructions
- are processed in 32-bit mode (USE32) or
- 16-bit mode (USE16). Current versions of MS-DOS(R) and Microsoft Windows and
- version 1.x of OS/2 use 16-bit mode only. Version 2.0 of OS/2 uses 32-bit
- mode.
-
- Additional bytes may be added for a segment prefix, a repeat prefix, or the
- LOCK prefix.
-
-
-
- Address-Size Prefix
- The address-size prefix determines the segment word size of the operation.
- It can override the default size for calculating the displacement of memory
- addresses. The address prefix byte is 67h. The assembler automatically
- inserts this byte where appropriate.
- In 32-bit mode (USE32 or FLAT code segment), displacements are calculated as
- 32-bit addresses. The effective address-size prefix must be used for any
- instructions that must calculate addresses as 16-bit displacements. In
- 16-bit mode the defaults are reversed. The prefix must be used to specify
- calculation of 32-bit displacements.
-
-
- Operand-Size Prefix
- The operand-size prefix determines the size of operands. It can override the
- default size of registers or memory operands. The operand-size prefix byte
- is 66h. The assembler automatically inserts this byte where appropriate.
- In 32-bit mode, the default sizes for operands are 8 bits and 32 bits
- (depending on the w bit). For most instructions, the operand-size prefix
- must be used for any instructions that use 16-bit operands. In 16-bit mode,
- the default sizes are 8 bits and 16 bits. The prefix must be used for any
- instructions that use 32-bit operands. Some instructions use 16-bit
- operands, regardless of mode.
-
-
- Encoding Differences for 32-Bit Operations
- When 32-bit operations are performed, the meaning of certain bits or fields
- are different than for 16-bit operations. The changes may affect default
- operations in 32-bit mode, or 16-bit mode operations in which the
- address-size prefix or the operand-size prefix is used. The following fields
- may have a different meaning for 32-bit operations than the meaning
- described in the "Interpreting Encodings" section:
-
- w
- Word/byte bit. If set, use 32-bit operands. If cleared, use
- 8-bit operands.
-
- s
- Sign bit. If set, sign-extend 8-bit or 16-bit immediate data to 32 bits.
-
- mod
- Mode. This field indicates the register/memory mode. The value 11 still
- indicates a register-to-register operation with r/m containing the code for
- a 32-bit source register. However, other codes have different meanings as
- shown in the tables in the next section.
-
- reg
- Register. The codes for 16-bit registers are extended to
- 32-bit registers. For example, if the reg field is 000, EAX
- is used instead of AX. Use of 8-bit registers is unchanged.
-
- sreg
- Segment register. The 80386 has the following additional segment registers:
- sreg Register
- 100 FS
- 101 GS
-
- r/m
- Register/memory. If the r/m field is used for the source register, 32-bit
- registers are used as for the reg field. If the field is used for memory
- operands, the meaning is completely different than for 16-bit operations, as
- shown in the tables in the next section.
-
- disp
- Displacement. This field is four bytes for 32-bit addresses.
-
- data
- Data. Immediate data can be up to four bytes.
-
-
- Scaled Index Base Byte
- Many 80386/486 extended memory operands are too complex to be represented by
- a single mod-reg-r/m byte. For these operands, a value of 100 in the r/m
- field signals the presence of a second encoding byte called the Scaled Index
- Base (SIB) byte. The SIB byte is made up of the following fields:
-
- ss
- Scaling Field. This two-bit field specifies one of the following scaling
- factors:
- ss Scale
- 00 1
- 01 2
- 10 4
- 11 8
-
- index
- Index Register. This three-bit field specifies one of the following index
- registers:
- index Register
- 000 EAX
- 001 ECX
- 010 EDX
- 011 EBX
- 100 no index
- 101 EBP
- 110 ESI
- 111 EDI
-
- Note that ESP cannot be an index register. If the index field is 100, then
- the ss field must be 00.
-
- base
- Base Register. This three-bit field combines with the mod field to specify
- the base register and the displacement. Note that the base field only
- specifies the base when the r/m field is 100. Otherwise, the r/m field
- specifies the base.
-
- If a memory operand has a segment override, the entire instruction has one
- of the prefixes discussed earlier in the "Interpreting Encodings" section or
- one of the following prefixes for the segment registers available only on
- the 80386/486:
- Prefix Segment
- 01100100 (64h) FS
- 01100101 (65h) GS
-
-
- Example
- Assume you want to calculate the encoding for the following statement (where
- warray is a 16-bit variable). Assume also that the instruction is used in
- 16-bit mode.
- add warray[eax+ecx*2],-3
-
- First look up the encoding for the immediate to memory syntax of the ADD
- instruction:
- 100000sw
- mod,000,r/m
-
- This encoding must be expanded to account for 80386/486 extensions. Note
- that the instruction operates on 16-bit data in a 16-bit mode program.
- Therefore, the operand-size prefix is not needed. However, the instruction
- does use 32-bit registers to calculate a 32-bit effective address. Thus the
- first byte of the encoding must be the effective address-size prefix,
- 01100111 (67h).
-
- The opcode byte is the same (83h) as for the 80286 example described in the
- "Interpreting Encodings" section.
-
- The mod-reg-r/m byte must specify a based indexed operand with a scaling
- factor of two. This operand cannot be specified with a single byte, so the
- encoding must also use the SIB byte. The value 100 in the r/m field
- specifies an SIB byte. The reg field is 000, as shown in the encoding. The
- mod field is 10 for operands that have base and scaled index registers and a
- 32-bit displacement. The combined mod, reg, and r/m fields for the second
- byte are 10000100 (84h).
-
- The SIB byte is next. The scaling factor is 2, so the ss field is 01. The
- index register is ECX, so the index field is 001. The base register is EAX,
- so the base field is 000. The SIB byte is 01001000 (48h).
-
- The next four bytes are the offset of warray. The low bytes are stored
- first. For this example, assume that warray is located at offset 10EFh.
- This offset only requires two bytes, but four must be supplied because of
- the addressing mode. A 32-bit address can be safely used in 16-bit mode as
- long as the upper word is 0.
-
- The last byte of the instruction is used to store the 8-bit immediate value
- -3 (FDh).
-
- The encoding is shown below in hexadecimal:
- 67 83 84 48 00 00 EF 10 FD
-
-
-
- Processor Instructions
-
-
-
- AAA
- ASCII Adjust after Addition
-
- Adjusts the result of an addition to a decimal digit (0-9). The previous
- addition instruction should place its 8-bit sum in AL. If the sum is greater
- than 9h, AH is incremented and the carry and auxiliary carry flags are set.
- Otherwise, the carry and auxiliary carry flags are cleared.
-
-
-
- AAD
- ASCII Adjust before Division
-
- Converts unpacked BCD digits in AH (most significant digit) and AL (least
- significant digit) to a binary number in AX. This instruction is often used
- to prepare an unpacked BCD number in AX for division by an unpacked BCD
- digit in an 8-bit register.
-
-
-
- AAM
- ASCII Adjust after Multiply
-
- Converts an 8-bit binary number less than 100 decimal in AL to an unpacked
- BCD number in AX. The most significant digit goes in AH and the least
- significant in AL. This instruction is often used to adjust the product
- after a MUL instruction that multiplies unpacked BCD digits in AH and AL. It
- is also used to adjust the quotient after a DIV instruction that divides a
- binary number less than 100 decimal in AX by an unpacked BCD number.
-
-
-
-
- AAS
- ASCII Adjust after Subtraction
-
- Adjusts the result of a subtraction to a decimal digit (0-9). The previous
- subtraction instruction should place its 8-bit result in AL. If the result
- is greater than 9h, AH is decremented and the carry and auxiliary carry
- flags are set. Otherwise, the carry and auxiliary carry flags are cleared.
-
-
-
- ADC
- Add with Carry
-
- Adds the source operand, the destination operand, and the value of the carry
- flag. The result is assigned to the destination operand. This instruction is
- used to add the more significant portions of numbers that must be added in
- multiple registers.
-
-
-
- ADD
- Add
-
- Adds the source and destination operands and puts the sum in the destination
- operand.
-
-
-
- AND
- Logical AND
-
- Performs a bitwise AND operation on the source and destination operands and
- stores the result in the destination operand. For each bit position in the
- operands, if both bits are set, the corresponding bit of the result is set.
- Otherwise, the corresponding bit of the result is cleared.
-
-
-
- ARPL
- Adjust Requested Privilege Level
- 80286-80486 Protected Only
-
- Verifies that the destination Requested Privilege Level (RPL) field (bits 0
- and 1 of a selector value) is less than the source RPL field. If it is not,
- ARPL adjusts the destination RPL up to match the source RPL. The destination
- operand should be a 16-bit memory or register operand containing the value
- of a selector. The source operand should be a
- 16-bit register containing the test value. The zero flag is set if the
- destination is adjusted; otherwise, the flag is cleared. ARPL is useful only
- in 80286-80486 protected mode. See Intel documentation for details on
- selectors and privilege levels.
-
-
-
- BOUND
- Check Array Bounds
- 80186-80486 Only
-
- Verifies that a signed index value is within the bounds of an array. The
- destination operand can be any 16-bit register containing the index to be
- checked. The source operand must then be a 32-bit memory operand in which
- the low and high words contain the starting and ending values, respectively,
- of the array. (On the 80386/486 processors, the destination operand can be a
- 32-bit register; in this case, the source operand must be a 64-bit operand
- made up of 32-bit bounds.) If the source operand is less than the first
- bound or greater than the last bound, an interrupt 5 is generated. The
- instruction pointer pushed by the interrupt (and returned by IRET) points to
- the BOUND instruction rather than to the next instruction.
-
-
-
- BSF/BSR
- Bit Scan
- 80386/486 Only
-
- Scans an operand to find the first set bit. If a set bit is found, the zero
- flag is set and the destination operand is loaded with the bit index of the
- first set bit encountered. If no set bit is found, the zero flag is cleared.
- BSF (Bit Scan Forward) scans from bit 0 to the most significant bit. BSR
- (Bit Scan Reverse) scans from the most significant bit of an operand to bit
- 0.
-
-
-
- BSWAP
- Byte Swap
- 80486 Only
-
- Takes a single 32-bit register as operand and exchanges the first byte with
- the fourth and the second byte with the third. This instruction does not
- alter any bit values within the bytes and is useful for quickly translating
- between 8086-family byte storage and storage schemes in which the high byte
- is stored first.
-
-
-
- BT/BTC/BTR/BTS
- Bit Tests
- 80386/486 Only
-
- Copies the value of a specified bit into the carry flag, where it can be
- tested by a JC or JNC instruction. The destination operand specifies the
- value in which the bit is located; the source operand specifies the bit
- position. BT simply copies the bit to the flag. BTC copies the bit and
- complements (toggles) it in the destination. BTR copies the bit and resets
- (clears) it in the destination. BTS copies the bit and sets it in the
- destination.
-
-
-
- CALL
- Call Procedure
-
- Calls a procedure. The instruction pushes the address of the next
- instruction onto the stack and jumps to the address specified by the
- operand. For NEAR calls, SP is decreased by 2, the offset (IP) is pushed,
- and the new offset is loaded into IP.
- For FAR calls, SP is decreased by 2, the segment (CS) is pushed, and the new
- segment is loaded into CS. Then SP is decreased by 2 again, the offset (IP)
- is pushed, and the new offset is loaded into IP. A subsequent RET
- instruction can pop the address so that execution continues with the
- instruction following the call.
-
-
-
- CBW
- Convert Byte to Word
-
- Converts a signed byte in AL to a signed word in AX by extending the sign
- bit of AL into all bits of AH.
-
-
-
- CDQ
- Convert Double to Quad
- 80386/486 Only
-
- Converts the signed doubleword in EAX to a signed quadword in the EDX:EAX
- register pair by extending the sign bit of EAX into all bits of EDX.
-
-
-
- CLC
- Clear Carry Flag
-
- Clears the carry flag.
-
-
-
- CLD
- Clear Direction Flag
-
- Clears the direction flag. All subsequent string instructions will process
- up (from low addresses to high addresses) by increasing the appropriate
- index registers.
-
-
-
- CLI
- Clear Interrupt Flag
-
- Clears the interrupt flag. When the interrupt flag is cleared, maskable
- interrupts are not recognized until the flag is set again with the STI
- instruction. In protected mode, CLI only clears the flag if the current
- task's privilege level is less than or equal to the value of the IOPL flag.
- Otherwise, a general-protection fault occurs.
-
-
-
- CLTS
- Clear Task Switched Flag
- 80286-80486 Privileged Only
-
- Clears the task switched flag in the Machine Status Word (MSW) of the 80286
- or the CR0 register of the 80386/486. This instruction can be used only in
- systems software executing at privilege level 0. See Intel documentation for
- details on the task-switched flag and other privileged-mode concepts.
-
-
-
- CMC
- Complement Carry Flag
-
- Complements (toggles) the carry flag.
-
-
-
- CMP
- Compare Two Operands
-
- Compares two operands as a test for a subsequent conditional-jump or set
- instruction. CMP does this by subtracting the source operand from the
- destination operand and setting the flags according to the result. CMP is
- the same as the SUB instruction, except that the result is not stored.
-
-
-
- CMPS/CMPSB/
- CMPSW/CMPSD
- Compare String
-
- Compares two strings. DS:SI must point to the source string and ES:DI must
- point to the destination string (even if operands are given). For each
- comparison, the destination element is subtracted from the source element
- and the flags are updated to reflect the result (although the result is not
- stored). DI and SI are adjusted according to the size of the operands and
- the status of the direction flag. They are increased if the direction flag
- has been cleared with CLD or decreased if the direction flag has been set
- with STD.
- If the CMPS form of the instruction is used, operands must be provided to
- indicate the size of the data elements to be processed. A segment override
- can be given for the source (but not for the destination). If CMPSB (bytes),
- CMPSW (words), or CMPSD (doublewords on the 80386/486 only) is used, the
- instruction determines the size of the data elements to be processed.
-
- CMPS and its variations are normally used with repeat prefixes. REPNE (or
- REPNZ) is used to find the first match between two strings. REPE (or REPZ)
- is used to find the first nonmatch. Before the comparison, CX should contain
- the maximum number of elements to compare. After a REPNE CMPS, the zero flag
- will be cleared if no match was found. After a REPE CMPS, the zero flag will
- be set if no nonmatch was found. Otherwise, SI and DI will point to the
- element after the first match or nonmatch.
-
-
-
- CMPXCHG
- Compare and Exchange
- 80486 Only
-
- Compares the destination operand to the accumulator (AL, AX, or EAX). If
- equal, the source operand is copied to the destination. Otherwise, the
- destination is copied to the accumulator. The instruction sets flags
- according to the result of the comparison.
-
-
-
- CWD
- Convert Word to Double
-
- Converts the signed word in AX to a signed doubleword in the DX:AX register
- pair by extending the sign bit of AX into all bits of DX.
-
-
-
- CWDE
- Convert Word to Extended Double
- 80386/486 Only
-
- Converts a signed word in AX to a signed doubleword in EAX by extending the
- sign bit of AX into all bits of EAX.
-
-
-
- DAA
- Decimal Adjust after Addition
-
- Adjusts the result of an addition to a packed BCD number (less than 100
- decimal). The previous addition instruction should place its 8-bit binary
- sum in AL. DAA converts this binary sum to packed BCD format with the least
- significant decimal digit in the lower four bits and the most significant
- digit in the upper four bits. If the sum is greater than 99h after
- adjustment, the carry and auxiliary carry flags are set. Otherwise, the
- carry and auxiliary carry flags are cleared.
-
-
-
- DAS
- Decimal Adjust after Subtraction
-
- Adjusts the result of a subtraction to a packed BCD number (less than 100
- decimal). The previous subtraction instruction should place its
- 8-bit binary result in AL. DAS converts this binary sum to packed BCD format
- with the least significant decimal digit in the lower four bits and the most
- significant digit in the upper four bits. If the sum is greater than 99h
- after adjustment, the carry and auxiliary carry flags are set. Otherwise,
- the carry and auxiliary carry flags are cleared.
-
-
-
- DEC
- Decrement
-
- Subtracts 1 from the destination operand. Because the operand is treated as
- an unsigned integer, the DEC instruction does not affect the carry flag. To
- detect any effects on the carry flag, use the SUB instruction.
-
-
-
- DIV
- Unsigned Divide
-
- Divides an implied destination operand by a specified source operand. Both
- operands are treated as unsigned numbers. If the source (divisor) is 16 bits
- wide, the implied destination (dividend) is the DX:AX register pair. The
- quotient goes into AX and the remainder into DX. If the source is 8 bits
- wide, the implied destination operand is AX. The quotient goes into AL and
- the remainder into AH. On the 80386/486, if the source is EAX, the quotient
- goes into EAX and the divisor into EDX.
-
-
-
- ENTER
- Make Stack Frame
- 80186-80486 Only
-
- Creates a stack frame for a procedure that receives parameters passed on the
- stack. When immed16 is 0, ENTER is equivalent to push bp, followed by mov
- bp,sp. The first operand of the ENTER instruction specifies the number of
- bytes to reserve for local variables. The second operand specifies the
- nesting level for the procedure. The nesting level should be 0 for languages
- that do not allow access to local variables of higher-level procedures (such
- as C, Basic, and FORTRAN). See the complementary instruction LEAVE for a
- method of exiting from a procedure.
-
-
-
- HLT@EH@%
- Halt
-
- Stops CPU execution until an interrupt restarts execution at the instruction
- following HLT. In protected mode, this instruction works only in privileged
- mode.
-
-
-
- IDIV
- Signed Divide
-
- Divides an implied destination operand by a specified source operand. Both
- operands are treated as signed numbers. If the source (divisor) is 16 bits
- wide, the implied destination (dividend) is the DX:AX register pair. The
- quotient goes into AX and the remainder into DX. If the source is 8 bits
- wide, the implied destination is AX. The quotient goes into AL and the
- remainder into AH. On the 80386/486, if the source is EAX, the quotient goes
- into EAX and the divisor into EDX.
-
-
-
- IMUL
- Signed Multiply
-
- Multiplies an implied destination operand by a specified source operand.
- Both operands are treated as signed numbers. If a single 16-bit operand is
- given, the implied destination is AX and the product goes into the DX:AX
- register pair. If a single 8-bit operand is given, the implied destination
- is AL and the product goes into AX. On the 80386/486, if the operand is EAX,
- the product goes into the EDX:EAX register pair. The carry and overflow
- flags are set if the product is sign-extended into DX for 16-bit operands,
- into AH for 8-bit operands, or into EDX for 32-bit operands.
-
- Two additional syntaxes are available on the 80186-80486 processors. In the
- two-operand form, a 16-bit register gives one of the factors and serves as
- the destination for the result; a source constant specifies the other
- factor. In the three-operand form, the first operand is a 16-bit register
- where the result will be stored, the second is a 16-bit register or memory
- operand containing one of the factors, and the third is a constant
- representing the other factor. With both variations, the overflow and carry
- flags are set if the result is too large to fit into the 16-bit destination
- register. Since the low 16 bits of the product are the same for both signed
- and unsigned multiplication, these syntaxes can be used for either signed or
- unsigned numbers. On the 80386/486, the operands can be either 16 or 32 bits
- wide.
-
- A fourth syntax is available on the 80386/486. Both the source and
- destination operands can be given specifically. The source can be any 16- or
- 32-bit memory operand or general-purpose register. The destination can be
- any general-purpose register of the same size. The overflow and carry flags
- are set if the product does not fit in the destination.
-
-
-
- IN
- Input from Port
-
- Transfers a byte or word (or doubleword on the 80386/486) from a port to the
- accumulator register. The port address is specified by the source operand,
- which can be DX or an 8-bit constant. Constants can only be used for port
- numbers less than 255; use DX for higher port numbers. In protected mode, a
- general-protection fault occurs if IN is used when the current privilege
- level is greater than the value of the IOPL flag.
-
-
-
- INC
- Increment
-
- Adds 1 to the destination operand. Because the operand is treated as an
- unsigned integer, the INC instruction does not affect the carry flag. If a
- signed carry requires detection, use the ADD instruction.
-
-
-
- INS/INSB/INSW/INSD
- Input from Port to String
- 80186-80486 Only
-
- Receives a string from a port. The string is considered the destination and
- must be pointed to by ES:DI (even if an operand is given). The input port is
- specified in DX. For each element received, DI is adjusted according to the
- size of the operand and the status of the direction flag. DI is increased if
- the direction flag has been cleared with CLD or decreased if the direction
- flag has been set with STD.
-
- If the INS form of the instruction is used, a destination operand must be
- provided to indicate the size of the data elements to be processed and DX
- must be specified as the source operand containing the port number. A
- segment override is not allowed. If INSB (bytes), INSW (words), or INSD
- (doublewords on the 80386/486 only) is used, the instruction determines the
- size of the data elements to be received.
-
- INS and its variations are normally used with the REP prefix. Before the
- repeated instruction is executed, CX should contain the number of elements
- to be received. In protected mode, a general-protection fault occurs if INS
- is used when the current privilege level is greater than the value of the
- IOPL flag.
-
-
-
- INT
- Interrupt
-
- Generates a software interrupt. An 8-bit constant operand (0 to 255)
- specifies the interrupt procedure to be called. The call is made by indexing
- the interrupt number into the Interrupt Descriptor Table (IDT) starting at
- segment 0, offset 0. In real mode, the IDT contains 4-byte pointers to
- interrupt procedures. In privileged mode, the IDT contains 8-byte pointers.
-
- When an interrupt is called in real mode, the flags, CS, and IP are pushed
- onto the stack (in that order) and the trap and interrupt flags are cleared.
- STI can be used to restore interrupts. See Intel documentation and the
- documentation for your operating system for details on using and defining
- interrupts in privileged mode. To return from an interrupt, use the IRET
- instruction.
-
-
-
- INTO
- Interrupt on Overflow
-
- Generates interrupt 4 if the overflow flag is set. The default DOS behavior
- for interrupt 4 is to return without taking any action. You must define an
- interrupt procedure for interrupt 4 in order for INTO to have any effect.
-
-
-
- INVD
- Invalidate Data Cache
- 80486 Only
-
- Empties contents of the current data cache without writing changes to
- memory. Proper use of this instruction requires knowledge of how contents
- are placed in the cache. INVD is intended primarily for systems programming.
- See Intel documentation for details.
-
-
-
- INVLPG
- Invalidate TLB Entry
- 80486 Only
-
- Invalidates an entry in the Translation Lookaside Buffer (TLB), used by the
- demand-paging mechanism for OS/2 and other virtual-memory systems. The
- instruction takes a single memory operand and calculates the effective
- address of the operand, including the segment address. If the resulting
- address is mapped by any entry in the TLB, this entry is removed. Proper use
- of INVLPG requires understanding the hardware-supported demand-paging
- mechanism. INVLPG is intended primarily for systems programming. See Intel
- documentation for details.
-
-
-
- IRET/IRETD
- Interrupt Return
-
- Returns control from an interrupt procedure to the interrupted code. In real
- mode, the IRET instruction pops IP, CS, and the flags (in that order) and
- resumes execution. See Intel documentation for details on IRET operation in
- privileged mode. On the 80386/486, the IRETD instruction should be used to
- pop a 32-bit instruction pointer when returning from an interrupt called
- from a 32-bit segment. The F suffix prevents epilogue code from being
- generated when ending a PROC block. Use it to terminate interrupt service
- procedures.
-
-
-
- Jcondition
- Jump Conditionally
-
- Transfers execution to the specified label if the flags condition is true.
- The condition is tested by checking the flags shown in the table on the
- following page. If the condition is false, no jump is taken and program
- execution continues at the next instruction. On the 8086-80286 processors,
- the label given as the operand must be short (between -128 and +127 bytes
- from the instruction following the jump).* The 80386/486 processors allow
- near jumps (-32,768 to +32,767 bytes). On the 80386/486, the assembler
- generates the shortest jump possible, unless the jump size is explicitly
- specified.
-
- When the 80386/486 processors are in FLAT memory model, short jumps range
- from -128 to +127 bytes and near jumps range from -2 to +2 gigabytes. There
- are no far jumps.
-
-
-
- JMP
- Jump Unconditionally
-
- Transfers program execution to the address specified by the destination
- operand. Jumps are near (between -32,768 and +32,767 bytes from the
- instruction following the jump), or short (between -128 and +127 bytes), or
- far (in a different code segment). Unless a distance is explicitly
- specified, the assembler selects the shortest possible jump. With near and
- short jumps, the operand specifies a new IP address. With far jumps, the
- operand specifies new IP and CS addresses.
-
- When the 80386/486 processors are in FLAT memory model, short jumps range
- from -128 to +127 bytes and near jumps range from -2 to +2 gigabytes.
-
-
-
- LAHF
- Load Flags into AH Register
-
- Transfers bits 0 to 7 of the flags register to AH. This includes the carry,
- parity, auxiliary carry, zero, and sign flags, but not the trap, interrupt,
- direction, or overflow flags.
-
-
-
- LAR
- Load Access Rights
- 80286-80486 Protected Only
-
- Loads the access rights of a selector into a specified register. The source
- operand must be a register or memory operand containing a selector. The
- destination operand must be a register that will receive the access rights
- if the selector is valid and visible at the current privilege level. The
- zero flag is set if the access rights are transferred, or cleared if they
- are not. See Intel documentation for details on selectors, access rights,
- and other privileged-mode concepts.
-
-
-
- LDS/LES/LFS/LGS/LSS
- Load Far Pointer
-
- Reads and stores the far pointer specified by the source memory operand. The
- instruction moves the pointer's segment value into DS, ES, FS, GS, or SS
- (depending on the instruction). Then it moves the pointer's offset value
- into the destination operand. The LDS and LES instructions are available on
- all processors. The LFS, LGS, and LSS instructions are available only on the
- 80386/486.
-
-
-
- LEA
- Load Effective Address
-
- Calculates the effective address (offset) of the source memory operand and
- stores the result in the destination register.
-
- If the source operand is a direct memory address, the assembler encodes the
- instruction in the more efficient MOV reg,immediate form (equivalent to
- MOV reg, OFFSET mem).
-
-
-
- LEAVE
- High Level Procedure Exit
- 80186-80486 Only
-
- Terminates the stack frame of a procedure. LEAVE reverses the action of a
- previous ENTER instruction by restoring SP and BP to the values they had
- before the procedure stack frame was initialized. LEAVE is equivalent to mov
- sp,bp, followed by pop bp.
-
-
-
- LES/LFS/LGS
- Load Far Pointer to Extra Segment
- See LDS.
-
-
-
- LGDT/LIDT/LLDT
- Load Descriptor Table
- 80286-80486 Privileged Only
-
- Loads a value from an operand into a descriptor table register. LGDT loads
- into the Global Descriptor Table, LIDT into the Interrupt Descriptor Table,
- and LLDT into the Local Descriptor Table. These instructions are available
- only in privileged mode. See Intel documentation for details on descriptor
- tables and other protected-mode concepts.
-
-
-
- LMSW
- Load Machine Status Word
- 80286-80486 Privileged Only
-
- Loads a value from a memory operand into the Machine Status Word (MSW). This
- instruction is available only in privileged mode. See Intel documentation
- for details on the MSW and other protected-mode concepts.
-
-
-
- LOCK
- Lock the Bus
-
- Locks out other processors during execution of the next instruction. This
- instruction is a prefix. It must precede an instruction that accesses a
- memory location that another processor might attempt to access at the same
- time. See Intel documentation for details on multiprocessor environments.
-
-
-
- LODS/LODSB/
- LODSW/LODSD
- Load String Operand
-
- Loads a string from memory into the accumulator register. The string to be
- loaded is the source and must be pointed to by DS:SI (even if an operand is
- given). For each source element loaded, SI is adjusted according to the size
- of the operands and the status of the direction flag. SI is increased if the
- direction flag has been cleared with CLD or decreased if the direction flag
- has been set with STD.
-
- If the LODS form of the instruction is used, an operand must be provided to
- indicate the size of the data elements to be processed. A segment override
- can be given. If LODSB (bytes), LODSW (words), or LODSD (doublewords on the
- 80386/486 only) is used, the instruction determines the size of the data
- elements to be processed and whether the element will be loaded to AL, AX,
- or EAX.
-
- LODS and its variations are not normally used with repeat prefixes, since
- there is no reason to repeatedly load memory values to a register.
-
-
-
- LOOP/LOOPW/LOOPD
- Loop
-
- Loops repeatedly to a specified label. LOOP decrements CX (without changing
- any flags) and, if the result is not 0, transfers execution to the address
- specified by the operand. On the 80386/486, LOOP uses the 16-bit CX in
- 16-bit mode and the 32-bit ECX in 32-bit mode. The default can be overridden
- with LOOPW (CX) or LOOPD (ECX). If CX is 0 after being decremented,
- execution continues at the next instruction. The operand must specify a
- short label (between -128 and +127 bytes from the instruction following the
- LOOP instruction).
-
-
-
- LOOPcondition
- LOOPconditionW
- LOOPcondition
- Loop Conditionally
-
- Loops repeatedly to a specified label if condition is met and if CX is not
- 0. On the 80386/486, these instructions use the 16-bit CX in
- 16-bit mode and the 32-bit ECX in 32-bit mode. This default can be
- overridden with the W (CX) or D (ECX) forms of the instruction. The
- instruction decrements CX (without changing any flags) and tests whether the
- zero flag was set by a previous instruction (such as CMP). With LOOPE and
- LOOPZ (they are synonyms), execution is transferred to the label if the zero
- flag is set and CX is not 0. With LOOPNE and LOOPNZ (they are synonyms),
- execution is transferred to the label if the zero flag is cleared and CX is
- not 0. Execution continues at the next instruction if the condition is not
- met. Before entering the loop, CX should be set to the maximum number of
- repetitions desired.
-
-
-
- LSL
- Load Segment Limit
- 80286-80486 Protected Only
-
- Loads the segment limit of a selector into a specified register. The source
- operand must be a register or memory operand containing a selector. The
- destination operand must be a register that will receive the segment limit
- if the selector is valid and visible at the current privilege level. The
- zero flag is set if the segment limit is transferred, or cleared if it is
- not. See Intel documentation for details on selectors, segment limits, and
- other protected-mode concepts.
-
-
-
- LSS
- Load Far Pointer to Stack Segment
-
- See LDS.
-
-
-
- LTR
- Load Task Register
- 80286-80486 Privileged Only
-
- Loads a value from the specified operand to the current task register. LTR
- is available only in privileged mode. See Intel documentation for details on
- task registers and other protected-mode concepts.
-
-
-
- MOV
- Move Data
-
- Moves the value in the source operand to the destination operand. If the
- destination operand is SS, interrupts are disabled until the next
- instruction is executed (except on early versions of the 8088 and 8086).
-
-
-
- MOV
- Move to/from Special Registers
- 80386/486 Only
-
- Moves a value from a special register to or from a 32-bit general-purpose
- register. The special registers include the control registers CR0, CR2, and
- CR3; the debug registers DR0, DR1, DR2, DR3, DR6, and DR7; and the test
- registers TR6 and TR7. On the 80486, the test registers TR4, TR5, and TR7
- are also available. See Intel documentation for details on special
- registers.
-
-
-
- MOVS/MOVSB/
- MOVSW/MOVSD
- Move String Data
-
- Moves a string from one area of memory to another. The source string must be
- pointed to by DS:SI, and the destination address must be pointed to by ES:DI
- (even if operands are given). For each element moved, DI and SI are adjusted
- according to the size of the operands and the status of the direction flag.
- They are increased if the direction flag has been cleared with CLD, or
- decreased if the direction flag has been set with STD.
-
- If the MOVS form of the instruction is used, operands must be provided to
- indicate the size of the data elements to be processed. A segment override
- can be given for the source operand (but not for the destination). If MOVSB
- (bytes), MOVSW (words), or MOVSD (doublewords on the 80386/486 only) is
- used, the instruction determines the size of the data elements to be
- processed.
-
- MOVS and its variations are normally used with the REP prefix.
-
-
-
- MOVSX
- Move with Sign-Extend
- 80386/486 Only
-
- Moves and sign-extends the value of the source operand to the destination
- register. MOVSX is used to copy a signed 8-bit or 16-bit source operand to a
- larger 16-bit or 32-bit destination register.
-
-
-
- MOVZX
- Move with Zero-Extend
- 80386/486 Only
-
- Moves and zero-extends the value of the source operand to the destination
- register. MOVZX is used to copy an unsigned 8-bit or
- 16-bit source operand to a larger 16-bit or 32-bit destination register.
-
-
-
- MUL
- Unsigned Multiply
-
- Multiplies an implied destination operand by a specified source operand.
- Both operands are treated as unsigned numbers. If a single
- 16-bit operand is given, the implied destination is AX and the product goes
- into the DX:AX register pair. If a single 8-bit operand is given, the
- implied destination is AL and the product goes into AX. On the 80386/486, if
- the operand is EAX, the product goes into the EDX:EAX register pair. The
- carry and overflow flags are set if DX is not 0 for 16-bit operands or if AH
- is not 0 for 8-bit operands.
-
-
-
- NEG
- Two's Complement Negation
-
- Replaces the operand with its two's complement. NEG does this by subtracting
- the operand from 0. If the operand is 0, the carry flag is cleared.
- Otherwise, the carry flag is set. If the operand contains the maximum
- possible negative value (-128 for 8-bit operands or -32,768 for 16-bit
- operands), the value does not change, but the overflow and carry flags are
- set.
-
-
-
- NOP
- No Operation
-
- Performs no operation. NOP can be used for timing delays or alignment.
-
-
-
- NOT
- One's Complement Negation
-
- Toggles each bit of the operand by clearing set bits and setting cleared
- bits.
-
-
-
- OR
- Inclusive OR
-
- Performs a bitwise OR operation on the source and destination operands and
- stores the result to the destination operand. For each
- bit position in the operands, if either or both bits are set, the
- corresponding bit of the result it set. Otherwise, the corresponding
- bit of the result is cleared.
-
-
-
- OUT
- Output to Port
-
- Transfers a byte or word (or a doubleword on the 80386/486) to a port from
- the accumulator register. The port address is specified by the destination
- operand, which can be DX or an 8-bit constant. In protected mode, a
- general-protection fault occurs if OUT is used when the current privilege
- level is greater than the value of the IOPL flag.
-
-
-
- OUTS/OUTSB/
- OUTSW/OUTSD
- Output String to Port
- 80186-80486 Only
-
- Sends a string to a port. The string is considered the source and must be
- pointed to by DS:SI (even if an operand is given). The output port is
- specified in DX. For each element sent, SI is adjusted according to the size
- of the operand and the status of the direction flag. SI is increased if the
- direction flag has been cleared with CLD or decreased if the direction flag
- has been set with STD.
-
- If the OUTS form of the instruction is used, an operand must be provided to
- indicate the size of data elements to be sent. A segment override can be
- given. If OUTSB (bytes), OUTSW (words), or OUTSD (doublewords on the
- 80386/486 only) is used, the instruction determines the size of the data
- elements to be sent.
-
- OUTS and its variations are normally used with the REP prefix. Before the
- instruction is executed, CX should contain the number of elements to send.
- In protected mode, a general-protection fault occurs if OUTS is used when
- the current privilege level is greater than the value of the IOPL flag.
-
-
-
- POP
- Pop
-
- Pops the top of the stack into the destination operand. The value at SS:SP
- is copied to the destination operand and SP is increased by 2. The
- destination operand can be a memory location, a general-purpose 16-bit
- register, or any segment register except CS. Use RET to pop CS. On the
- 80386/486, 32-bit values can be popped by giving a 32-bit operand. ESP is
- increased by 4 for 32-bit pops.
-
-
-
- POPA/POPAD
- Pop All
- 80186-80486 Only
-
- Pops the top 16 bytes on the stack into the 8 general-purpose registers. The
- registers are popped in the following order: DI, SI, BP, SP, BX, DX, CX, AX.
- The value for the SP register is actually discarded rather than copied to
- SP. POPA always pops into 16-bit registers. On the 80386/486, use POPAD to
- pop into 32-bit registers.
-
-
-
- POPF/POPFD
- Pop Flags
-
- Pops the value on the top of the stack into the flags register. POPF always
- pops into the 16-bit flags register. On the 80386/486, use POPFD to pop into
- the 32-bit flags register.
-
-
-
- PUSH/PUSHW/PUSHD
- Push
-
- Pushes the source operand onto the stack. SP is decreased by 2 and the
- source value is copied to SS:SP. The operand can be a memory location, a
- general-purpose 16-bit register, or a segment register. On the 80186-80486
- processors, the operand can also be a constant. On the 80386/486, 32-bit
- values can be pushed by specifying a 32-bit operand. ESP is decreased by 4
- for 32-bit pushes. On the 8088 and 8086, PUSH SP saves the value of SP after
- the push. On the 80186-80486 processors, PUSH SP saves the value of SP
- before the push. The PUSHW and PUSHD instructions push a word (2 bytes) and
- a doubleword (4 bytes), respectively.
-
-
-
- PUSHA/PUSHAD
- Push All
- 80186-80486 Only
-
- Pushes the eight general-purpose registers onto the stack. The registers are
- pushed in the following order: AX, CX, DX, BX, SP, BP, SI, DI. The value
- pushed for SP is the value before the instruction. PUSHA always pushes
- 16-bit registers. On the 80386/486, use PUSHAD to push 32-bit registers.
-
-
-
- PUSHF/PUSHFD
- Push Flags
-
- Pushes the flags register onto the stack. PUSHF always pushes the 16-bit
- flags register. On the 80386/486, use PUSHFD to push the 32-bit flags
- register.
-
-
-
- RCL/RCR/ROL/ROR
- Rotate
-
- Rotates the bits in the destination operand the number of times specified in
- the source operand. RCL and ROL rotate the bits left; RCR and ROR rotate
- right.
-
- ROL and ROR rotate the number of bits in the operand. For each rotation, the
- leftmost or rightmost bit is copied to the carry flag as well as rotated.
- RCL and RCR rotate through the carry flag. The carry flag becomes an
- extension of the operand so that a 9-bit rotation is done for 8-bit
- operands, or a 17-bit rotation for 16-bit operands.
-
- On the 8088 and 8086, the source operand can be either CL or 1. On the
- 80186-80486, the source operand can be CL or an 8-bit constant. On the
- 80186-80486, rotate counts larger than 31 are masked off, but on the 8088
- and 8086, larger rotate counts are performed despite the inefficiency
- involved. The overflow flag is only modified by single-bit variations of the
- instruction; for multiple-bit variations, it is undefined.
-
-
-
- REP
- Repeat String
-
- Repeats a string instruction the number of times indicated by CX. First, CX
- is compared to zero; if it equals zero, execution proceeds to the next
- instruction. Otherwise, CX is decremented, the string instruction is
- performed, and the loop continues with CX being compared to zero. REP is
- used with MOVS and STOS. REP can also be used with INS and OUTS on the
- 80186-80486 processors. On all processors except the 80386/486, combining a
- repeat prefix with a segment override can cause errors if an interrupt
- occurs.
-
-
-
- REPcondition
- Repeat String Conditionally
-
- Repeats a string instruction as long as condition is true and the maximum
- count has not been reached. REPE and REPZ (they are synonyms) repeat while
- the zero flag is set. REPNE and REPNZ (they are synonyms) repeat while the
- zero flag is cleared. The conditional-repeat prefixes should only be used
- with SCAS and CMPS, since these are the only string instructions that modify
- the zero flag. Before executing the instruction, CX should be set to the
- maximum allowable number of repetitions. First, CX is compared to zero; if
- it equals zero, execution proceeds to the next instruction. Otherwise, CX is
- decremented, the string instruction is performed, and the loop continues
- with CX being compared to zero. On all processors except the 80386/486,
- combining a repeat prefix with a segment override may cause errors if an
- interrupt occurs during a string operation.
-
-
-
- RET/RETN/RETF
- Return from Procedure
-
- Returns from a procedure by transferring control to an address popped from
- the top of the stack. A constant operand can be given indicating the number
- of additional bytes to release. The constant is normally used to adjust the
- stack for arguments pushed before the procedure was called. The size of a
- return (near or far) is the size of the procedure in which the RET is
- defined with the PROC directive. RETN can be used to specify a near return;
- RETF can specify a far return. A near return pops a word into IP. A far
- return pops a word into IP and then pops a word into CS. After the return,
- the number of bytes given in the operand (if any) is added to SP.
-
-
-
- ROL/ROR
- Rotate
-
- See RCL/RCR.
-
-
-
- SAHF
- Store AH into Flags
-
- Transfers AH into bits 0 to 7 of the flags register. This includes the
- carry, parity, auxiliary carry, zero, and sign flags, but not the trap,
- interrupt, direction, or overflow flags.
-
-
-
- SAL/SAR
- Shift
-
- See SHL/SHR/SAL/SAR.
-
-
-
- SBB
- Subtract with Borrow
-
- Adds the carry flag to the second operand, then subtracts that value from
- the first operand. This result is assigned to the first operand. SBB is used
- to subtract the least significant portions of numbers that must be processed
- in multiple registers.
-
-
-
- SCAS/SCASB/
- SCASW/SCASD
- Scan String Flags
-
- Scans a string to find a value specified in the accumulator register. The
- string to be scanned is considered the destination and must be pointed to by
- ES:DI (even if an operand is specified). For each element, the destination
- element is subtracted from the accumulator value and the flags are updated
- to reflect the result (although the result is not stored). DI is adjusted
- according to the size of the operands and the status of the direction flag.
- DI is increased if the direction flag has been cleared with CLD or decreased
- if the direction flag has been set with STD.
-
- If the SCAS form of the instruction is used, an operand must be provided to
- indicate the size of the data elements to be processed. No segment override
- is allowed. If SCASB (bytes), SCASW (words), or SCASD (doublewords on the
- 80386/486 only) is used, the instruction determines the size of the data
- elements to be processed and whether the element scanned for is in AL, AX,
- or EAX.
-
- SCAS and its variations are normally used with repeat prefixes. REPNE (or
- REPNZ) is used to find the first match of the accumulator value. REPE (or
- REPZ) is used to find the first nonmatch. Before the comparison, CX should
- contain the maximum number of elements to compare. After a REPNE SCAS, the
- zero flag will be cleared if no match was found. After a REPE SCAS, the zero
- flag will be set if no nonmatch was found. Otherwise, ES:DI will point to
- the element past the first match or nonmatch.
-
-
-
- SETcondition
- Set Conditionally
- 80386/486 Only
-
- Sets the byte specified in the operand to 1 if condition is true or to 0 if
- condition is false. The condition is tested by checking the flags shown in
- the table on the following page. The instruction is used to set Boolean
- flags conditionally.
-
-
-
- SGDT/SIDT/SLDT
- Store Descriptor Table
- 80286-80486 Only
-
- Stores a descriptor table register into a specified operand. SGDT stores the
- Global Descriptor Table; SIDT, the Interrupt Descriptor Table; and SLDT, the
- Local Descriptor Table. These instructions are generally useful only in
- privileged mode. See Intel documentation for details on descriptor tables
- and other protected-mode concepts.
-
-
- SHL/SHR/SAL/SAR
- Shift
-
- Shifts the bits in the destination operand the number of times specified by
- the source operand. SAL and SHL shift the bits left; SAR and SHR shift
- right.
-
- With SHL, SAL, and SHR, the bit shifted off the end of the operand is copied
- into the carry flag and the leftmost or rightmost bit opened by the shift is
- set to 0. With SAR, the bit shifted off the end of the operand is copied
- into the carry flag and the leftmost bit opened by
- the shift retains its previous value (thus preserving the sign of the
- operand). SAL and SHL are synonyms.
-
- On the 8088 and 8086, the source operand can be either CL or 1. On the
- 80186-80486 processors, the source operand can be CL or an 8-bit constant.
- On the 80186-80486 processors, shift counts larger than 31 are masked off,
- but on the 8088 and 8086, larger shift counts are performed despite the
- inefficiency involved. The overflow flag is only modified by single-bit
- variations of the instruction; for multiple-bit variations, it is undefined.
-
-
-
- SHLD/SHRD
- Double Precision Shift
- 80386/486 Only
-
- Shifts the bits of the second operand into the first operand. The number of
- bits shifted is specified by the third operand. SHLD shifts the first
- operand to the left by the number of positions specified in the count. The
- positions opened by the shift are filled by the most significant bits of the
- second operand. SHRD shifts the first operand to the right by the number of
- positions specified in the count. The positions opened by the shift are
- filled by the least significant bits of the second operand. The count
- operand can be either CL or an 8-bit constant. If a shift count larger than
- 31 is given, it is adjusted by using the remainder (modulus) of a division
- by 32.
-
-
-
- SMSW
- Store Machine Status Word
- 80286-80486 Only
-
- Stores the Machine Status Word (MSW) into a specified memory operand. SMSW
- is generally useful only in protected mode. See Intel documentation for
- details on the MSW and other protected-mode concepts.
-
-
-
- STC
- Set Carry Flag
-
- Sets the carry flag.
-
-
-
- STD
- Set Direction Flag
-
- Sets the direction flag. All subsequent string instructions will process
- down (from high addresses to low addresses).
-
-
-
- STI
- Set Interrupt Flag
-
- Sets the interrupt flag. When the interrupt flag is set, maskable interrupts
- are recognized. If interrupts were disabled by a previous CLI instruction,
- pending interrupts will not be executed immediately; they will be executed
- after the instruction following STI.
-
-
-
- STOS/STOSB/
- STOSW/STOSD
- Store String Data
-
- Stores the value in the accumulator in a string. The string to be filled is
- the destination and must be pointed to by ES:DI (even if an operand is
- given). For each source element loaded, DI is adjusted according to the size
- of the operands and the status of the direction flag. DI is increased if the
- direction flag has been cleared with CLD or decreased if the direction flag
- has been set with STD.
-
- If the STOS form of the instruction is used, an operand must be provided to
- indicate the size of the data elements to be processed. No segment override
- is allowed. If STOSB (bytes), STOSW (words), or STOSD (doublewords on the
- 80386/486 only) is used, the instruction determines the size of the data
- elements to be processed and whether the element comes from AL, AX, or EAX.
-
- STOS and its variations are often used with the REP prefix. Before the
- repeated instruction is executed, CX should contain the number of elements
- to store.
-
-
-
- STR
- Store Task Register
- 80286-80486 Only
-
- Stores the current task register to the specified operand. This instruction
- is generally useful only in privileged mode. See Intel documentation for
- details on task registers and other protected-mode concepts.
-
-
- SUB
- Subtract
-
- Subtracts the source operand from the destination operand and stores the
- result in the destination operand.
-
-
-
- TEST
- Logical Compare
-
- Tests specified bits of an operand and sets the flags for a subsequent
- conditional jump or set instruction. One of the operands contains the value
- to be tested. The other contains a bit mask indicating the bits to be
- tested. TEST works by doing a bitwise AND operation on the source and
- destination operands. The flags are modified according to the result, but
- the destination operand is not changed. This instruction is the same as the
- AND instruction, except the result is not stored.
-
-
-
- VERR/VERW
- Verify Read or Write
- 80286-80486 Protected Only
-
- Verifies that a specified segment selector is valid and can be read or
- written to at the current privilege level. VERR verifies that the selector
- is readable. VERW verifies that the selector can be written to. If the
- segment is verified, the zero flag is set. Otherwise, the zero flag is
- cleared.
-
-
-
- WAIT
- Wait
-
- Suspends processor execution until the processor receives a signal that a
- coprocessor has finished a simultaneous operation. It should be used to
- prevent a coprocessor instruction from modifying a memory location that is
- being modified simultaneously by a processor instruction. WAIT is the same
- as the coprocessor FWAIT instruction.
-
-
-
- WBINVD
- Write Back and Invalidate Data Cache
- 80486 Only
-
- Empties the contents of the current data cache but first writes changes to
- memory. Proper use of this instruction requires knowledge of how contents
- are placed in the cache. WBINVD is intended primarily for systems
- programming. See Intel documentation for details.
-
-
-
- XADD
- Exchange and Add
- 80486 Only
-
- Adds the source and destination operands and stores the sum in the
- destination; simultaneously, the original value of the destination is moved
- to the source. The instruction sets flags according to the result of the
- addition.
-
-
-
- XCHG
- Exchange
-
- Exchanges the values of the source and destination operands.
-
-
-
- XLAT/XLATB
- Translate
-
- Translates a value from one coding system to another by looking up the value
- to be translated in a table stored in memory. Before the instruction is
- executed, BX should point to a table in memory and AL should contain the
- unsigned position of the value to be translated from the table. After the
- instruction, AL contains the table value with the specified position. No
- operand is required, but one can be given in order to specify a segment
- override. DS is assumed unless a segment override is given. XLATB is a
- synonym for XLAT. Either version allows an operand, but neither requires
- one.
-
-
-
- XOR
- Exclusive OR
-
- Performs a bitwise exclusive OR operation on the source and destination
- operands and stores the result in the destination. For each bit position in
- the operands, if both bits are set or if both bits are cleared, the
- corresponding bit of the result is cleared. Otherwise, the corresponding bit
- of the result is set.
-
-
-
-
- Coprocessor
-
-
- Topical Cross-Reference for Coprocessor
-
-
- Load
- FLD/FILD/FBLD
- FXCH
- FLDCW
- FLDENV
- FRSTOR
-
-
- Store Data
- FST/FIST
- FSTP/FISTP/FBSTP
- FSTCW/FNSTCW
- FSTSW/FNSTSW
- FSAVE/FNSAVE
- FSTENV/FNSTENV
-
-
- Load Constant
- FLD1
- FLDL2E
- FLDL2T
- FLDLG2
- FLDLN2
- FLDPI
- FLDZ
-
-
- Arithmetic
- FADD/FIADD
- FADDP
- FSUB/FISUB
- FSUBP
- FSUBR/FISUBR
- FSUBRP
- FMUL/FIMUL
- FMULP
- FSCALE
- FDIV/FIDIV
- FDIVP
- FDIVR/FIDIVR
- FDIVRP
- FABS
- FCHS
- FRNDINT
- FSQRT
- FPREM
- FPREM1
- FXTRACT
-
-
- Transcendental
- FPTAN
- FPATAN
- FSIN
- FCOS
- FSINCOS
- F2XM1
- FYL2X
- FYL2P1
- FPREM
- FPREM1
-
-
- Compare
- FCOM/FICOM
- FCOMP/FICOMP
- FCOMPP
- FUCOM
- FUCOMP
- FUCOMPP
- FTST
- FXAM
- FSTSW/FNSTSW
-
-
- Processor Control
- FINIT/FNINIT
- FFREE
- FNOP
- FWAIT
- FDECSTP
- FINCSTP
- FCLEX/FNCLEX
- FSETPM
- FDISI/FNDISI*
- FENI/FNENI*
- FSAVE/FNSAVE
- FLDCW
- FRSTOR
- FSTCW/FNSTCW
- FSTSW/FNSTSW
- FSTENV/FNSTENV
-
-
-
- Interpreting Coprocessor Instructions
-
- This section provides an alphabetical reference to instructions of the 8087,
- 80287, and 80387 coprocessors. The format is the same as the processor
- instructions except that encodings are not provided. Differences are noted
- below.
- The 80486 has the coprocessor built in. This one chip executes all the
- instructions listed in the previous section and this section.
-
-
- Syntax
- Syntaxes in Column 1 use the following abbreviations for operand types:
-
- reg
- A coprocessor stack register
-
- memreal
- A direct or indirect memory operand storing a real number
-
- memint
- A direct or indirect memory operand storing a binary integer
-
- membcd
- A direct or indirect memory operand storing a BCD number
-
-
- Examples
- The position of the examples in Column 2 is not related to the clock speeds
- in Column 3.
-
-
- Clock Speeds
- Column 3 shows the clock speeds for each processor. Sometimes an instruction
- may have more than one possible clock speed. The following abbreviations are
- used to specify variations:
-
- EA
- Effective address. This applies only to the 8087. See the Processor Section,
- "Timings on the 8088 and 8086 Processors," for an explanation of effective
- address timings.
-
- s,l,t
- Short real, long real, and 10-byte temporary real.
-
- w,d,q
- Word, doubleword, and quadword binary integer.
-
- to,fr
- To or from stack top. On the 80387 and 80486, the to clocks represent
- timings when ST is the destination. The fr clocks represent timings when ST
- is the source.
-
-
-
- Instruction Size
- The instruction size is always two bytes for instructions that do not access
- memory. For instructions that do access memory, the size is four bytes on
- the 8087 and 80287. On the 80387 and 80486, the size for instructions that
- access memory is four bytes in 16-bit mode or six bytes in 32-bit mode.
- On the 8087, each instruction must be preceded by the WAIT (also called
- FWAIT) instruction, thereby increasing the instruction's size by one byte.
- The assembler inserts WAIT automatically by default, or with the .8087
- directive.
-
-
- Architecture
- The 8087, 80287, and 80387 coprocessors, along with the 80486, have several
- elements of architecture in common. All have a register stack made up of
- eight 80-bit data registers. These can contain floating-point numbers in the
- temporary real format. The coprocessors also have 14 bytes of control
- registers. Figure 2 shows the format of registers.
-
- The most important control registers are the control word and the status
- word. Figure 3 shows the format of these registers.
-
-
-
- Coprocessor Instructions
-
-
-
- F2XM1
- 2X-1
-
- Calculates Y = 2X - 1. X is taken from ST. The result, Y, is returned in ST.
- X must be in the range 0 X 0.5 on the 8087/287, or in the range -1.0 X
- +1.0 on the 80387/486.
-
-
-
- FABS
- Absolute Value
-
- Converts the element in ST to its absolute value.
-
-
-
- FADD/FADDP/FIADD
- Add
-
- Adds the source to the destination and returns the sum in the destination.
- If two register operands are specified, one must be ST. If a memory operand
- is specified, the sum replaces the value in ST. Memory operands can be 32-
- or 64-bit real numbers or 16- or 32-bit integers. If no operand is
- specified, ST is added to ST(1) and the stack is popped, returning the sum
- in ST. For FADDP, the source must be ST; the sum is returned in the
- destination and ST is popped.
-
-
-
- FBLD
- Load BCD
-
- See FLD.
-
-
-
- FBSTP
- Store BCD and Pop
-
- See FST.
-
-
-
- FCHS
- Change Sign
-
- Reverses the sign of the value in ST.
-
-
-
- FCLEX/FNCLEX
- Clear Exceptions
-
- Clears all exception flags, the busy flag, and bit 7 in the status word. Bit
- 7 is the interrupt-request flag on the 8087 and the error-status flag on the
- 80287, 80387, and 80486. The instruction has wait and no-wait versions.
-
-
-
- FCOM/FCOMP/FCOMPP/
- FICOM/FICOMPCompare
-
- Compares the specified source operand to ST and sets the condition codes of
- the status word according to the result. The instruction subtracts the
- source operand from ST without changing either operand. Memory operands can
- be 32- or 64-bit real numbers or 16- or 32-bit integers. If no operand is
- specified or if two pops are specified, ST is compared to ST(1) and the
- stack is popped. If one pop is specified with an operand, the operand is
- compared to ST. If one of the operands is a NAN, an invalid-operation
- exception occurs (see FUCOM for an alternative method of comparing on the
- 80387/486).
-
-
-
- FCOS
- Cosine
-
- 80387/486 Only
- Replaces a value in radians in ST with its cosine. If |ST| < 263, the C2 bit
- of the status word is cleared and the cosine is calculated. Otherwise, C2 is
- set and no calculation is performed. ST can be reduced to the required range
- with FPREM or FPREM1.
- * For operands with an absolute value greater than /4, up to 76 additional
- clocks may be required.
- For operands with an absolute value greater than /4, add n clocks where n
- = operand/(/4).
-
-
-
- FDECSTP
- Decrement Stack Pointer
-
- Decrements the stack-top pointer in the status word. No tags or registers
- are changed, and no data is transferred. If the stack pointer is 0, FDECSTP
- changes it to 7.
-
-
-
- FDISI/FNDISI
- Disable Interrupts
- 8087 Only
-
- Disables interrupts by setting the interrupt-enable mask in the control
- word. This instruction has wait and no-wait versions. Since the 80287,
- 80387, and 80486 do not have an interrupt-enable mask, the instruction is
- recognized but ignored on these coprocessors.
-
-
-
- FDIV/FDIVP/FIDIV
- Divide
-
- Divides the destination by the source and returns the quotient in the
- destination. If two register operands are specified, one must be ST. If a
- memory operand is specified, the quotient replaces the value in ST. Memory
- operands can be 32- or 64-bit real numbers or 16- or 32-bit
- integers. If no operand is specified, ST(1) is divided by ST and the stack
- is popped, returning the result in ST. For FDIVP, the source must be ST; the
- quotient is returned in the destination register and ST is popped.
-
-
-
- FDIVR/FDIVRP/FIDIVR
- Divide Reversed
-
- Divides the source by the destination and returns the quotient in the
- destination. If two register operands are specified, one must be ST. If a
- memory operand is specified, the quotient replaces the value in ST. Memory
- operands can be 32- or 64-bit real numbers or 16- or 32-bit
- integers. If no operand is specified, ST is divided by ST(1) and the stack
- is popped, returning the result in ST. For FDIVRP, the source must be ST;
- the quotient is returned in the destination register and ST is popped.
-
-
-
- FENI/FNENI
- Enable Interrupts
- 8087 Only
-
- Enables interrupts by clearing the interrupt-enable mask in the control
- word. This instruction has wait and no-wait versions. Since the 80287,
- 80387, and 80486 do not have an interrupt-enable mask, the instruction is
- recognized but ignored on these coprocessors.
-
-
-
- FFREE
- Free Register
-
- Changes the specified register's tag to empty without changing the contents
- of the register.
-
-
-
- FIADD/FISUB/FISUBR/
- FIMUL/FIDIV/FIDIVR
- Integer Arithmetic
-
- See FADD, FSUB, FSUBR, FMUL, FDIV, and FDIVR.
-
-
-
- FICOM/FICOMP
- Compare Integer
-
- See FCOM.
-
-
-
- FILD
- Load Integer
-
- See FLD.
-
-
-
- FINCSTP
- Increment Stack Pointer
-
- Increments the stack-top pointer in the status word. No tags or registers
- are changed, and no data is transferred. If the stack pointer is 7, FINCSTP
- changes it to 0.
-
-
-
- FINIT/FNINIT
- Initialize Coprocessor
-
- Initializes the coprocessor and resets all the registers and flags to their
- default values. The instruction has wait and no-wait versions. On the
- 80387/486, the condition codes of the status word are cleared. On the
- 8087/287, they are unchanged.
-
-
-
- FIST/FISTP
- Store Integer
-
- See FST.
-
-
-
- FLD/FILD/FBLD
- Load
-
- Pushes the specified operand onto the stack. All memory operands are
- automatically converted to temporary-real numbers before being loaded.
- Memory operands can be 32-, 64-, or 80-bit real numbers or 16-, 32-, or
- 64-bit integers.
-
-
-
- FLD1/FLDZ/FLDPI/FLDL2E/
- FLDL2T/FLDLG2/FLDLN2
- Load Constant
-
- Pushes a constant onto the stack.
-
-
- FLDCW
- Load Control Word
-
- Loads the specified word into the coprocessor control word. The format of
- the control word is shown in the "Interpreting Coprocessor Instructions"
- section.
-
-
-
- FLDENV/FLDENVW/FLDENVD
- Load Environment State
-
- Loads the 14-byte coprocessor environment state from a specified memory
- location. The environment includes the control word, status word, tag word,
- instruction pointer, and operand pointer. On the 80387/486 in 32-bit mode,
- the environment state is 28 bytes.
-
-
-
- FMUL/FMULP/FIMUL
- Multiply
-
- Multiplies the source by the destination and returns the product in the
- destination. If two register operands are specified, one must be ST. If a
- memory operand is specified, the product replaces the value in ST. Memory
- operands can be 32- or 64-bit real numbers or 16- or 32-bit integers. If no
- operand is specified, ST(1) is multiplied by ST and the stack is popped,
- returning the product in ST. For FMULP, the source must be ST; the product
- is returned in the destination register and ST is popped.
-
-
-
- FNinstruction
- No-Wait Instructions
-
- Instructions that have no-wait versions include FCLEX, FDISI, FENI, FINIT,
- FSAVE, FSTCW, FSTENV, and FSTSW. Wait versions of instructions check for
- unmasked numeric errors; no-wait versions do not. When the .8087 directive
- is used, the assembler puts a WAIT instruction before the wait versions and
- a NOP instruction before the no-wait versions.
-
-
-
-
- FNOP
- No Operation
-
- Performs no operation. FNOP can be used for timing delays or alignment.
-
-
-
- FPATAN
- Partial Arctangent
-
- Finds the partial tangent by calculating Z = ARCTAN(Y / X). X is taken from
- ST and Y from ST(1). On the 8087/287, Y and X must be in the range 0 Y < X
- < . On the 80387/486, there is no restriction on X and Y. X is popped from
- the stack and Z replaces Y in ST.
-
-
-
- FPREM
- Partial Remainder
-
- Calculates the remainder of ST divided by ST(1), returning the result in ST.
- The remainder retains the same sign as the original dividend. The
- calculation uses the following formula:
-
- Condition Codes for FPREM and FPREM1
-
- C3 C2 C1 C0 Meaning
- ? 1 ? ? Incomplete reduction
- 0 0 0 0 quotient MOD 8 = 0
- 0 0 0 1 quotient MOD 8 = 4
- 0 0 1 0 quotient MOD 8 = 1
- 0 0 1 1 quotient MOD 8 = 5
- 1 0 0 0 quotient MOD 8 = 2
- 1 0 0 1 quotient MOD 8 = 6
- 1 0 1 0 quotient MOD 8 = 3
- 1 0 1 1 quotient MOD 8 = 7
-
-
-
- FPREM1
- Partial Remainder (IEEE Compatible)
- 80387/486 Only
-
- Calculates the remainder of ST divided by ST(1), returning the result in ST.
- The remainder retains the same sign as the original dividend.
-
-
-
- FPTAN
- Partial Tangent
-
- Finds the partial tangent by calculating Y / X = TAN(Z). Z is taken from ST.
- Z must be in the range 0 Z / 4 on the 8087/287. On the 80387/486, |Z|
- must be less than 263. The result is the ratio Y / X. Y replaces Z, and X is
- pushed into ST. Thus, Y is returned in ST(1) and X in ST.
-
-
-
- FRNDINT
- Round to Integer
-
- Rounds ST from a real number to an integer. The rounding control (RC) field
- of the control word specifies the rounding method, as shown in the
- introduction to this section.
-
-
-
- FRSTOR/FRSTORW/FRSTORD
- Restore Saved State
-
- Restores the 94-byte coprocessor state to the coprocessor from the specified
- memory location. In 32-bit mode on the 80387/486, the environment state
- takes 108 bytes.
-
-
-
- FSAVE/FSAVEW/FSAVED
- FNSAVE/FNSAVEW/FNSAVED
- Save Coprocessor State
-
- Stores the 94-byte coprocessor state to the specified memory location. In
- 32-bit mode on the 80387/486, the environment state takes 108 bytes. This
- instruction has wait and no-wait versions. After the save, the coprocessor
- is initialized as if FINIT had been executed.
-
-
-
- FSCALE
- Scale
-
- Scales by powers of 2 by calculating the function Y = Y * 2X. X is the
- scaling factor taken from ST(1), and Y is the value to be scaled from ST.
- The scaled result replaces the value in ST. The scaling factor remains in
- ST(1). If the scaling factor is not an integer, it will be truncated toward
- zero before the scaling.
-
-
-
- FSETPM
- Set Protected Mode
- 80287 Only
-
- Sets the 80287 to protected mode. The instruction and operand pointers are
- in the protected-mode format after this instruction. On the 80387/486,
- FSETPM is recognized but interpreted as FNOP, since the 80386/486 processors
- handle addressing identically in real and protected mode.
-
-
-
- FSIN
- Sine
- 80387/486 Only
-
- Replaces a value in radians in ST with its sine. If |ST| < 263, the C2 bit
- of the status word is cleared and the sine is calculated. Otherwise, C2 is
- set and no calculation is performed. ST can be reduced to the required range
- with FPREM or FPREM1.
-
-
-
- FSINCOS
- Sine and Cosine
- 80387/486 Only
-
- Computes the sine and cosine of a radian value in ST. The sine replaces the
- value in ST, and then the cosine is pushed onto the stack. If |ST| < 263,
- the C2 bit of the status word is cleared and the sine and cosine are
- calculated. Otherwise, C2 is set and no calculation is performed. ST can be
- reduced to the required range with FPREM or FPREM1.
-
-
-
- FSQRT
- Square Root
-
- Replaces the value of ST with its square root. (The square root of -0
- is -0.)
-
-
-
- FST/FSTP/FIST/FISTP/FBSTP
- Store
-
- Stores the value in ST to the specified memory location or register.
- Temporary-real values in registers are converted to the appropriate integer,
- BCD, or floating-point format as they are stored. With FSTP, FISTP, and
- FBSTP, the ST register value is popped off the stack. Memory operands can be
- 32-, 64-, or 80-bit real numbers for FSTP or 16-, 32-, or 64-bit integers
- for FISTP.
-
-
-
- FSTCW/FNSTCW
- Store Control Word
-
- Stores the control word to a specified 16-bit memory operand. This
- instruction has wait and no-wait versions.
-
-
-
- FSTENV/FSTENVW/FSTENVD
- FNSTENV/FNSTENVW/FNSTENVD
- Store Environment State
-
- Stores the 14-byte coprocessor environment state to a specified memory
- location. The environment state includes the control word, status word, tag
- word, instruction pointer, and operand pointer. On the 80387/486 in 32-bit
- mode, the environment state is 28 bytes.
-
-
-
- FSTSW/FNSTSW
- Store Status Word
-
- Stores the status word to a specified 16-bit memory operand. On the 80287,
- 80387, and 80486, the status word can also be stored to the processor's AX
- register. This instruction has wait and no-wait versions.
-
-
-
- FSUB/FSUBP/FISUB
- Subtract
-
- Subtracts the source operand from the destination operand and returns the
- difference in the destination operand. If two register operands are
- specified, one must be ST. If a memory operand is specified, the result
- replaces the value in ST. Memory operands can be 32- or 64-bit real numbers
- or 16- or 32-bit integers. If no operand is specified, ST is subtracted from
- ST(1) and the stack is popped, returning the difference in ST. For FSUBP,
- the source must be ST; the difference (destination minus source) is returned
- in the destination register and ST is popped.
-
-
-
- FSUBR/FSUBRP/FISUBR
- Subtract Reversed
-
- Subtracts the destination operand from the source operand and returns the
- result in the destination operand. If two register operands are specified,
- one must be ST. If a memory operand is specified, the result replaces the
- value in ST. Memory operands can be 32- or 64-bit real numbers or 16- or
- 32-bit integers. If no operand is specified, ST(1) is subtracted from ST and
- the stack is popped, returning the difference in ST. For FSUBRP, the source
- must be ST; the difference (source minus destination) is returned in the
- destination register and ST is popped.
-
-
-
- FTST
- Test for Zero
-
- Compares ST with +0.0 and sets the condition of the status word according to
- the result.
-
- Condition Codes for FTST
-
- C3 C2 C1 C0 Meaning
- 0 0 ? 0 ST is positive
- 0 0 ? 1 ST is negative
- 1 0 ? 0 ST is 0
- 1 1 ? 1 ST is not comparable (NAN or projective
- infinity)
-
-
-
- FUCOM/FUCOMP/FUCOMPP
- Unordered Compare
- 80387/486 Only
-
- Compares the specified source to ST and sets the condition codes of the
- status word according to the result. The instruction subtracts the source
- operand from ST without changing either operand. Memory operands are not
- allowed. If no operand is specified or if two pops are specified, ST is
- compared to ST(1). If one pop is specified with an operand, the given
- register is compared to ST.
-
- Condition Codes for FUCOM
-
- C3 C2 C1 C0 Meaning
- 0 0 ? 0 ST > source
- 0 0 ? 1 ST < source
- 1 0 ? 0 ST = source
- 1 1 ? 1 Unordered
-
-
-
- FWAIT
- Wait
-
- Suspends execution of the processor until the coprocessor is finished
- executing. This is an alternate mnemonic for the processor WAIT instruction.
-
-
-
- FXAM
- Examine
-
- Reports the contents of ST in the condition flags of the status word.
-
- Condition Codes for FXAM
-
- C3 C2 C1 C0 Meaning
- 0 0 0 0 + Unnormal*
- 0 0 0 1 + NAN
- 0 0 1 0 - Unnormal*
- 0 0 1 1 - NAN
- 0 1 0 0 + Normal
- 0 1 0 1 + Infinity
- 0 1 1 0 - Normal
- 0 1 1 1 - Infinity
- 1 0 0 0 + 0
- 1 0 0 1 Empty
- 1 0 1 0 - 0
- 1 0 1 1 Empty
- 1 1 0 0 + Denormal
- 1 1 0 1 Empty*
- 1 1 1 0 - Denormal
- 1 1 1 1 Empty*
-
-
- * Not used on the 80387/486. Unnormals are not supported by the 80387/486.
- Also, the 80387/486 use two codes instead of four to identify empty
- registers.
-
-
-
- FXCH
- Exchange Registers
-
- Exchanges the specified (destination) register and ST. If no operand is
- specified, ST and ST(1) are exchanged.
-
-
-
- FXTRACT
- Extract Exponent and Significand
-
- Extracts the exponent and significand (mantissa) fields of ST. The exponent
- replaces the value in ST, and then the significand is pushed onto the stack.
-
-
-
- FYL2X
- Y log2(X)
-
- Calculates Z = Y log2(X). X is taken from ST and Y from ST(1). The stack is
- popped, and the result, Z, replaces Y in ST. X must be in the range 0 < X <
- and Y in the range - < Y < .
-
-
-
- FYL2XP1
- Y log2(X+1)
-
- Calculates Z = Y log2(X + 1). X is taken from ST and Y from ST(1). The stack
- is popped once, and the result, Z, replaces Y in ST. X must be in the range
- 0 |X| < (1 - (2 / 2)). Y must be in the range
- - < Y < .
-
-