where : ibrtses embedded
AVR macros
pointer stuff
assumes temp:=reg 16-25
.MACRO CopyZtoX
mov XL,ZL
mov XH,ZH
.ENDMACRO
.MACRO CopyXtoZ
mov ZL,XL
mov ZH,XH
.ENDMACRO
.MACRO CopyZtoY
mov YL,ZL
mov YH,ZH
.ENDMACRO
.MACRO CopyYtoZ
mov ZL,YL
mov ZH,YH
.ENDMACRO
.MACRO CopyYtoX
mov XL,YL
mov XH,YH
.ENDMACRO
.MACRO CopyXtoY
mov YL,XL
mov YH,XH
.ENDMACRO
.MACRO m_SwapReg ; Swap value in register (Assume: @0=a, @0=b)
eor @0,@1 ; @0 := @0 xor @1 (@0: a -> ab
eor @1,@0 ; @1 := @1 xor @0 (@1: b -> bab -> a)
eor @0,@1 ; @0 := @0 xor @1 (@0 ab -> aba ->b)
.ENDMACRO
.MACRO m_SwapXY
eor YL,XL ; assembler does not allow using m_SwapReg in macro
eor XL,YL
eor YL,XL
eor YH,XH ; assembler does not allow using m_SwapReg in macro
eor XH,YH
eor YH,XH
.ENDMACRO
The previous two were shown to me by Axel Heider and are a bit faster
than my solutions below, beside using less registers.
.MACRO SwapXY
push temp
mov temp,YL
mov YL,XL
mov XL,temp
mov temp,YH
mov YH,XH
mov XH,temp
pop temp
.ENDMACRO
.MACRO SwapXZ
push temp
mov temp,ZL
mov ZL,XL
mov XL,temp
mov temp,ZH
mov ZH,XH
mov XH,temp
pop temp
.ENDMACRO
.MACRO SwapYZ
push temp
mov temp,YL
mov YL,ZL
mov ZL,temp
mov temp,YH
mov YH,ZH
mov ZH,temp
pop temp
.ENDMACRO
.MACRO SetZPtr ;(adress)
ldi ZL,low(@0)
ldi ZH,high(@0)
.ENDMACRO
.MACRO SetXPtr ;(adress)
ldi XL,low(@0)
ldi XH,high(@0)
.ENDMACRO
.MACRO SetYPtr ;(adress)
ldi YL,low(@0)
ldi YH,high(@0)
.ENDMACRO
.MACRO PushX
push XL
push XH
.ENDMACRO
.MACRO PopX
pop XH
pop XL
.ENDMACRO
.MACRO PushY
push YL
push YH
.ENDMACRO
.MACRO PopY
pop YH
pop YL
.ENDMACRO
.MACRO PushZ
push ZL
push ZH
.ENDMACRO
.MACRO PopZ
pop ZH
pop ZL
.ENDMACRO
16bit - from App note 202
.MACRO Add16 ; Add16 UL,UH,VL,VH U:=U+V
add @0,@2
adc @1,@3
.ENDMACRO
.MACRO Addi16 ; Addi16 UL,UH,immediate U:=U+immediate
subi @0,low(-@2)
sbci @1,high(-@2)
.ENDMACRO
.MACRO Sub16 ; Sub16 UL,UH,VL,VH U:=U-V
sub @0,@2
sbc @1,@3
.ENDMACRO
.MACRO Subi16 ; Subi16 UL,UH,immediate U:=U-immediate
subi @0,low(@2)
sbci @1,high(@2)
.ENDMACRO
.MACRO Cp16 ; CP16 UL,UH,VL,VH U-V
cp @0,@2
cpc @1,@3
.ENDMACRO
.MACRO Cpi16 ; CP16 UL,UH,immediate U-immediate
cpi @0,low(@2)
ldi temp,high(@2)
cpc @1,temp
.ENDMACRO
.MACRO Neg16 ; Neg16 UL,UH
com @0
com @1
subi @0,low(-1)
sbci @1,high(-1)
.ENDMACRO
Questions ?
Suggestions?
Feedback ?
sponsored links
AVR index
embedded software pages
home
last updated: 1.jan.00
Copyright (99,2001) Ing.Büro R.Tschaggelar