🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
12 messages
12 total messages Started by Matuzalem Mon, 07 Aug 2006 23:09
Z ciekawosci...
#498
Author: Matuzalem
Date: Mon, 07 Aug 2006 23:09
53 lines
1928 bytes
Witam


Wlasciwie nie wiem czemu, ale po prostu nagle zaczelo dreczyc
mnie to.
Mianowicie oto kod:

; -------------------------
_DATA segment
;dane...
_DATA ends

_TEXT segment
start:
;kod...
_TEXT ends
end start
; -----------------------------

Gdy mamy tak "ulozony program", wszystko jest ok, tzn. kompiluje sie
(TASM).
Zastanawiaja mnie dwa ostatnie wiersze:

_TEXT ends
end start

o co mi chodzi?
no wiec: (zgodnie z kolejnoscia "tego co sie pisze", powinno byc
tak)

_TEXT segment
start:
end start
_TEXT ends

przynajmniej tak mi logika podpowiada. czemu jest wiec tak?

_TEXT ends
end start

Jesli spróbujemy to:

_TEXT segment
start:
end start
_TEXT ends

skompilowac w TASM jest OK ale pojawia sie warning. (w MASM nie ma
róznicy)
Czy to tylko taka skladnia - szablon - a jesli tak, to czym byl
podyktowany brak "kolejnosci"?

Pozdrawiam
Re: Z ciekawosci...
#499
Author: Wiktor S.
Date: Tue, 08 Aug 2006 01:11
52 lines
2061 bytes
> Wlasciwie nie wiem czemu, ale po prostu nagle zaczelo dreczyc
> mnie to.
> Mianowicie oto kod:
>
> ; -------------------------
> _DATA segment
> ;dane...
> _DATA ends
>
> _TEXT segment
> start:
> ;kod...
> _TEXT ends
> end start
> ; -----------------------------
>
> Gdy mamy tak "ulozony program", wszystko jest ok, tzn. kompiluje sie
> (TASM).
> Zastanawiaja mnie dwa ostatnie wiersze:
>
> _TEXT ends
> end start
>
> o co mi chodzi?

poczatek segmentu:

| NAZWA segment

koniec segmentu:

| NAZWA ends

a wiec twój segment kodu zawiera sie miedzy "_TEXT segment" a "_TEXT ends".

"start:" jest etykieta.

END oznacza koniec programu w asemblerze. dlatego jest na samym koncu.
parametr po END okresla etykiete, od której wykonanie programu ma sie 
rozpoczynac (u ciebie jest to "start")

> skompilowac w TASM jest OK ale pojawia sie warning. (w MASM nie ma
> róznicy)
> Czy to tylko taka skladnia - szablon - a jesli tak, to czym byl
> podyktowany brak "kolejnosci"?


kolejnosc jak najbardziej jest, po prostu zle zrozumiales, ze "end start" 
jest niby koncem tego, co sie zaczyna od "start:". tak nie jest.

-- 
Azarien
Re: Z ciekawosci...
#500
Author: Wiktor S.
Date: Tue, 08 Aug 2006 01:12
52 lines
2055 bytes
> Wlasciwie nie wiem czemu, ale po prostu nagle zaczelo dreczyc
> mnie to.
> Mianowicie oto kod:
>
> ; -------------------------
> _DATA segment
> ;dane...
> _DATA ends
>
> _TEXT segment
> start:
> ;kod...
> _TEXT ends
> end start
> ; -----------------------------
>
> Gdy mamy tak "ulozony program", wszystko jest ok, tzn. kompiluje sie
> (TASM).
> Zastanawiaja mnie dwa ostatnie wiersze:
>
> _TEXT ends
> end start
>
> o co mi chodzi?

początek segmentu:

> NAZWA segment

koniec segmentu:

> NAZWA ends

a więc twój segment kodu zawiera się między "_TEXT segment" a "_TEXT ends".

"start:" jest etykietą.

END oznacza koniec programu w asemblerze. dlatego jest na samym końcu.
parametr po END określa etykietę, od której wykonanie programu ma się
rozpoczynać (u ciebie jest to "start")

> skompilowac w TASM jest OK ale pojawia sie warning. (w MASM nie ma
> róznicy)
> Czy to tylko taka skladnia - szablon - a jesli tak, to czym byl
> podyktowany brak "kolejnosci"?


