All microprocessors will finish the current active instruction before it interupts the running program, there will be no instructions lost because of that.
When the program are returning from the ISR the next instruction will be executed as if no interrupt took place.
The registers or pointers that are changed/used in the ISR needs to be saved at the entry of the ISR and restored before return from interrupt.
What you have to do in your ISR code is depending on the microprocessor you use. Some MCUs does most of the shopkeeping automatically, but other do only a minimum, normally only to save the return program pointer on the stack. In the last case your ISR code needs to take care of all the pushing and popping of registers to be used in the ISR, to and from the stack.
This is a must, since not doing it will normally ruin or even crash your background program.