Most decompliers that kind of work are for Windows 16 bit apps.
Assuming old system is Linux:
objdump is a GNU product that produces assembly from an exe (same platform). gcc can compile assembly. The assembly is basically unreadable
http://boomerang.sourceforge.net produces (most of the time) somewhat readable assembler.
You cannot reverse engineer machine code into readable C code, to my knowledge.
As to porting - what was the old platform, what is the new?