x86環境でアセンブラ(NASM)の学習を始めています。
サブルーチンの書き方を学ぼうと思い、下部のコードを記載してみています。
期待している結果としては、

Hello, World
Japan

と、出力させたいのですが、下部のコードを実行すると、以下のように出力されます。

Hello, World
Japan
Japan

イメージとしては、17行目callでtestのサブルーチンを実行していることでJapanを出力させる処理を走らせていると思っているのですが、実際にはcallが無くても「test:」部を実行しているようです。
どのようにコーディングすればサブルーチンとしてのみ動作させられるでしょうか?

  1 section .data
  2 message db 'Hello, World', 0x0a
  3 message2 db 'Japan', 0x0a
  4
  5 length      equ $ -message
  6 length2         equ $ -message2
  7 section .text
  8 global _start
  9
 10 _start:
 11         mov     ecx, message
 12         mov     edx, length
 13         mov     eax, 4
 14         mov     ebx, 1
 15         int     0x80
 16
 17         call test
 18
 19         mov     eax, 1
 20         mov     ebx, 0 
 21         int     0x80
 22
 23         test:
 24                 mov     ecx, message2
 25                 mov     edx, length2
 26                 mov     eax, 4
 27                 mov     ebx, 1
 28                 int 0x80
 29                 ret