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



The information in this article applies to:

  • Microsoft Macro Assembler (MASM) 5.1

This article was previously published under Q32811

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
				

Modification Type:MinorLast Reviewed:11/17/2003
Keywords:kbfix KB32811