Cześć, coś mi strzeliło do łba, żeby zacząć uczyć się asemblera. Skoro już wiem, jak wyświetlić tekst, postanowiłem wyświetlić liczbę, żeby mieć podgląd, jak działają moje testowe programiki. Piszę wszystko w FAsm. No i pojawia się problem.
Jeśli podprogram IntToStr umieszczam przed etykietą start w segmencie .code, to nie mam błędów w kompilacji(wywala się niestety gdzieś tam). Jeśli podprogramy są tam, gdzie teraz, to mam błąd: "undefined symbol 'start.data'" w mov ax, .data
Dlaczego?

Kod mam taki:

 
format mz
entry .code:start

segment .code
start:
  mov ax, .data         ; ustawiam data segment - tu mam błąd
  mov ds, ax

  mov eax, liczba       ;kładę do EAX liczbę, którą chcę pokazać(może być 32b)

  call intToStr         ;wywołuję intToStr

                        ; teraz w EDX mam do wyświetlenia
  mov ah, 09h           ; wyświetlam
  int 21h;

  call wait_char

  mov ah, 4ch           ;zakończenie programu
  int 21h

intToStr:
  put_stack:
    xor EDX, edx        ;zeruję EDX - potrzebne do dzielenia

    div [d]               ;dzielę EAX przez 10
    push DX             ;po takim dzieleniu, w DX mam resztę, a więc ostatnią cyfrę liczby, odkładam ja na stos
    inc [i]               ;pomocnicza, żebym wiedzial, ile cyfr ma liczba
    cmp ax, 0           ;jeśli ax>0, to wykonuj nadal
    jne put_stack

    xor dx, dx          ;zeruję dx, żebym wypisał tam liczbę
    xor al, al
    mov cx, i           ; ustawiam licznik pętli

  print_digit:
    pop ax              ; zdejmuję ze stosu pierwszą cyfrę
    add ax, 48d         ; dodaję do niej 48 - zamieniam na odpowiedni znak łańcucha
    mov dl, al          ; umieszczam w dl
    shl edx, 8          ; przesuwam w lewo, żebym mógł znowu umieścić w dl kolejną cyfrę
    loop print_digit
ret

wait_char:
  mov ah, 01h           ;czekanie na znak
  int 21h
ret


segment .data
  liczba dd 312d
  i dw 0
  d dd 10d