A2006: Phase Error Using EQU in An IFNDEF Block

ID Number: Q40452

5.10 | 5.10

MS-DOS | OS/2

buglist5.00 buglist5.10 buglist5.10a fixlist6.00

Summary:

SYMPTOMS

When using an equate in an ifndef block, the following error is

generated

A2006: phase error between passes

CAUSE

On pass 1 if the symbol is not defined, it gets defined. On pass 2

it is defined; therefore, you get a phase error.

STATUS

Microsoft has confirmed this to be a problem in MASM versions 5.00,

5.10, and 5.10a. The problem was corrected in MASM version 6.00.

RESOLUTION

When using the equate, specify a size (with WORD PTR, for example).

More Information:

The following sample code demonstrates the problem. In order to work

around the problem change

MOV bx, SAVE

to the following

MOV bx, WORD PTR SAVE

Sample Code:

------------

;Assemble options needed: none

ifndef SAVE

SAVE EQU 1

endif

code SEGMENT

assume cs:code

MOV bx, SAVE

endcode:

code ENDS

END