title: ret is causing a segfault in assembly
body: <p>I have the following Assembly code:</p>
  
  <pre><code>.text
  .global main
  main:
      push %r13
      push %r14
      push %r15
      jmp rest
  x:    
      .data
      y0:    .quad   0
      .text
      mov %r14, y0
      mov $format,%rdi
      push y0
      popq %rsi
      movq %rsi, %r15
      call printf
      mov $format,%rdi
      mov $10,%rsi
      call printf
      ret
  rest:    
      movq $5, %r9
      pushq %r9
      popq %rsi
      movq %rsi, %r14
      jmp x
      mov $0,%rax
      pop %r15
      pop %r14
      pop %r13
      ret
  .data
  format:
  .byte 37
  .byte 108
  .byte 117
  .byte 0
  </code></pre>
  
  <p>I was hoping that the ret would make the program jump back to where it was: however, I get a segmentation fault. Why is this?</p>