Asembler - problem z kompilacją za pomocą Tasm'a

0

Dopiero zaczynam się uczyć asemblera, ale nie mogę zacząć bo nie mogę skompilować pliku (jest dobrze napisany bo sprawdzałem na uczelni)
Problem jest w tym że jak wpisuję tasm nazwa pliku to wszystko jest ok.
ale jak pożniej pisze tlink nazwa to wyświetla się tylko komunikat
" No program entry point ". I za każdym razem to samo.
Próbowałem już kilku tasm'ów ale za każdym razem to samo.
Pomóżcie!!!

0

Pokaz ten kod zrodlowy
A z jakimi parametrami wlaczasz Tasma?

0

"No entry point" czyli nie masz zadeklarowanej etykiety startowej. Prawdopodobnie piszesz program typu .com, ale nie linkujesz go jako taki. Zerknij w "tlink -h" jaka opcja jest odpowiedzialna za generowanie plików .com (chyba -t, ale nie pamiętam). I linkuj podając ten parametr.

0

Kod wygląda tak:

ASSUME CS:Code, DS:Data ;pokazanie kompilatorowi ktory segment to segment kodu i danych
Code SEGMENT ;poczatek segmentu kodu
first PROC ;poczatek programu - czyli glownej procedury

    mov     ax,Data         ;przepisanie adresu segmentu danych
    mov     ds,ax           ;przepisanie 
    mov     ax,_Stos
    mov     ss,ax           ;inicjalizacja stosu
    mov     sp,100h


    mov     cx,10

skok1:
push cx
mov si,offset tablica

    mov     cx,   9

skok2:
mov ax,word ptr ds:[si]
mov bx,word ptr ds:[si+2]
cmp ax,bx
jc nie_zm

    mov     word ptr ds:[si+2],ax
    mov     word ptr ds:[si],bx

nie_zm:
add si,2

loop skok2
pop cx
loop skok1

    mov     cx,10
    mov	si,offset tablica
mov	bx,0

petla: mov ax,word ptr ds:[si]

cdloop: inc bx
call wysw
add si,2
loop petla

    mov     al,00		
mov     ah,4Ch          ;nr funkcji DOSa konczacej program
    int 21h                 ;zakonczenie programu i powrot do DOSa

wysw PROC ;poczatek procedury wyswietajacej zawartosc rejestru AX

mov	dx,0		;wpisanie do DX 0 gdzyz DIV dzieli liczbe 32 bitowa DX:AX
mov	bx, 10000	;zapisanie do BX dzielnej
div	bx		;dzielenie
push	dx		;odlozenie wartosci rejestru DX na stos

add	ax, 30h		;dodanie do AX wartosci 30h (tak aby prawidlowo wyswietlic cyfre)
mov	dx, ax		;przepisanie AX do DX 
mov	ah, 2		;zapisanie w AH numeru wywolywanej funkcji
int	21h		;wywolanie przerwania 21h funkca 02 (wyswietlenie znaku ktory lezy w AL)

pop     ax
mov     dx, 0
mov	bx, 1000
div	bx
push	dx

add	ax, 30h
mov	dx, ax
mov	ah, 2
int	21h

pop	ax
mov	dx, 0
mov	bx, 100
div	bx
push	dx

add	ax, 30h
mov	dx, ax
mov	ah, 2
int	21h

pop	ax
mov	dx, 0
mov	bx, 10
div	bx
push	dx

add	ax, 30h
mov	dx, ax
mov	ah, 2
int	21h


pop	dx
add	dx, 30h
mov	ah, 2h
int	21h

    mov     dx,10
    mov     ah,2
    int     21h


    mov     dx,13
    mov     ah,2
    int     21h

ret			;powrot z procedury

wysw ENDP ;koniec procedury

first ENDP ;koniec procedury glownej
ENDS ;koniec segmentu kodu

Data SEGMENT ;poczatek segmentu dancyh

tablica DW 10 DUP(143,4,54,11,654,48,545,85,43,34)
Wynik DB ?

Data ENDS ;koniec segmentu danych

_Stos SEGMENT STACK ;poczatek segmentu stosu
DB 100h DUP(?) ;deklaracja wielkosci stosu (tablica wielkosc 100h wypelniona '?')
ENDS ;koniec segmentu stosu
END ;koniec calego kodu

Kompilowałem go bez żadnych parametrów, później próbowałem wygenerować .com (z parametrem /t) ale też lipa:
"Fatal: Cannot generate COM file : stack segment present"

Może do skompilowania są potrzebne jeszcze jakieś pliki poza tasm i tlink?

0

tlink plik /entry first
ew zobacz do readme

0

Wolverine nie bardzo wiem o co ci chodiło z tym: tlink plik /entry first
Jeśli ktoś się zna na tym to proszę o pomoc bo to dosyć pilne.
Plizzz!!!

0

dawno tasma nie stosowałem, ale mam propozycję: daj przez first etykietę start. Czyli:

ASSUME CS:Code, DS:Data                ;pokazanie kompilatorowi ktory segment to segment kodu i danych
Code   SEGMENT                        ;poczatek segmentu kodu

start: ;i o to chodzi

first PROC                      ;poczatek programu - czyli glownej procedury
        
        mov     ax,Data         ;przepisanie adresu segmentu danych
        mov     ds,ax           ;przepisanie
        mov     ax,_Stos
        mov     ss,ax           ;inicjalizacja stosu
        mov     sp,100h

Etykieta start wskazuje domyślnie ep programu. może pomoże :) Może pomoże :)

0

Dzięki za odpowiedź Deus ale nie pomogło.
Normalnie wymiękam. U wszystkich kumpli działa dobrze a u mnie ni chu...

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