write()実行後にexit()しないとコアダンプする

低レイヤーに興味があって、現在x86アセンブリ言語を勉強中。

環境はUbuntu13.10, アセンブラにはnasmを使用。


例えば次のように書くと、標準出力に"HelloWorld"が出力される。

BITS 32
   
section .data
msg db "HelloWorld", 0x0a

section .text
global _start

_start:
    ;SYSCALL: write(1, msg, 14)
    mov eax,4
    mov ebx,4
    mov ecx,msg
    mov edx,11
    int 0x80

    ;SYSCALL: exit(0)
    mov eax,1
    mov ebx,0
    int 0x80


実行結果:
       HelloWorld


しかし、上のソースコードでexit(0)の部分のみを削除するとコアダンプする。

実行結果:
       HelloWorld
       Segmentation fault(コアダンプ)

この理由がよく分からないんだけど・・・。
普通にC言語で書いた場合、最後にexit 0;をつけてもつけなくても
ちゃんと動作する。
アセンブリ言語の場合は何か違うのかなー?
Cの場合はコンパイラが自動でexit(0)を挿入してくれるとか?

そもそも何でセグメ違反になるんだろう。