INF: Phase Errors May Be Caused By Forward References

ID Number: Q24953

1.25 1.27 3.0x 4.00 5.00 5.10

MS-DOS

Summary:

Phase errors indicate that a relative address of a label changed

between pass 1 and pass 2 of the assembly process. They usually are

caused by improper forward references to labels. During pass 1, the

assembler will have to make assumptions (e.g. it might assume a near

jump during pass 1 if the location of a label is not known). During

pass 2, the assembler may have to change those assumptions (e.g. now

it knows that the jump is to a far label). If this involves changing

the size of an instruction, that difference can cause a phase error.

To examine the assumptions made by the assembler on pass 1, use the

/D option to get a pass 1 listing.

More Information:

Phase errors can usually be prevented by using segment overrides or

explicit type specification, as shown in the following examples:

jmp dword ptr far_label ;jump to far label

mov ax, word ptr label