Why assume the problem is with Nasm? I don't recall version numbers, but prior to about November of 2003, the version of ld with the MinGW binutils wasn't "right" - that is, MinGW did it the way MS *documented* they did coff, not the way they actually *did* it. This resulted in a lot of bug reports about Nasm... AFAIK, they do it "right" (that is, "wrong", but the way MS does it) in recent versions.
You want "-f win32" from Nasm - Nasm's "-f coff" is for djgpp.
Outside of those two possible issues, I don't know what could be wrong. If you figure it out, let us know.
Best,
Frank