Thanks, Neutral. That should give us something to work with. Unfortunately I can't try 'em for you. I'm not going to install Windows, sorry.
I can tell you for sure "-f elf" isn't going to work for Windows. "-f win32" should be correct. Do all of these complain about "WinMain@16"? I would "expect" that gcc would be looking for "_main", but I haven't run Windows for a long time! "_WinMain@16" is probably the "true entrypoint" but I would expect it to be in the C startup code - the code that calls "_main". I probably steered you wrong showing it without the underscore. Sorry.
Try something like this (based on your code):
; nasm -f win32 myprog.asm
; gcc -o myprog.exe myprog.obj
[bits 32]
extern _puts
global _main
section .data
hello:
db "helllosdjflsdf ",0xa,0
section .text
_main:
push hello
call _puts
add esp, 4
xor eax, eax
ret
"myprog" should be replaced by whatever you called it, of course. If that doesn't work, try replacing "_main" with "_WinMain@16" if that's what it seems to want, or tell us what the error message says.
Where are our other Windows users? I know we've got some! Maybe they're on vacation... Hang in there, Neutral!
Best,
Frank