## ASAVR Assembler

####

    AVR ASSEMBLER NOTES

         The AVR series of processors uses a non  unified addressing
    scheme:  the instruction addressing is 1 per  instruction  word,
    each  instruction uses 2 bytes of memory.  The processor data is
    addressed as 1 per byte of data.  To properly address  the  pro-
    gram/data spaces you, the programmer, must seperate your program
    and data into seperate code and data areas.  The  data  area  is
    addressed  as 1 per byte and the code area is addressed as 1 per
    instruction.

         The assembler/linker processes the instruction code so that
    the linker will output 2 bytes for each instruction  word.   The
    instruction  word  address  will  be  the  file  encoded address
    divided by 2.

    PROCESSOR SPECIFIC DIRECTIVE

         The  normal  PC relative addressing is -2047 to +2048 rela-
    tive to the current PC.  For a processor with less than 4K words
    of program space the AVR relative jump/call can access any loca-
    tion due to address wrap around.

         The  ASAVR  cross  assembler has one (1) processor specific
    assembler directive which tells the assembler that the  AVR  has
    4K words or less of program space.

            .avr_4k   0     Normal PC Relative addressing
            .avr_4k   1     AVR with <= 4K of Memory

         The remaining processor specific directives specify the AVR
    processor type.

            .AT90SXXXX
            .AT90S1200
            .AT90S2313
            .AT90S2323
            .AT90S2343
            .AT90S2333
            .AT90S4433
            .AT90S4414
            .AT90S4434
            .AT90S8515
            .AT90C8534
            .AT90S8535
            .ATmega103
            .ATmega603
            .ATmega161
            .ATmega163
            .ATtiny10
            .ATtiny11
            .ATtiny12
            .ATtiny15
            .ATtiny22
            .ATtiny28

         A  file,  avr.sfr,  contains  definitions  for  the Special
    Function Registers for all the  defined  processors.   Edit  the
    file  to  make your selection of processor and then .include the
    file at the beginning of your assembler file.

####

    AVR REGISTER SET

    The following is a list of the AVR registers used by ASAVR:

            r0-r31  -       8-bit registers
            x       -       index register (x = r27:r26)
            y       -       index register (y = r29:r28)
            z       -       index register (z = r31:r30)

    AVR ADDRESSING MODES

       The designation [] refers  to  a  required addressing  mode
    argument.   The  following  list specifies the format for each
    addressing mode supported by ASAVR:

            #data           immediate data

            expr            expression

            Rd              destination register (0-31)

            Rd,Rs           destination register (0-31)
                            source register (0-31)

            Rd,#data        destination register (0-31)
                            immediate data

            addr            address

            addr,Rs         destination address
                            source register

            Rd,addr         destination register
                            source address

            Rs,b            source register
                            bit position

            Rd,b            destination register
                            bit position

            A               an I/O register (0-31)

            A,b             an I/O register (0-31)
                            bit position

            A,Rs            source register to
                            output register

            Rd,A            input register to
                            destination register

            Rd,X            load indirect
            Rd,Y
            Rd,Z

            Rd,-X           load indirect pre-decrement
            Rd,-Y
            Rd,-Z

            Rd,X+           load indirect post-increment
            Rd,Y+
            Rd,Z+

            Rd,Z+Q          load indirect with displacement

            X,Rs            store indirect
            Y,Rs
            Z,Rs

            -X,Rs           store indirect pre-decrement
            -Y,Rs
            -Z,Rs

            X+,Rs           store indirect post increment
            Y+,Rs
            Z+,Rs

            Z+Q,Rs          store indirect with displacement

            label           branch label

    The  terms  data, expr, displacement, bit position, A, and label
    may be expressions.

####

    AVR INSTRUCTION SET

         Note  that  not  all  instructions are available with every
    processor type.  Not all addressing modes are valid  with  every
    instruction,  refer to the AVR technical data for valid instruc-
    tions and modes.

    AVR Arithmetic and Logical Instructions

            add     Rd,Rs           adc     Rd,Rs
            adiw    Rd,#data        sub     Rd,Rs
            subi    Rd,#data        sbc     Rd,Rs
            sbci    Rd,#data        sbiw    Rd,#data
            and     Rd,Rs           andi    Rd,#data
            or      Rd,Rs           ori     Rd,#data
            cp      Rd,Rs           eor     Rd,Rs
            cpi     Rd,#data        cpc     Rd,Rs
            cbr     Rd,#data        sbr     Rd,#data
            clr     Rd              com     Rd
            dec     Rd              inc     Rd
            neg     Rd              ser     Rd
            tst     Rd
            mul     Rd,Rs           fmul    Rd,Rs
            muls    Rd,Rs           fmuls   Rd,Rs
            mulsu   Rd,Rs           fmulsu  Rd,Rs

    AVR Bit and Bit-Test Instructions

            lsl     Rd              lsr     Rd
            rol     Rd              ror     Rd
            asr     Rd              swap    Rd
            bset    b               bclr    b
            sbi     A,b             cbi     A,b
            bst     Rs,b            bld     Rd,b
            sec                     sez
            sen                     sev
            ses                     seh
            set                     sei
            clc                     clz
            cln                     clv
            cls                     clh
            clt                     cli
            nop                     sleep
            wdr

    AVR Skip on Test Instructions

            cpse    Rd,Rs
            sbrc    Rs,b            sbrs    Rs,b
            sbic    A,b             sbis    A,b

    AVR Jump/Call/Return Instructions

            jmp     addr            rjmp    addr
            ijmp                    eijmp
            call    addr            rcall   addr
            icall                   eicall
            ret                     reti

    AVR Short Branch Instructions

            brcc    label           brcs    label
            breq    label           brge    label
            brhc    label           brhs    label
            brid    label           brie    label
            brlo    label           brlt    label
            brmi    label           brne    label
            brpl    label           brsh    label
            brtc    label           brts    label
            brvc    label           brvs    label

    AVR Short Branch Instructions with Bit Test

            brbc    b,label         brbs    b,label

    AVR Data Transfer Instructions

            mov     Rd,Rs           movw    Rd,Rs
            ldi     Rd,#data
            ld      []              st      []
            ldd     []              std     []
            lds     Rd,addr         sts     addr,Rs
            lpm     []              elpm    []
            spm
            push    Rs              pop     Rd
            in      Rd,A            out     A,Rs

##### Go to the Documentation Index

####

... Exit the ASxxxx Documentation

... Home Page