+The M68HC12 has other more complex addressing modes. All of them
+are supported and they are represented below:
+
+@table @dfn
+@item Constant Offset Indexed Addressing Mode
+@samp{@var{number},@var{reg}}
+
+The @var{number} may be omitted in which case 0 is assumed.
+The register can be either @samp{X}, @samp{Y}, @samp{SP} or
+@samp{PC}. The assembler will use the smaller post-byte definition
+according to the constant value (5-bit constant offset, 9-bit constant
+offset or 16-bit constant offset). If the constant is not known by
+the assembler it will use the 16-bit constant offset post-byte and the value
+will be resolved at link time.
+
+@item Offset Indexed Indirect
+@samp{[@var{number},@var{reg}]}
+
+The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
+
+@item Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement
+@samp{@var{number},-@var{reg}}
+@samp{@var{number},+@var{reg}}
+@samp{@var{number},@var{reg}-}
+@samp{@var{number},@var{reg}+}
+
+The number must be in the range @samp{-8}..@samp{+8} and must not be 0.
+The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
+
+@item Accumulator Offset
+@samp{@var{acc},@var{reg}}
+
+The accumulator register can be either @samp{A}, @samp{B} or @samp{D}.
+The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
+
+@item Accumulator D offset indexed-indirect
+@samp{[D,@var{reg}]}
+
+The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
+
+@end table
+
+For example:
+
+@smallexample
+ldab 1024,sp
+ldd [10,x]
+orab 3,+x
+stab -2,y-
+ldx a,pc
+sty [d,sp]
+@end smallexample
+
+
+@node M68HC11-Modifiers
+@section Symbolic Operand Modifiers
+
+@cindex M68HC11 modifiers
+@cindex syntax, M68HC11
+
+The assembler supports several modifiers when using symbol addresses
+in 68HC11 and 68HC12 instruction operands. The general syntax is
+the following:
+
+@smallexample
+%modifier(symbol)
+@end smallexample
+
+@table @code
+@cindex symbol modifiers
+@item %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).
+
+@item %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.
+
+@item %hi
+This modifier indicates to use the 8-bit high part of the physical
+address of the symbol.
+
+@item %lo
+This modifier indicates to use the 8-bit low part of the physical
+address of the symbol.
+
+@end table
+
+For example a 68HC12 call to a function @samp{foo_example} stored in memory
+expansion part could be written as follows:
+
+@smallexample
+call %addr(foo_example),%page(foo_example)
+@end smallexample
+
+and this is equivalent to
+
+@smallexample
+call foo_example
+@end smallexample
+
+And for 68HC11 it could be written as follows:
+
+@smallexample
+ldab #%page(foo_example)
+stab _page_switch
+jsr %addr(foo_example)
+@end smallexample
+
+@node M68HC11-Directives
+@section Assembler Directives
+
+@cindex assembler directives, M68HC11
+@cindex assembler directives, M68HC12
+@cindex M68HC11 assembler directives
+@cindex M68HC12 assembler directives
+
+The 68HC11 and 68HC12 version of @code{@value{AS}} have the following
+specific assembler directives:
+
+@table @code
+@item .relax
+@cindex assembler directive .relax, M68HC11
+@cindex M68HC11 assembler directive .relax
+The relax directive is used by the @samp{GNU Compiler} to emit a specific
+relocation to mark a group of instructions for linker relaxation.
+The sequence of instructions within the group must be known to the linker
+so that relaxation can be performed.
+
+@item .mode [mshort|mlong|mshort-double|mlong-double]
+@cindex assembler directive .mode, M68HC11
+@cindex M68HC11 assembler directive .mode
+This directive specifies the ABI. It overrides the @samp{-mshort},
+@samp{-mlong}, @samp{-mshort-double} and @samp{-mlong-double} options.
+
+@item .far @var{symbol}
+@cindex assembler directive .far, M68HC11
+@cindex M68HC11 assembler directive .far
+This directive marks the symbol as a @samp{far} symbol meaning that it
+uses a @samp{call/rtc} calling convention as opposed to @samp{jsr/rts}.
+During a final link, the linker will identify references to the @samp{far}
+symbol and will verify the proper calling convention.
+
+@item .interrupt @var{symbol}
+@cindex assembler directive .interrupt, M68HC11
+@cindex M68HC11 assembler directive .interrupt
+This directive marks the symbol as an interrupt entry point.
+This information is then used by the debugger to correctly unwind the
+frame across interrupts.
+
+@item .xrefb @var{symbol}
+@cindex assembler directive .xrefb, M68HC11
+@cindex M68HC11 assembler directive .xrefb
+This directive is defined for compatibility with the
+@samp{Specification for Motorola 8 and 16-Bit Assembly Language Input
+Standard} and is ignored.
+
+@end table
+