Mixing C with Assembler: Assembly code before push instructions in a function

but doesn't the compiler push all registers it's concerned with?

Yes.

But, there is an assumption that whoever called the ISR preserved certain registers. That's the purpose of all those pushes; to do what a caller would have done if the ISR had been called like a normal function.