There are two ways to create a binary file (executable) starting with a nasm source program (file). Both methods use nasm -f elf src_file_name.asm to create an object file, src_file_name.o This object file must then be converted into an executable file before you can execute it (object files are not executable). First (using ld directly): ld -s -o executable_name src_file_name.o Second (using gcc, which calls ld): gcc -o executable_name src_file_name.o The executable that results from either of these methods is virtually identical EXCEPT for the way the stack is set up with the command line arguments, argv and argc. I've given example code that show both. The last two slides in the NASM slides give the code to access the arguments using ld directly. The link labeled "The code to get the command line if you are using GCC" gives the code for the second method. Which one do you use then? Well, if you going to use libc functions such as printf, scanf, etc, you will need to use gcc. I have not determined how to tell ld to access libc as a means of resolving uses of the libc functions in the source code. FYI: The reason for the two step process is to allow you to combine the source code from several files together into a single executable image. Each source file is first "compiled" or "assembled" into an object file. The linker (ld on linux) combines these together, resolving any cross dependencies, into the executable.