Microsoft KB Archive/24953

From BetaArchive Wiki
< Microsoft KB Archive
Revision as of 17:14, 18 July 2020 by 3155ffGd (talk | contribs) (importing KB archive)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Knowledge Base

Phase Errors May Be Caused By Forward References

Article ID: 24953

Article Last Modified on 10/17/2003


  • Microsoft Macro Assembler 1.25
  • Microsoft Macro Assembler 1.27
  • Microsoft Macro Assembler 4.0
  • Microsoft Macro Assembler 4.0
  • Microsoft Macro Assembler 5.0
  • Microsoft Macro Assembler 5.1 Standard Edition

This article was previously published under Q24953


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.


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

Additional query words: 1.25 1.27 3.0x 4.00 5.00 5.10

Keywords: KB24953