Does it save all the registers of the current process before executing the ISR? If so, how does it save the registers? Does it do it by pushing all registers in stack?
Please review documentation for the Cortex-M3 core, ARM has Technical Reference Manuals, and Joseph Yiu's Essential Cortex-Mx series books has good coverage of the CPU and NVIC functionality.
It pushes a subset of the registers, well documented, easily findable..
Generally speaking, the compiler and linker should take care of pushing/popping the needed registers in the stack for you peace of mind. The main exception is when floating point copro and registers are used within an ISR. This may require manual #pragma handling, or better, avoid using floats within an interrupt. Even in Android, drivers are avoiding floats within interrupts.
Retrieving data ...