Microsoft KB Archive/49900

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


Article ID: 49900

Article Last Modified on 10/17/2003



APPLIES TO

  • Microsoft Macro Assembler 5.0
  • Microsoft Macro Assembler 5.1 Standard Edition
  • Microsoft Macro Assembler 5.1a
  • Microsoft Macro Assembler 6.0 Standard Edition
  • Microsoft Macro Assembler 6.0a
  • Microsoft Macro Assembler 6.0b



This article was previously published under Q49900

SYMPTOMS

The Microsoft Macro Assembler (MASM) will not let you jump directly to a hexadecimal address. If you try to assemble:

   jmp 0FFFFh:0000h
                

You will receive the error message:

A2038: left operand must have segment

CAUSE

This is the expected behavior for MASM. To make a jump to an absolute address you must create a pointer to point to the offset inside of the segment.

RESOLUTION

To create a pointer to point to the offset inside of the segment in question you would create a segment at a specific location. For example:

   bios SEGMENT AT 0FFFFh
   ORG 0
   reset LABEL FAR
   bios ENDS
                

Then, any one of the following three jump instructions will perform the jump to offset 0000h within segment FFFFh:

   jmp FAR PTR reset
   jmp bios:reset
   jmp reset
                

Note that the opcode that is generated in the listing file is EA 0000 ----

MORE INFORMATION

This process is covered on Page 101 of the "Microsoft Macro Assembler 5.0: Programmer's Guide." The second paragraph states the following:

An AT segment typically contains no code or initialized data. Instead, it represents an address template that can be placed over code or data already in memory, such as a screen buffer or other absolute memory locations defined by hardware. The linker will not generate any code or data for AT segments, but existing code or data can be accessed by name if it is given a label in an AT segment.



Additional query words: 5.00 5.10 5.10a 6.00 6.00a 6.00b bios rom

Keywords: KB49900