Q32811: FIX: Wrong Opcode For Far Call from USE16 Seg to USE32 Seg

Article: Q32811
Product(s): Microsoft Macro Assembler
Version(s): 5.1
Operating System(s): 
Keyword(s): 
Last Modified: 04-MAY-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Macro Assembler (MASM), version 5.1 
-------------------------------------------------------------------------------

SYMPTOMS
========

MASM will generate both an address-size and operand-size override for a far call
from a USE16 segment to a USE32 segment. Only the operand-size override is
necessary.

STATUS
======

Microsoft has confirmed this to be a problem in Version 5.10. This problem was
corrected in MASM version 5.10a.

MORE INFORMATION
================

The address-size prefix is 67h and the operand-size prefix is 66h.

The following sample code demonstrates the problem:

Sample Code
-----------

  ;Assemble options needed: none

     .386

     s32 SEGMENT USE32
     assume cs:@CurSeg
        p   PROC
        p   ENDP
     s32    ENDS

     s16 segment USE16
     assume cs:@CurSeg
            CALL   far ptr p
     s16    ENDS

            END

  The opcode generated for the far call by MASM 5.1 is as follows

     67| 66| 9A 00000000

  The correct opcode (generated by MASM 5.10a) is as follows

         66| 9A 00000000

Additional query words: 5.10 buglist5.10 fixlist5.10a

======================================================================
Keywords          :  
Technology        : kbMASMsearch kbAudDeveloper kbMASM510
Version           : :5.1
Solution Type     : kbfix

=============================================================================