ASM Error

0

Witam

Otóż przerabiam kurs z Asembly z wikibooks i podczas kompilacji pierwszego programu (pisanego pod NASM) zwraca błąd, że nie są zdefiniowane pewne segmenty. Czyżby kurs był trefny?

Oto kod:

segment .data
	tekst db "Hello World!",0Dh,0Ah,"$"
 
segment stosik stack
	resb 64
segment .text
mov ax, .data
mov ds, ax
mov ax, stosik
mov ss, ax
mov dx, tekst
mov ah, 9
int 21h
mov ax, 4C00h
int 21h

Błędy zwracane:

hell.asm warning: ignoring unknown section attribute: "stack"
hell.asm warning: ignoring unknown section attribute: "stack"
hell.asm warning: ignoring unknown section attribute: "stack"
hell.asm warning: uninitialized space declared in stosik section: zeroing
hell.asm error: symbol data' undefined hell.asm:9: error: symbol stosik' undefined

Link do Kursu: http://pl.wikibooks.org/wiki/Asembler_x86

0

-f obj do parametrów przy kompilacji.

0

Teraz przy kompilacji tą komendą: nasm -o plik.com -f obj plik.asm
zwraca błąd:
error: symbol `tekst.data' undefined

0

mov ax, data? (lucky guess, nie chce mi się pobierać NASMa)

0

".data" to dyrektywa, nie nazwa segmentu. Patrz niżej:

segment stosik stack

tutaj nazwą segmentu jest stosik.

Więc żeby zadziałało:

segment dane .data
    tekst db "Hello World!",0Dh,0Ah,"$"
 
segment stosik stack
    resb 64
segment .text
mov ax, dane
mov ds, ax
mov ax, stosik
mov ss, ax
mov dx, tekst
mov ah, 9
int 21h
mov ax, 4C00h
int 21h

(Może być więcej segmentów .data w jednym programie przecież).
Nie wiem czy tutorial jest trefny czy kiedyś tak było można i NASM domyślał się intencji (wątpię, NASM by design zachowuje się pasywnie), w każdym razie nie zapowiada się dobrze jeśli już na początku kod nie działa.

0
segment data
    tekst db "Hello World!",0Dh,0Ah,"$"

segment stosik class=stack
    resb 1024
stacktop:

segment code
..start:
	mov ax, data
	mov ds, ax

	mov ax, stosik
	mov ss, ax
	mov sp, stacktop

	mov dx, tekst
	mov ah, 9
	int 21h

	mov ax, 4C00h
	int 21h
C:\PP\myprogs\asm>nasm westen.asm -f obj

C:\PP\myprogs\asm>wcl westen.obj
Open Watcom C/C++16 Compile and Link Utility Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        wlink @__wcl__.lnk
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
creating a DOS executable

C:\PP\myprogs\asm>westen
Hello World!

C:\PP\myprogs\asm>

1 użytkowników online, w tym zalogowanych: 0, gości: 1