title: Printf in Nasm behavior
body: <p>I would be grateful if can explain me what's happening in the following example using printf, compiling with nasm and gcc. 
  Why is "sud" only printed on the screen? I don't understand, also, why is "sudobor" printed on the screen when I exchange "push 'sud'" with "push 'sudo'"?
  Can someone, also explain why do i need to push esp? Is it a null, that is required to be at the end of the string in printf?
  Thank you advance.</p>
  
  <p><strong>This is string.s file:</strong></p>
  
  <pre><code>section .data
  
  section .text
    global start
    extern printf
  
  start:
       push    ebp           
       mov     ebp, esp  
       push 'bor'
       push 'sud'
       push esp
       call printf
       mov     esp, ebp
       pop     dword ebp
  
    ret
  </code></pre>
  
  <p><strong>this is c file:</strong></p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  extern void start();
  int main(void) {
    start();
  </code></pre>
  
  <p>}</p>