たとえばコードを書いた
.global _start
.data
str:
    .long 0x1
.text
_start:
  mov  $1, %rax         # system call 1 is write
  mov  $0x21, %rdx
  mov  %rdx, 4(%rax)
  mov  $60, %rax        # system call 60 is exit
  xor  %rdi, %rdi       # we want return code 0
  syscall               # invoke operating system to exit
セグメンテーション違反が発生するのはなぜですか?いつメモリロケーションを使用しますか?メモリロケーションをどのように使用しますか?