Microsoft KB Archive/74532

= FIX: Near Call Between Segments Within a Group May Fail =

Article ID: 74532

Article Last Modified on 10/30/2003

-

APPLIES TO


 * Microsoft Macro Assembler 6.0 Standard Edition

-



This article was previously published under Q74532



SYMPTOMS
The Microsoft Macro Assembler (MASM) version 6.0 may generate incorrect code when a near call is made to a procedure in another segment. When a call is made from an offset greater that 0FDh in the calling segment to a procedure declared in the same source file, the call is made to an incorrect offset.



RESOLUTION
To work around this problem, code the procedure in another module and declare it as external in the problem module.



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



MORE INFORMATION
The sample program below illustrates this problem. It defines two segments that are defined in the same group. Calls are being made from different offsets in the file. All calls after offset 0FDh are made to incorrect addresses rather than being set up as relocatable calls.

The following is incorrect code generated for the procedure called Generic: 00F8                          Generic proc    near 00F8 E8 0000 R                        call    Simple 00FB E8 0000 R                        call    Simple 00FE E8 11B2                          call    Simple 0101 E8 5200                          call    Simple 0104 E8 11B2                          call    Simple 0107 E8 11B2                          call    Simple 010A E8 0854                          call    Simple 010D                          Generic endp The correct code that should be generated would appear as follows: 00F8                          Generic proc    near 00F8 E8 0000 R                        call    Simple 00FB E8 0000 R                        call    Simple 00FE E8 0000 R                        call    Simple 0101 E8 0000 R                        call    Simple 0104 E8 0000 R                        call    Simple 0107 E8 0000 R                        call    Simple 010A E8 0000 R                        call    Simple 010D                          Generic endp

Sample Code
; Assemble options needed: none

CGroup group   Init, Code

ASSUME CS:CGroup

Code   segment para public 'CODE'

Simple proc    near ret Simple endp

Code   ends

Init   segment para public 'CODE' ORG    0F8h

Generic proc   near call   Simple call   Simple call   Simple call   Simple call   Simple call   Simple call   Simple Generic endp

Init   ends

END

Additional query words: 6.00 buglist6.00 fixlist6.00a

Keywords: kbfix KB74532

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.