アセンブラ(NASM)のサブルーチンの書き方について
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