Thread View: pl.comp.lang.asm
12 messages
12 total messages
Started by Matuzalem
Mon, 07 Aug 2006 23:09
Z ciekawosci...
Author: Matuzalem
Date: Mon, 07 Aug 2006 23:09
Date: Mon, 07 Aug 2006 23:09
53 lines
1928 bytes
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...
Author: Wiktor S.
Date: Tue, 08 Aug 2006 01:11
Date: Tue, 08 Aug 2006 01:11
52 lines
2061 bytes
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...
Author: Wiktor S.
Date: Tue, 08 Aug 2006 01:12
Date: Tue, 08 Aug 2006 01:12
52 lines
2055 bytes
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...
Author: Matuzalem
Date: Tue, 08 Aug 2006 09:16
Date: Tue, 08 Aug 2006 09:16
24 lines
1595 bytes
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...
Author: Remek
Date: Tue, 08 Aug 2006 23:40
Date: Tue, 08 Aug 2006 23:40
8 lines
1156 bytes
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...
Author: Wiktor S.
Date: Wed, 09 Aug 2006 09:20
Date: Wed, 09 Aug 2006 09:20
81 lines
2546 bytes
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...
Author: Matuzalem
Date: Wed, 09 Aug 2006 10:33
Date: Wed, 09 Aug 2006 10:33
98 lines
3215 bytes
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...
Author: Wiktor S.
Date: Thu, 10 Aug 2006 12:33
Date: Thu, 10 Aug 2006 12:33
46 lines
1872 bytes
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...
Author: Matuzalem
Date: Thu, 10 Aug 2006 12:55
Date: Thu, 10 Aug 2006 12:55
105 lines
3635 bytes
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...
Author: Wiktor S.
Date: Thu, 10 Aug 2006 17:09
Date: Thu, 10 Aug 2006 17:09
57 lines
2344 bytes
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...
Author: Matuzalem
Date: Thu, 10 Aug 2006 19:13
Date: Thu, 10 Aug 2006 19:13
5 lines
1562 bytes
1562 bytes
> Jest to czwarty post, w którym tobie to tlumacze. Kto tu komu co tlumaczy, mniejsza z tym... Pozdrawiam
Re: Z ciekawosci...
Author: Adam Wysocki
Date: Fri, 11 Aug 2006 15:08
Date: Fri, 11 Aug 2006 15:08
18 lines
2087 bytes
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