'Printing a string in x86 Assembly on Mac OS X (NASM)

I'm doing x86 on Mac OS X with NASM. Copying an example and experimenting I noticed that my print command needed a four bytes pushed onto the stack after the other parameters but can't figure out why line five is necessary:

1 push    dword len       ;Length of message
2 push    dword msg       ;Message to write
3 push    dword 1         ;STDOUT
4 mov     eax,4           ;Command code for 'writing'
5 sub     esp,4           ;<<< Effectively 'push' Without this the print breaks
6 int     0x80            ;SYSCALL
7 add     esp,16          ;Functionally 'pop' everything off the stack

I am having trouble finding any documentation on this 'push the parameters to the stack' syntax that NASM/OS X seems to require. If anyone can point me to a resource for that in general that would most likely answer this question as well.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source