Wrong Opcode For Far Call from USE16 Seg to USE32 Seg

ID Number: Q32811

5.10 | 5.10

MS-DOS | OS/2

buglist5.10 fixlist5.10a

Summary:

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