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

ID: Q32811


The information in this article applies to:
  • Microsoft Macro Assembler for MS-DOS, version 5.1
  • Microsoft Macro Assembler for OS/2, 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 :
Version : :5.1
Platform :
Issue type :


Last Reviewed: January 4, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.