The stack layout at the entry point for 32-bit Linux executables is described in the System V Intel386 Architecture ABI Supplement.
It looks like following:
So pop edi copies the argc value into edi and the following code probably builds the argv array for the main function.
In the _start function, argc, argv and envp are contained on the stack.
A good read on this is the Linux x86 Program Start Up or - How the heck do we get to main()?
When you run a program, the shell or gui calls execve() which executes the linux system call execve(). If you want more information about execve() then you can simply type man execve from your ...