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.  |