Addi on the AVR micro
Jonathan Hunt
jhuntnz@users.sourceforge.net
Thu May 10 21:41:00 GMT 2001
Hi,
The AVR has an instruction subi (subtract immediate) but no addi. So I use
subi reg, -(num) to add immediate. However this poses a problem when you try
and do it with a memory address like this:
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ .data
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ .org 0x00
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ __X_60:
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ mema:ÃÂ ÃÂ ; Real address is 0x60, offset address is 0x00
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ .text
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ subiÃÂ ÃÂ ÃÂ r16, -memaÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ; Generates an error
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ subiÃÂ ÃÂ ÃÂ r16, 0x100 - mema ; Generates an error
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ subiÃÂ ÃÂ ÃÂ r16, !mema + 1ÃÂ ; Uses the offset address of mema for the !
which makes ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ; it incorrrect
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ; The only work around I have found
ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ ÃÂ subiÃÂ ÃÂ ÃÂ r16, lo8(__X_60_ + (0xff - 0x60) - mema)
This is a very messy way off having to do it. I am sure that I am missing
something but I can't see another way to do it.
Please help,
Thanks,
Jonathan Hunt
Please CC replies to <jhuntnz@users.sourceforge.net> since I'm not on this
list
--
Jonathan Hunt (The Real Jonathan Hunt) <jhuntnz@users.sourceforge.net>
"He is no fool who gives that which he cannot keep to gain that which he
cannot afford to lose." Jim Elliot
More information about the Binutils
mailing list