ASM Error

Westen
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
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:4: warning: ignoring unknown section attribute: "stack"
hell.asm:4: warning: ignoring unknown section attribute: "stack"
hell.asm:4: warning: ignoring unknown section attribute: "stack"
hell.asm:5: warning: uninitialized space declared in stosik section: zeroing
hell.asm:7: error: symbol data' undefined hell.asm:9: error: symbol stosik' undefined

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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

-f obj do parametrów przy kompilacji.

Westen
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

msm
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
segment stosik stack

tutaj nazwą segmentu jest stosik.

Więc żeby zadziałało:

Kopiuj
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.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
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
Kopiuj
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>

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.