1.In the interrupt no registers are save by hardware, depending on compiler there are implicit implementation on interrupt header of routine and post.
If you need special register to be save you have to rewrite the interrupt mechanism from scratch .
2. You can call what function you need in the interrupt but there are bad thinks coming after if
- functions are to big and can lock the resources
- if same interrupt come in this time, lost of interrupts (phantom interrupts) can appear and old 16 bit micro have hardware support for this situation.
3. Global variables used in interrupt can be changed any time and in a way you have to be careful take this into account. Usage of volatile I find it useful
- when you what to avoid optimization
- when the address points out to a mapped register.