FIX: Bad Jump Calculated in Function Containing an _asm BlockLast reviewed: September 16, 1997Article ID: Q102162 |
7.00 | 1.00
MS-DOS | WINDOWS
kbtool kbfixlist kbbuglist
The information in this article applies to:
SYMPTOMSAn attempt to run an application fails. When the application runs in the Microsoft Windows operating system, a General Protection (GP) fault occurs. In the MS-DOS operating system, the application may hang or cause the system to crash.
CAUSEThe C++ optimizing compiler generates a bad jump target in the return of a function when the function includes an _asm block that contains floating-point instructions.
RESOLUTIONThere are two methods to work around this problem:
STATUSMicrosoft has confirmed this to be a bug in the products listed above. This problem was corrected in Visual C++ for Windows, version 1.5. This problem does not occur in Visual C++, 32-bit Edition, version 1.0.
MORE INFORMATIONThe following code example demonstrates this problem:
Sample Code
/* * Compiler options needed: /f- /AL to demonstrate problem * Optional additional options: /Od /Zi */ void tdt(double x){ _asm { fld x f2xm1 ; fptan also causes a bad jmp calculation fwait } // Bad JMP instruction } void main(){ double x1 = 0.4; tdt(x1);}
|
Additional reference words: 1.00 7.00 8.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |