FIX: Bad Object File Generated with MASM 5.1 and 5.1a

ID: Q67760


The information in this article applies to:
  • Microsoft Macro Assembler for MS-DOS, versions 5.1, 5.1a
  • Microsoft Macro Assembler for OS/2, versions 5.1, 5.1a


SYMPTOMS

The following mixed-language program does not assemble properly under the Microsoft Macro Assembler (MASM) version 5.1 and 5.1a.


CAUSE

The assembler does not generate the correct .OBJ record for the linker to resolve the reference properly. When the .EXE is built, the _test variable is located in the NULL segment instead of the _DATA segment; therefore, instead of the residing 1 byte apart, they are actually 42h bytes apart.


RESOLUTION

Removing the ASSUME statements from the assembly code eliminates the problem. These ASSUME statements are not necessary.


STATUS

Microsoft has confirmed this to be a problem in MASM versions 5.1 and 5.1a. This problem was corrected in MASM version 6.0.


MORE INFORMATION

Sample Code #1


; Assemble options needed: none

        .model small, c

        .data
       ASSUME ds: nothing
PUBLIC xxx
xxx    DB 1
       ASSUME ds: @data
PUBLIC yyy
yyy    DB 2

       .code
PUBLIC func
func   PROC
       MOV ax, OFFSET yyy
       SUB ax, OFFSET xxx
       RET
func   ENDP

       END 

Sample Code #2


/* Compile options needed: none
*/ 

#include <stdio.h>
extern char xxx;
extern char yyy;

void main ()
{
   printf( "C distance of yyy - xxx = %X\n", &yyy - &xxx );
   printf( "MASM distance of yyy - xxx = %X\n", func () );
} 

Additional query words: 5.10 5.10a 6.00 buglist5.10 buglist5.10a fixlist6.00

Keywords :
Version : :5.1,5.1a
Platform :
Issue type :


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