Every procedure name has a suffix which shows register usage:

_A:  no registers changed
_B:  r0,               r22
_C:  r0, r1,           r22,      r28, r29
_D:  r0, r1,           r22, r23, r28, r29
_E:  r0, r1, r20, r21, r22, r23, r28, r29
_F:  r0, r1, r20, r21, r22, r23, r28, r29, r30, r31
_Z:  Does not follow any conventions. You must not use this too often.

The suffix of a procedure depends on the registers it changes and on the
procedures it calls. If a procedure calls a "_C"-procedure, then it is at 
least a "_C"-procedure itself.

You should not write code which depends on the assumption that a there is a
function foo_C today, but it does not change register r28 (although it is
allowed to do so by name), and so you use r28 if foo_C does not change its
value. If someone hacks in foo_C, he assumes that he is allowed to change
r28...if one does things like that, it must be described in the header of 
the procedure.

The same applies to macros. Registers which are changed because they are
parameters are not taken into account.

Some registers are reserved:
   r3 (nZero), r4 (nFF)
   r10, r11, r12, r13: command bytes


Interrupt service routines should not change anything, so they have to
push/pop registers.
