Your code is fine... but it's for 32bit. Easy way to fix it is to assemble it with "-f elf32" instead of "-f elf64", and tell gcc "-m32" so it will produce 32-bit code. This should run fine on your 64-bit system. If you want 64-bit code, the first parameter to "printf" goes in rsi (or is it rdi?), not on the stack. I think you need to zero rax to say that you haven't got any floating-point parameters. There may be some stack manipulation required, as well. I'm still running 32-bit hardware, and 64-bit code seems "weird" to me. I suppose I'll get used to it once I start using it. (obviously, I'm not in too much of a rush). You may find some 64-bit examples in the "Examples" section that will help... 32-bit examples (like what you've got) are easier to find, and telling gcc "-m32" doesn't seem too hard...
Best,
Frank