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