\" $Header$ .TH M68K2_AS 1 .ad .SH NAME m68k2_as \- assembler for Motorola 68000 .SH SYNOPSIS /usr/em/lib/m68k2_as [options] argument ... .br /usr/em/lib/m68k4_as [options] argument ... .SH DESCRIPTION This assembler is made with the general framework described in \fIuni_ass\fP(6). .SH SYNTAX .IP registers The 68000 has the following registers: seven data-registers (d1 - d7), seven address-registers (a1 - a6, sp) of which sp is the system stack pointer, a program counter (pc), a status register (sr), and a condition codes register (ccr) which is actually just the low order byte of the status register. .IP "addressing modes" .nf .ta 8 16 24 32 40 48 syntax meaning (name) reg contents of `reg' is operand, where `reg' is one of the registers mentioned above (register direct) (areg) contents of `areg' is address of operand, where `areg' is an address-register (address register indirect) (areg)+ same as (areg), but after the address is used, `areg' is incremented by the operand length (postincrement) -(areg) same as (areg), but before the address is used, `areg' is decremented by the operand length (predecrement) expr(areg) expr(pc) `expr' + the contents of the register yields the address of the operand (displacement) expr(areg, ireg) expr(pc, ireg) `expr' + the contents of the register + the contents of `ireg' yields the address of the operand. `ireg' is an address- or a data-register. `ireg' may be followed by .w or .l indicating whether the size of the index is a word or a long (displacement with index) expr `expr' is the address of the operand (absolute address) #expr `expr' is the operand (immediate) .fi Some instructions have as operand a register list. This list consists of one or more ranges of registers separated by '/'s. A register range consists of either one register (e.g. d3) or two registers separated by a '-' (e.g. a2-a4, or d4-d5). The two registers must be in the same set (address- or data-registers) and the first must have a lower number than the second. .IP instructions Some instructions can have a byte, word, or longword operand. This may be indicated by prepending the mnemonic with .b, .w, or .l respectively. Default is .w. .SH "SEE ALSO" uni_ass(6), ack(1), .br MC68000 16-bit microprocessor User's manual, Motorola Inc, 1979 .SH EXAMPLE .sp 2 .nf .ta 8 16 24 32 40 48 56 64 .define .cii .text .cii: movem.l a0/d0/d1,.savreg move.l (sp)+,a0 ! return address move (sp)+,d0 ! destination size sub (sp)+,d0 ! destination - source size bgt 1f sub d0,sp ! pop extra bytes bra 3f 1: move (sp),d1 ext.l d1 swap d1 asr #1,d0 2: move.w d1,-(sp) sub #1,d0 bgt 2b 3: move.l a0,-(sp) movem.l .savreg,a0/d0/d1 rts .fi