It is possible, however the c code will not look the same. This is call reverse engineering, in particular decompiling, and a lot of people are trying to figure it out. Since the code on the processor is assembly you can recover that very easy. Converting assembly to C code or even objects is hard. The reason is due optimization and name resolution during the compilation process of the c compiler. So yes in theory it is possible to sit down and figure out what this block of instruction is doing, and then write equivalent c code.
However some of the information is lost. The resulting code will look kind of like C/assembly hybrid. Things like variable names are not recorded in assembly code.
These reverse engineering tools are a tightly guarded secret and expensive to make. Many companies are trying to find ways to protect their code from these devices by scrambling the assembly in such a way that it still works yet is not easily read by these tools. This why some companies guard their code in secret facilities and use processors that cannot be read after assembly. (Very custom manufacturing.)