FIX: Inline Assembly Instruction Removed With /O1Last reviewed: September 18, 1997Article ID: Q114078 |
1.00
WINDOWS
kbtool kbfixlist kbbuglist
The information in this article applies to:
SYMPTOMSAn inline assembly instruction is not executed when the /O1 compiler switch is use with the optimizing compiler.
RESOLUTIONTo workaround this problem either remove the /O1 optimization, use the fast compiler, or upgrade to Visual C++ for Windows, version 1.5, which provides version 8.0c of the C/C++ compiler. Use of the fast compiler can be forced by specifying the /f compiler switch.
STATUSMicrosoft has confirmed this to be a problem in the Microsoft products listed above. This problem was corrected in Visual C++ version 1.5.
Sample Code
/* Compile options needed: /c /f- /O1 /Fc* * The /Fc switch is not necessary to reproduce the problem. However, * it will generate a code listing file which can be used to see the * problem code generated by the compiler. */ void (far *fn_ptr)( void ); int TestFunc( void ){ unsigned hma_ass; unsigned char hma_err; unsigned handle; unsigned han_err; _asm { mov ah, 0x01 mov dx, 0xffff call [fn_ptr] mov hma_ass, ax mov hma_err, bl } _asm { mov ah, 0x09 /* This is removed with -O1 */ mov dx, 1 /* and so is this line */ call [fn_ptr] mov handle, dx mov han_err, ax } return( handle );}
|
Additional reference words: 1.00 8.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |