Forward Reference to Segment Name Gives Phase Error

ID Number: Q32762

5.00 5.10 5.10A

MS-DOS | OS/2

buglist5.00 buglist5.10 buglist5.10a

Summary:

SYMPTOMS

A forward reference to a segment name in the Microsoft Macro

Assembler (MASM) versions 5.0, 5.1, and 5.1a will incorrectly cause

the following error to occur

error A2006: phase error between passes

STATUS

Microsoft has confirmed this to be a problem in MASM version 5.10.

We are researching this problem and will post new information here

as it becomes available.

A workaround is to declare empty segments at the top of your MASM

source code, defining all segments in the order needed.

More Information:

The following source example demonstrates the problem. As a work

around, place the following code fragment at the top of the source

file.

CSEG segment para public 'CODE'

CSEG ends

SSEG segment stack 'STACK'

SSEG ends

Because the sseg segment is declared before the MOV instruction

references it, the phase error is eliminated. The cseg segment

is also declared to ensure that the ordering of the two segments

is unchanged.

Sample Code:

-----------

;Assemble options needed: none

cseg SEGMENT para public 'CODE'

assume cs:cseg

main PROC near

MOV bx, seg sseg ;will generate phase error

RET

main ENDP

cseg ENDS

sseg SEGMENT stack 'STACK'

db 100h dup(?)

sseg ENDS

END main