kolejność jak najbardziej jest, po prostu źle zrozumiałeś, że "end start"
jest niby końcem tego, co się zaczyna od "start:". tak nie jest.

--
Azarien 
Re: Z ciekawosci...
#501
Author: Matuzalem
Date: Tue, 08 Aug 2006 09:16
24 lines
1595 bytes
> kolejnosc jak najbardziej jest, po prostu zle zrozumiales, ze "end start"
> jest niby koncem tego, co sie zaczyna od "start:". tak nie jest.

Czyli MASM zle interpretuje kod, gdy jest:

_TEXT segment
start:
end start
_TEXT ends

?

I czemu TASM równiez wywala tylko warning skoro to jest zle?
Wiem ze w TASM np.

.code
main proc
main endp

END MAIN ; <---(1)

Czyli to jest podobna sytuacja?

Pozdrawiam
Re: Z ciekawosci...
#509
Author: Remek
Date: Tue, 08 Aug 2006 23:40
8 lines
1156 bytes
> przynajmniej tak mi logika podpowiada. czemu jest wiec tak?

W tym przypadku niestety musisz kierowac sie logika
danego translatora, czyli jego twórcy. Zasady uzywania
etykiet i zagniezdzania procedur sa wbudowane w konkretny
program i dyskutowanie o logice niczego nie zmieni.

Pozdrawiam  Remek
Re: Z ciekawosci...
#502
Author: Wiktor S.
Date: Wed, 09 Aug 2006 09:20
81 lines
2546 bytes
>> kolejnosc jak najbardziej jest, po prostu zle zrozumiales, ze "end
>> start" jest niby koncem tego, co sie zaczyna od "start:". tak nie
>> jest.

> Czyli MASM zle interpretuje kod, gdy jest:

dobrze interpretuje.

> _TEXT segment
> start:
> end start
> _TEXT ends
>
> ?

> _TEXT segment

początek segmentu _TEXT

> start:

jakaś sobie etykieta "start"

> end start

koniec programu w asemblerze. punkt wejścia programu: etykieta "start".
segment "_TEXT" nie został nigdy zakończony, więc kończymy go tutaj i 
ewentualnie wyrzucamy ostrzeżenie.

> _TEXT ends

tego asembler w ogóle nie przeczyta. program skończył się linijkę wcześniej. 
jeśli chcesz się przekonać, zmień ends na "dupa" :-) i zobacz, że nic to nie 
zmieni.

> I czemu TASM równiez wywala tylko warning skoro to jest zle?

Ale jaki warning?

> Wiem ze w TASM np.
>
> .code
> main proc
> main endp
>
> END MAIN ; <---(1)
>
> Czyli to jest podobna sytuacja?

Zrozum, że END oznacza _koniec_ całego kodu źródłowego. Asembler powinien 
odrzucić wszystko, co jest dalej.

w przypadku

_TEXT segment
start:
end start
_TEXT ends

ostatnia linijka "nie istnieje" - segment _TEXT nigdzie się nie kończy. TASM 
wyrzuca ostrzeżenie "open segment" - segment otwarty, czyli nie znalazł jego 
końca.

> .code

deklaracja segmentu kodu

> main proc

początek procedury main

> main endp

koniec procedury main

> END MAIN ; <---(1)

koniec pliku w asemblerze. punkt wejścia programu: etykieta "main".

