What's the problem? With one minor tweak, it "works for me". I had to spell "fce" as "_fce" in the body of "main". It displays more decimal places than intended(?), but it works. Changing the format string to "%.1f" fixes that...
The "xor eax, eax" is probably useless - a function returning "float" or "double" returns the value on the top of the FPU stack, not in eax. (is this "standard"?)
The use of underscores is definitely "non-standard"! For Linux/gcc, we don't need 'em at all. In most cases, you'd want to spell it "fce" in the C file, and "_fce" in the asm file. For WatCom C, you'd spell it "fce_" in the asm file! Nasm provides a feature whereby you can spell it "fce", and add "--prefix _" to the command line, and Nasm will put an underscore on anything "extern" or "global". ("-- postfix _" for WatCom).
If you can't get it working, you may need to tell us exactly what happens... and perhaps "what kind of C" as well.
Best,
Frank