NASM マニュアルの例に基づいて、次のプログラム (.EXE
ではなく)をアセンブルしてリンクしようとしています。.COM
segment data
hello: db "hello",13,10,"$"
segment code
..start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,stacktop
mov dx,hello
mov ah,9
int 0x21
mov ax,0x4c00
int 0x21
segment stack stack
resb 64
stacktop:
次のコマンドでアセンブルします (標準出力には何も生成しませんが、生成しますtest.obj
)。
nasm -Wall -f obj test.asm
次のコマンドでリンクします (これは OpenWatcom 1.9 WLINK です)。
wlink name test.exe format dos file test.obj
これにより、次の出力が得られます(警告を含む):
Open Watcom Linker Version 1.9
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
loading object files
Warning! W1014: stack segment not found
creating a DOS executable
マニュアルには次のように記載されています。
上記のコードは、64 バイトの初期化されていないスタック スペースを含むスタック セグメントを宣言し、その先頭にある「stacktop」をポイントします。ディレクティブ セグメント スタック スタックは、`stack` と呼ばれるセグメントを定義し、タイプも `STACK` です。後者はプログラムを正しく実行するために必要ではありませんが、プログラムに「STACK」タイプのセグメントがない場合、リンカは警告またはエラーを発行する可能性があります。
私は何が欠けていますか?