Microsoft KB Archive/24953

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Knowledge Base


Phase Errors May Be Caused By Forward References

Article ID: 24953

Article Last Modified on 10/17/2003



APPLIES TO

  • 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

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
                


Additional query words: 1.25 1.27 3.0x 4.00 5.00 5.10

Keywords: KB24953