That's because printf is part of libc which is usually a shared library since lots of programs use it. And I don't think you want to include a static version of libc in your binary file. Which on my system is almost 1 MB.
Anyways you might want to read some stuff on this site:
http://linuxassembly.org
I think that's kind of the direction you want to go. Look at the asmutils they seem kinda nice.