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

Last reviewed: September 11, 1997
Article ID: Q67760
5.10 5.10a | 5.10 5.10a
MS-DOS     | OS/2
kbtool kbfixlist kbbuglist

The information in this article applies to:

  • Microsoft Macro Assembler for MS-DOS, versions 5.1 and 5.1a
  • Microsoft Macro Assembler for OS/2, versions 5.1 and 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 reference words: 5.10 5.10a 6.00 buglist5.10 buglist5.10a
fixlist6.00
KBCategory: kbtool kbfixlist kbbuglist
KBSubCategory: MLIss
Solution Type : kbfix


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: September 11, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.