KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q40872: Some Coprocessor Assembler Instructions Are Not Emulated

Article: Q40872
Product(s): See article
Version(s): 6.00 6.00b 7.00 | 6.00 6.00b 7.00
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | B_QuickBas S_C H_Fortran H_MASM SR# S890111-171 | mspl13_basic
Last Modified: 1-FEB-1990

Microsoft Macro Assembler Version 5.10 does not come with routines to
emulate a math coprocessor.

Page 382 of the "Microsoft Macro Assembler 5.1: Programmer's Guide"
states that to emulate math-coprocessor instructions, you must link
with a Microsoft high-level language that supports floating-point
emulation of the coprocessor. You would write the assembler procedure
using coprocessor instructions, then assemble with the /E option, and
finally link it with the high-level language modules.

However, only a subset of coprocessor instructions are emulated by the
Microsoft high-level languages.

If you link your Microsoft higher-level language to an assembler
routine that invokes an instruction that is NOT emulated by the
higher-level language, then the program gives a run-time error (or
possibly hangs, or gives incorrect results) when run on a machine that
has no coprocessor.

This information applies to the following products:

1.  Microsoft BASIC Compiler Versions 6.00 and 6.00b

2.  Microsoft BASIC Professional Development System (PDS) Version 7.00

3.  Microsoft QuickBASIC Version 4.50

4.  Microsoft C Compiler Version 5.10

5.  Microsoft FORTRAN Compiler Version 4.10

Below is a list of the coprocessor (8087 or 80287) instructions that
are not emulated by Microsoft high-level languages:

   FBLD    - packed decimal load
   FBSTP   - packed decimal store and pop
   FCOS    - cosine function
   FDECSTP - decrement stack pointer
   FINCSTP - increment stack pointer
   FINIT   - initialize processor
   FLDENV  - load environment
   FNOP    - No operation
   FPREM1  - partial remainder
   FRSTOR  - restore saved state
   FSAVE   - save state
   FSETPM  - set protected mode
   FSIN    - only sine function
   FSINCOS - sine and cosine function
   FSTENV  - store environment
   FUCOM   - unordered comparison
   FUCOMP  - unordered comparison and pop
   FUCOMPP - unordered comparison and double pop
   FXTRACT - extract exponent and significant

Also, some of the No-Wait forms of instructions are not emulated, such
as FNSTENV and FNINIT.

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.