It tells gcc to assemble but not link. I know when CoffeeScript emits less than optimal JavaScript. But why are we doing this? The resulting addresses are not too important for user programs since addresses are assigned by the OS, but the distinction between user addresses and kernel addresses are useful for debugging.
I hope this tutorial was sufficient to get you oriented with how the x86 instruction set architecture generally works. It is the caller's responsibility to clean the stack after the call.
Watch your step; archaic syntax ahead. Finally a lot of DOS applications still exist, so it might be useful to know what kind of technology underlies it all. Virtual memory Up to now, we assumed that when an instruction requests to read from or write to a memory address, it will be exactly the address handled by the RAM.
To save registers, push them onto the stack.
What our goal is is to call exit 0 ; where exit is defined in libc, which we link against during the linking phase with with flag -lc. Finally we looked briefly at the stack, calling convention, advanced instructions, virtual memory address translation, and differences in the x mode.
The SIMD instruction sets also include "prefetch" instructions which perform the load but do not target any register, used for cache loading. The CPU has a bit register named eip extended instruction pointer which, during program execution, holds the memory address of the current instruction being executed.
It does not apply to a piece of assembly code calling an arbitrary piece of assembly code; there are no restrictions in this case.