as: M68HC11-Modifiers

 
 9.22.3 Symbolic Operand Modifiers
 ---------------------------------
 
 The assembler supports several modifiers when using symbol addresses in
 68HC11 and 68HC12 instruction operands.  The general syntax is the
 following:
 
      %modifier(symbol)
 
 '%addr'
      This modifier indicates to the assembler and linker to use the
      16-bit physical address corresponding to the symbol.  This is
      intended to be used on memory window systems to map a symbol in the
      memory bank window.  If the symbol is in a memory expansion part,
      the physical address corresponds to the symbol address within the
      memory bank window.  If the symbol is not in a memory expansion
      part, this is the symbol address (using or not using the %addr
      modifier has no effect in that case).
 
 '%page'
      This modifier indicates to use the memory page number corresponding
      to the symbol.  If the symbol is in a memory expansion part, its
      page number is computed by the linker as a number used to map the
      page containing the symbol in the memory bank window.  If the
      symbol is not in a memory expansion part, the page number is 0.
 
 '%hi'
      This modifier indicates to use the 8-bit high part of the physical
      address of the symbol.
 
 '%lo'
      This modifier indicates to use the 8-bit low part of the physical
      address of the symbol.
 
    For example a 68HC12 call to a function 'foo_example' stored in
 memory expansion part could be written as follows:
 
      call %addr(foo_example),%page(foo_example)
 
    and this is equivalent to
 
      call foo_example
 
    And for 68HC11 it could be written as follows:
 
      ldab #%page(foo_example)
      stab _page_switch
      jsr  %addr(foo_example)