By default, ld wants to use "/lib/ld-linux.so.1" as an interpreter. That's the "file or directory" that's missing. Add "-I/lib/ld-linux.so.2" to ld's command line, and I think it'll link up correctly...
However, unlike "main", "_start" is jumped-to, not called, so the "ret" won't work to end your program (no return address on the stack) - call either "exit" (the libc function) or "sys_exit" to exit back to bash.
I think those two changes will make it work... might want to add "-o helloworld" to the ld command line, if you don't want your program to be named "a.out"...
Best,
Frank