what does this instructions mean? : Iam learn  assemble and have some problems with understanding  with instructions, what means "sub    $0x10,%rsp"  and why gcc copied this "mov    $0x0,%eax"  two times 


    0x0000000000001135 <+0>:	push   %rbp   
    0x0000000000001136 <+1>:	mov    %rsp,%rbp
    0x0000000000001139 <+4>:	sub    $0x10,%rsp
    0x000000000000113d <+8>:	movl   $0xa,-0x4(%rbp)  
    0x0000000000001144 <+15>:	mov    -0x4(%rbp),%eax
    0x0000000000001147 <+18>:	mov    %eax,%esi
    0x0000000000001149 <+20>:	lea    0xeb4(%rip),%rdi        # 0x2004
    0x0000000000001150 <+27>:	mov    $0x0,%eax
    0x0000000000001155 <+32>:	callq  0x1030 <printf@plt>
    0x000000000000115a <+37>:	mov    $0x0,%eax
    0x000000000000115f <+42>:	leaveq 
    0x0000000000001160 <+43>:	retq