Initial revision
authorsater <none@none>
Thu, 12 Jul 1984 15:16:23 +0000 (15:16 +0000)
committersater <none@none>
Thu, 12 Jul 1984 15:16:23 +0000 (15:16 +0000)
man/6809_as.1 [new file with mode: 0644]

diff --git a/man/6809_as.1 b/man/6809_as.1
new file mode 100644 (file)
index 0000000..7ac2ede
--- /dev/null
@@ -0,0 +1,147 @@
+.\" $Header$
+.TH 6809_AS 1
+.ad
+.SH NAME
+6809_as \- assembler for 6809
+.SH SYNOPSIS
+/usr/em/lib/6809_as [options] argument ...
+.SH DESCRIPTION
+This assembler is made with the general framework
+described in \fIuni_ass\fP(6).
+.SH SYNTAX
+.IP registers
+The 6809 contains four 8-bit registers registers:
+two accumulators (a and b),
+a direct page register (dp),
+and a condition code register (cc),
+and five 16-bit registers:
+two index registers (x and y),
+a user an a hardware stack pointer (u resp. s),
+and a program counter (pc).
+The index registers and the stack pointers are indexable.
+Accumulators a and b can be concatenated to form
+the double accumulator d,
+of which a is the high and b is the low byte.
+An instruction that refers to accumulator a
+has an "a" as last character.
+In the same way a "b" means that the instruction
+uses b as accumulator.
+.IP "pseudo instructions"
+The 6809 assembler recognizes one additional instruction
+that is not translated into a machine instruction: setdp.
+It expects an expression as argument.
+This is used for efficient address encoding of some addressing
+mode (see below).
+.IP "addressing modes"
+.nf
+.ta 8 16 24 32 40 48
+syntax         meaning (name)
+
+reg            The operand of the instruction is in `reg'.
+
+reglist                `reglist' is a either list of registers, seperated
+               by ','s, or the word "all". It encodes in a register
+               save mask, where "all" means all registers, that can
+               be used by the push-pull instructions pshs, pshu,
+               puls, and pulu.
+
+<expr          The one-byte value of `expr' is an address within
+               a 256-byte page. The particular page in use is
+               indicated by the contents of dp, so `expr' is the
+               low byte of the effective address of the operand,
+               and dp the high byte. (direct)
+
+>expr          The two-byte value of `expr' is the exact memory
+               address. Not that this mode always requires one
+               byte more than "<expr". (extended)
+
+expr           The value of `expr' is an address.
+               Except for long branches, this value is examined
+               first to see if a short encoding is possible.
+               When the instruction is a short branch, the value
+               is checked to see if the address is not too remote,
+               because in that case this branch is automatically
+               replaced by a long branch. When the instruction is
+               not a branch, the high byte of the value is compared
+               with the value of the argument of the last setdp
+               pseudo.  If they are equal, this mode is replaced by
+               "<expr", else by ">expr".
+               (relative for branch-instructions)
+
+#expr          The value of `expr' is one- or two-byte immediate
+               data. (immediate)
+
+(expr)         The value of `expr' is a pointer to the address
+               of the operand. (indirect)
+
+expr, reg      The value of `expr' added to the contents of `reg'
+               (which must be a 16-bit register) yields the
+               effective address of the operand.
+               (constant-offset indexed)
+
+, ireg         The contents of `ireg' (which must be indexable)
+               yields the effective address of the operand.
+               (constant-offset indexed)
+
+(expr, reg)    The value of `expr' added to the contents of `reg'
+               (which must be a 16-bit register) yields a pointer
+               to the effective address of the operand.
+               (constant-offset indexed indirect)
+
+(, ireg)       The contents of `ireg' (which must be indexable)
+               yields a pointer to the effective address of the
+               operand. (constant-offset indexed indirect)
+
+ac, ireg       The contents of `ac' (which must be an accumulator)
+               added to the contents of `ireg' (which must be
+               indexable) yields the effective address of the
+               operand. (accumulator indexed)
+
+(ac, ireg)     The contents of `ac' (which must be an accumulator)
+               added to the contents of `ireg' (which must be
+               indexable) yields a pointer to the effective address
+               of the operand. (accumulator indexed indirect)
+
+,ireg+
+,ireg++                The contents of `ireg' (which must be indexable) is
+               used as effective address of the operand. After that
+               it is incremented by 1 (+) or 2 (++).
+               (auto-increment)
+
+(,ireg++)      The contents of `ireg' (which must be indexable) is
+               used as a pointer to the effective address of the
+               operand. After that it is incremented by 2.
+               (auto-increment indirect)
+
+,-ireg
+,--ireg                `ireg' (which must be indexable) is decremented
+               by 1 (-) or 2 (--). After that, its contents is used
+               as effective address of the operand.
+               (auto-decrement)
+
+(,--ireg)      `ireg (which must be indexable) is decremented by 2.
+               After that, its contents is used as a pointer to the
+               effective address of the operand.
+               (auto-decrement indirect)
+
+.fi
+.SH "SEE ALSO"
+uni_ass(6),
+ack(1),
+.br
+MC6809 preliminary programming manual, Motorola Inc., First Edition, 1979
+.SH EXAMPLE
+An example of 6809 assembly code.
+.nf
+.ta 8 16 24 32 40 48
+       contby = 80
+
+       compgo: lda     #contby
+               ldx     #table - 2      !start of table
+
+               clrb
+       co1:    addb    #2
+               lsra
+               bcc     co1
+               jmp     (b, x)          !accumulator offset indirect
+.fi