-- 
Azarien
Re: Z ciekawosci...
#503
Author: Matuzalem
Date: Wed, 09 Aug 2006 10:33
98 lines
3215 bytes
Wiktor S. napisal(a):
> >> kolejnosc jak najbardziej jest, po prostu zle zrozumiales, ze "end
> >> start" jest niby koncem tego, co sie zaczyna od "start:". tak nie
> >> jest.
>
> > Czyli MASM zle interpretuje kod, gdy jest:
>
> dobrze interpretuje.
>
> > _TEXT segment
> > start:
> > end start
> > _TEXT ends
> >
> > ?
>
> > _TEXT segment
>
> poczatek segmentu _TEXT
>
> > start:
>
> jakas sobie etykieta "start"
>
> > end start
>
> koniec programu w asemblerze. punkt wejscia programu: etykieta "start".
> segment "_TEXT" nie zostal nigdy zakonczony, wiec konczymy go tutaj i
> ewentualnie wyrzucamy ostrzezenie.
>
> > _TEXT ends
>
> tego asembler w ogóle nie przeczyta. program skonczyl sie linijke wczesniej.
> jesli chcesz sie przekonac, zmien ends na "dupa" :-) i zobacz, ze nic to nie
> zmieni.
>
> > I czemu TASM równiez wywala tylko warning skoro to jest zle?
>
> Ale jaki warning?
>
> > Wiem ze w TASM np.
> >
> > .code
> > main proc
> > main endp
> >
> > END MAIN ; <---(1)
> >
> > Czyli to jest podobna sytuacja?
>
> Zrozum, ze END oznacza _koniec_ calego kodu zródlowego. Asembler powinien
> odrzucic wszystko, co jest dalej.
>
> w przypadku
>
> _TEXT segment
> start:
> end start
> _TEXT ends
>
> ostatnia linijka "nie istnieje" - segment _TEXT nigdzie sie nie konczy. TASM
> wyrzuca ostrzezenie "open segment" - segment otwarty, czyli nie znalazl jego
> konca.
>
> > .code
>
> deklaracja segmentu kodu
>
> > main proc
>
> poczatek procedury main
>
> > main endp
>
> koniec procedury main
>
> > END MAIN ; <---(1)
>
> koniec pliku w asemblerze. punkt wejscia programu: etykieta "main".
>
> --
> Azarien

Dobra wiem o co chodzi, tylko bylem ciekaw jak to ktos inny widzi.
Jeszcze jedna sprawa:

_TEXT segment
start:

main proc
main endp

_TEXT ends

end mian

Czemu TASM pozwala cos takiego skompilowac? (MASM nawet nie zaczyna)
Re: Z ciekawosci...
#504
Author: Wiktor S.
Date: Thu, 10 Aug 2006 12:33
46 lines
1872 bytes
> Dobra wiem o co chodzi, tylko bylem ciekaw jak to ktos inny widzi.
> Jeszcze jedna sprawa:
>
> _TEXT segment
> start:
>
> main proc
> main endp
>
> _TEXT ends
>
> end mian

> Czemu TASM pozwala cos takiego skompilowac? (MASM nawet nie zaczyna)

Powinien się wywalić na "mian", bo nie ma takiej etykiety.
Zakładając, że to literówka i tam jest "main", to dlaczego nie? Kod jest jak 
najbardziej prawidłowy.

> _TEXT segment

początek segmentu _TEXT

> start:

etykieta start

> main proc

początek procedury "main", co wiąże sie m.in. z ustawieniem etykiety "main" 
w tym miejscu (start i main staja się równoważne)

> main endp

koniec procedury main

> _TEXT ends

koniec segmentu _TEXT

> end main

koniec programu, punkt wejścia: etykieta (procedura) main.

-- 
Azarien
Re: Z ciekawosci...
#505
Author: Matuzalem
Date: Thu, 10 Aug 2006 12:55
105 lines
3635 bytes
Wiktor S. napisal(a):
> > Dobra wiem o co chodzi, tylko bylem ciekaw jak to ktos inny widzi.
> > Jeszcze jedna sprawa:
> >
> > _TEXT segment
> > start:
> >
> > main proc
> > main endp
> >
> > _TEXT ends
> >
> > end mian
>
> > Czemu TASM pozwala cos takiego skompilowac? (MASM nawet nie zaczyna)
>
> Powinien sie wywalic na "mian", bo nie ma takiej etykiety.
> Zakladajac, ze to literówka i tam jest "main", to dlaczego nie? Kod jest jak
> najbardziej prawidlowy.
>
> > _TEXT segment
>
> poczatek segmentu _TEXT
>
> > start:
>
> etykieta start
>
> > main proc
>
> poczatek procedury "main", co wiaze sie m.in. z ustawieniem etykiety "main"
> w tym miejscu (start i main staja sie równowazne)
>
> > main endp
>
> koniec procedury main
>
> > _TEXT ends
>
> koniec segmentu _TEXT
>
> > end main
>
> koniec programu, punkt wejscia: etykieta (procedura) main.
>
> --
> Azarien

Jednak nie powienie tego kompilowac (tak jak MASM) z prostej
przyczyny: main nie jest etykieta "poczatkowa" i z tego powodu
program wiesza sie zaraz po uruchomieniu.

