title: Program received signal SIGSEGV, Segmentation fault. in assembly when I call printf
body: <p>I am trying to code in assembly.
  when I call printf - it prints the necessary string but it returns seg fault after it.</p>
  
  <p>please help me.</p>
  
  <pre><code>.type    pstrijcpy, @function
  .globl pstrijcpy
  pstrijcpy:
  pushl   %ebp
  movl    %esp            ,%ebp
  pushl   %ebx
  xorl    %ebx            ,%ebx
  xorl    %edx            ,%edx   #set %edx to 0
  xorl    %ecx            ,%ecx
  xorl    %eax            ,%eax       
  movl    8(%ebp)         ,%eax   #pointer of the dst
  movl    12(%ebp)        ,%edx   #pointer of src 
  movb    16(%ebp)        ,%ch    #move char i to %ch
  movb    20(%ebp)        ,%cl    #%cl = j
  movb    %ch             ,%bl 
  cmpb    %cl             ,(%eax) #if dst.size &lt; j
  jl      .printError
  leal    (%eax, %ebx)    ,%eax   #move %eax to the beginning of the string after i
  cmpb    %cl             ,(%edx) #if src.size &lt; j
  jl      .printError
  leal    (%edx, %ebx)    ,%edx   #move %edx to the beginning of the string after i
  xorl    %ebx            ,%ebx
  .whileISmallerThanJ:
  movb    (%edx)          ,%bl 
  movb    %bl             ,(%eax) #dst[i] = src[i]
  addb    $1              ,%ch    #i++
  leal    1(%edx)         ,%edx
  leal    1(%eax)         ,%eax
  cmpb    %cl             ,%ch 
  jle     .whileISmallerThanJ
  .finishFunctionCopy:
  movl    8(%ebp)         ,%eax   #pointer to the first char of the string, for the return value
  popl    %ebx
  popl    %ebp
  ret     
  .printError:
  pushl   $error                  #push the string for printf
  call    printf
  jmp .finishFunctionCopy
  
      .section    .rodata         #read only data
  readDecimal:    .string "%d"    #for scanf
  error:          .string "invalid input!\n"
  </code></pre>