Я пытаюсь собрать и связать следующую программу (.EXE
, а не .COM
), основываясь на примере, приведенном в руководстве NASM :
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:
Iсобрать с помощью следующей команды (которая ничего не производит на стандартный вывод, но создает 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`.
Чего мне не хватает?