Gdyby bylo tak jak mówisz, to, to tez powinno byc dobrze:

;------------------------------------------
_TEXT segment
start:

main proc
main endp

_TEXT ends

end moze_koniec
;------------------------------------------

A nie jest.
Definiujmy sobie byle co i pszmy odwolanie na koncu 'end cos'.
Taki przykladzik:

;------------------------------------------
_TEXT segment
start:

  mov ax, 0
  mov bx, 0
jmp short dalej ;jmps
  mov dx, 0
  xor ax, ax
dalej:
  xor bx,bx
  add ax, 2

main proc
main endp

_TEXT ends

end dalej
;------------------------------------------

W TASM kompiluje sie idealnie co wiecej program dziala, ale czy
poprawnie? odp. nie
Czemu?
Wystarczy zdebugowac to cudenko i co sie okazuje? Program rozpoczyna
swoje dzialanie od etykiety "dalej:", a wszystko to co jest "przed"
etyieta, wogule nie jest wykonane.
Jedynie gdy dodamy (TASM) LOCALS i '@@' to kompilator wypluwa ze
etykieta 'dalej' jest mu nie znana - poprawnie. MASM tego wogule nie
zaczyna kompilowac tylko pisze, ze jest nieznana etykieta (dlatego
ze 'problem' globalnych i lokalnych etykiet/danych jest tam wykonywany
automatycznie).

Pozdrawiam
Re: Z ciekawosci...
#506
Author: Wiktor S.
Date: Thu, 10 Aug 2006 17:09
57 lines
2344 bytes
> Jednak nie powienie tego kompilowac (tak jak MASM) z prostej
> przyczyny: main nie jest etykieta "poczatkowa"

I nie musi być, po END możesz podać _dowolną_ etykietę, i stanie się ona 
etykietą, od której program rozpocznie działanie.

> Gdyby bylo tak jak mówisz, to, to tez powinno byc dobrze:
>
> ;------------------------------------------
> _TEXT segment
> start:
>
> main proc
> main endp
>
> _TEXT ends
>
> end moze_koniec

a gdzie zdefiniowane masz "moze_koniec"?


> _TEXT segment
> start:
>
>   mov ax, 0
>   mov bx, 0
> jmp short dalej ;jmps
>   mov dx, 0
>   xor ax, ax
> dalej:
>   xor bx,bx
>   add ax, 2
>
> main proc
> main endp
>
> _TEXT ends
>
> end dalej
> ;------------------------------------------
>
> Wystarczy zdebugowac to cudenko i co sie okazuje? Program rozpoczyna
> swoje dzialanie od etykiety "dalej:", a wszystko to co jest "przed"
> etyieta, wogule nie jest wykonane.

Dzizas, przecież właśnie PO TO JEST parametr po end. Jak piszesz "end 
dalej", to TO ZNACZY, że program ma się rozpocząć od etykiety "dalej".
Jest to czwarty post, w którym tobie to tłumaczę.

> Pozdrawiam

popraw kodowanie!


-- 
Azarien
Re: Z ciekawosci...
#507
Author: Matuzalem
Date: Thu, 10 Aug 2006 19:13
5 lines
1562 bytes
> Jest to czwarty post, w którym tobie to tlumacze.

Kto tu komu co tlumaczy, mniejsza z tym...

Pozdrawiam
Re: Z ciekawosci...
#508
Author: Adam Wysocki
Date: Fri, 11 Aug 2006 15:08
18 lines
2087 bytes
Spinacz biurowy, Matuzalem <codemaster_@op.pl>!

> W TASM kompiluje sie idealnie co wiecej program dziala, ale czy
> poprawnie? odp. nie

Od myślenia jest programista, nie kompilator.

> Wystarczy zdebugowac to cudenko i co sie okazuje? Program rozpoczyna
> swoje dzialanie od etykiety "dalej:", a wszystko to co jest "przed"
> etyieta, wogule nie jest wykonane.

Co w tym dziwnego?

-- 
http://www.chmurka.net/ :: FidoNet 2:480/138 :: GG 1234 :: Grono 123
Licencja SWL nr SP5-25-0730 :: QTH Locator KO02MF :: GSM 514 710 213
niedawno wróciłam z imprezy i przytomnieję sobie w pracy (C) meganka
W prezencie dla spamerów: http://polish-973123847688.spampoison.com/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads