kategoria: Asembler
[#1] dos.library - mały problem z AsmOne
Witam serdecznie. Rozpocząłem dzisiaj zabawę/naukę z asemblerem AsmOne, ale mam mały problem. W jednym z kursów zawartych w Amiga 6/1996 jest wstępniak o operacjach na plikach. Problem w tym, że przepisałem listing i przy asemblacji wywala mi błąd:

**Illegal Operator
39 DosName dc.b "dos.library",0

domyślam się, że nie umie znaleść właściwej biblioteki, ale czy dos.library jest oryginalnie w WB 3.1 (WBLite)?
Jeśli nie, to skąd ją można pobrać?
[#2] Re: dos.library - mały problem z AsmOne

@zajebutek, post #1

dos.library jest w Kickstarcie, nie trzeba pobierać nic, ani instalować dodatkowo.

Twój problem wygląda mi raczej na jakiś błąd składniowy... Gdybyś wkleił cały listing to byłoby łatwiej go zlokalizować ;).
[#3] Re: dos.library - mały problem z AsmOne

@zajebutek, post #1

Może spróbuj:

po "DosName" enter
potem tabulator i "dc.b"

Ostatnia aktualizacja: 23.12.2012 00:32:00 przez Kustosz
[#4] Re: dos.library - mały problem z AsmOne

@strim, post #2

Słaba jakość, bo to skan z czasopisma, błędu w przepisanym listingu nie mam, sprawdzałem chyba z 20 razy. Jest tylko jedna różnica, u mnie linia z DosName dc.b "dos.library",0 wstawiona jest w nowej lini po RTS, a nie w tej samej jak w listingu.




Zauważyłem, że po odznaczeniu ";" linijki z DosName... wyskakuje mi identyczny błąd z kolejną linią kodu (jak jakąś odznaczę jako komentarz używając ";" to automatycznie błąd dotyczy kolejnej linii), tak jakby były one częścią kodu, a nie tylko listą danych.



Ostatnia aktualizacja: 23.12.2012 00:54:38 przez zajebutek

Ostatnia aktualizacja: 23.12.2012 00:55:10 przez zajebutek
[#5] Re: dos.library - mały problem z AsmOne

@zajebutek, post #4

Przejżałem pozostałe listingi w tym numerze Amigi i poodznaczałem ostatnie linijki tak samo, jak robi się to z funkcjami

DosName: dc.b "dos.library",0

dodałem ":" po wszystkich etykietach pod koniec listingu, ale teraz wyskakuje mi przy asemblacji "Workspace Memory Full" - pamięć ustawiam różnie - 200kB, 512kB, 800kB ale nic to nie daje
[#6] Re: dos.library - mały problem z AsmOne

@zajebutek, post #5

Sprawdzałeś moją sugestię z postu nr 3 ?

Ostatnia aktualizacja: 23.12.2012 01:04:28 przez Kustosz
[#7] Re: dos.library - mały problem z AsmOne

@Kustosz, post #6

tak, nic to nie dało :(
[#8] Re: dos.library - mały problem z AsmOne

@zajebutek, post #7



Ostatnia aktualizacja: 23.12.2012 01:18:35 przez Kustosz
[#9] Re: dos.library - mały problem z AsmOne

@Kustosz, post #8

Screeny z WinUae nic mi nie dają, bez obrazy...
[#10] Re: dos.library - mały problem z AsmOne

@zajebutek, post #9

Zwróć zatem może uwagę na rodzaj cudzysłowu użytego przez kolegę.....
[#11] Re: dos.library - mały problem z AsmOne

@*y, post #10

Próbowałem obu, zero efektu, w innym listingu używałem zwykłego " przy bibliotekach i nie było kłopotu. Dopiero po wstukaniu tego ostatniego zaczęły się schody. Kombinowałem też z ustawieniami środowiskowych i samego asemblera (wyłączyłem : labels ), ale jak na razie jedyny efekt to:

Pass 1..
** Workspace Memory Full
** End of File

i tyle różnicy...
[#12] Re: dos.library - mały problem z AsmOne

@zajebutek, post #11

zauważyłem cosik jeszcze, podczas próby debugowania L-Amiga+SHIFT+D komp się wiesza. Dodatkowo jak tylko chcę zwiększyć workspace, pokazuje mi nieziemskie liczby przy długości kodu:

Workspace.... 263168
Source... 896
Label Pointers...20480
Label... 796
Debug... 200
Code... 2053991140 <-- (start:$0011cfd0 end:$7a7f3ab4)

tylko przy tym listingu robi się taki syf...
[#13] Re: dos.library - mały problem z AsmOne

@zajebutek, post #12

Witam,

Zacznijmy od samego początku.
1. Na jakiej maszynie odpalasz Asm-One. interesuje mnie czy to jest realna maszyna czy emulator
2. Którą wersję Asm-One'a uruchamiasz.

Pozdrawiam
[#14] Re: dos.library - mały problem z AsmOne

@zajebutek, post #12

A co masz w pliku moj_dos.i ???
[#15] Re: dos.library - mały problem z AsmOne

@asman, post #13

Goła Amiga 1200 - nie emu. W pliku mydos.i zapisane są komendy dyskowe - otwieranie/zamykanie plików, uchwyty do okna i pliku itd. ponoć są to instrukcje zawarte już w jakimś pliku INCLUDE (nie wiem w którym), ale w listingu programu koleś sam ten plik stworzył, żeby wytłumaczyć poszczególne funkcje. Jak będę w domu to zlinkuję go.

Wczoraj zauważyłem mały problem, a mianowicie wyciek pamięci (nie wiem gdzie w tak krótkiej procedurce mogło się to przytrafić). Podczas debugowania - debugger leci w nieskończoność, a w końcu wiesza Amigę. W debugerze program zajmuje 2MB?!? Nie wiem co jest.
[#16] Re: dos.library - mały problem z AsmOne

@zajebutek, post #1

To teraz ja zacznę od początku :)

Błąd Illegal Operator może się pojawić gdy przed DosName postawisz spację ( kilka spacji ). Sprawdź to. Label (etykieta) musi być od pierwszej kolumny. Chyba że ustawiłeś opcję "Label :", jeśli tak zrobiłeś, to wtedy każda etykieta musi być zakończona znakiem dwukropka.
[#17] Re: dos.library - mały problem z AsmOne

@asman, post #16

Doszedłem do czegoś innego. Nie wiem czemu czasem debugger wieszał Amigę. Nawet przy prostym kodzie typu:

lea 4,a1
move.l a1,d0
rts

(nic nie robiący kod, ale wieszał debuggera)

Wczoraj kole 3 w nocy zauważyłem, że:

jsr _LVOOpenLibrary (a6)

powinno w d0 zwrócić jakby "uchwyt" do otwartej biblioteki, jednak w debuggerze d0 pozostawało puste, dopiero po 20 minutach udało mi się to naprawić. Nie wiem, czy problemem nie jest to, że kod pisany był pod kick 1.3, a ja bawię się na 3.0, tak samo wersja assemblera jest inna niż w poradniku. Dzisiaj po kolacji pogrzebię jeszcze i zobaczymy czy ruszy :)
ale dzięki za pomoc i Wesołych Świąt :)

Ostatnia aktualizacja: 24.12.2012 16:27:26 przez zajebutek
[#18] Re: dos.library - mały problem z AsmOne

@zajebutek, post #17

Z tego co pamiętam to mi też się wieszała jakaś wersja Asm-One przy wchodzeniu do debuggera, zmiana Asm-One'a pomogła ( nie pamiętam już jaka to była wersja ). W każdym razie można też używać AsmPro - tam nie doświadczyłem problemów z debuggerem.

Napisz jaką wersję AsmOne'a używasz i wklej kawałek kodu to wtedy obadamy.

Pozdrawiam i Wesołych.
[#19] Re: dos.library - mały problem z AsmOne

@asman, post #18

Ostatnie 2 dni na AsmPro, ale też się wieszał. W każdym bądź razie dałem radę. Temat do zamknięcia.

Dzięki za pomoc.
[#20] Re: dos.library - mały problem z AsmOne

@zajebutek, post #19

To co w końcu było źródłem wieszania, kompilator czy program w nim?
[#21] Re: dos.library - mały problem z AsmOne

@kjb666, post #20

Problemów znalazłem kilka:
1) ds.b "Twoje imie brzmi: " zmieniłem na dc.b 'Twoje imie brzmi: ',0
2) przy próbie zapisu danych do pliku 'DH1:AsmPro/Source/nazwa_pliku' program się wieszał, zmieniłem scieżkę na samą nazwę pliku, a asm sam zapisał ją w katalogu Source i program przestał się wieszać
3) łańcuchy tekstowe nie zakończone były 0, więc po małej poprawce kod ruszył
4) w jednym miejscu przy zapisie danych do pliku, do d1 wprowadzono uchwyt do CLI, po zmianie na uchwyt do pliku program ruszył i już się nie wieszał

Głównym problemem były jednak źle zakończone łańcuchy tekstowe, program wtedy pobiera taki łańcuch, aż nie napotka zera, bez tego na końcu program leciał w nieskończoność.

Wyglądało to tak, jakby autor kursu w Amidze wpisywał kod programu z głowy, bez sprawdzenia poprawności i działania (bo nie sądzę, żeby p. Bartek Pampuch walnął takie proste błędy, widziałem jego osiągnięcia i głowę do programowania, więc to raczej błąd przy wprowadzaniu listingu do magazynu Amiga)
Pozdrawiam.

Ostatnia aktualizacja: 25.12.2012 14:51:03 przez zajebutek
[#22] Re: dos.library - mały problem z AsmOne

@zajebutek, post #21

Program wykorzystuje procedurę DOS'u >>Write<<, a ona nie wymaga zera na końcu łańcucha tylko jako argumentu jego długość więc nic "nie błądziło by po pamięci". Program się "wieszał" bo debuger nie otwiera okna >>output<< więc nie można było z tego okienka korzystać przy wypisywaniu i zapisie tekstów. Wytłumacz też dlaczego kod wynikowy był taki długi.

Ostatnia aktualizacja: 25.12.2012 22:41:00 przez *y
[#23] Re: dos.library - mały problem z AsmOne

@*y, post #22

Łańcuch miał na końcu zero, bo oprócz wykorzystywania go jako parmetru d2 w funkcji Write, używałem go też jako zwykłego łańcucha, który wyświetlałem na ekranie, więc 0 na końcu było potrzebne.

Wydaje mi się (jestem prawie pewien), że błąd z mojej strony pochodził z tego:

move.l Bufor,d2

a powinno być

move.l #Bufor,d2

zamiast adresu, pod którym leży zmienna Bufor, wprowadziłem przez niedopatrzenie jej zawartość, co powodowało, że dane odczytane z klawiatury czy pliku wpisywane były pod ten błędny adres. To tutaj program musiał zapisywać dane w jakichś ważnych dla systemu obszarach pamięci, co powodowało wariowanie systemu (np. w jednym przypadku po uruchomieniu programu, nagle stacja dysków zaczęła wariować, następnie obraz się rozstroił tak, jakby odświeżany był z inną częstotliwością, aż w końcu Amiga resetowała się)

Jak będę w domu, to ewentualnie wrzucę listing na stronkę, jest już nieco rozbudowany, posiada funkcję "szyfrowania" i "odkodowywania" zawartości pliku. Programik nie jest żadną rewelacją, a po prostu małym ćwiczeniem z funkcjami biblioteki dos.library, ale działa :). Nie dodałem tylko żadnej kontroli błędów (np. sprawdzianie, czy plik o podanej nazwie istnieje), ale to zabawa na dzisiejszą nockę :)


Aha, problem był jeszcze jeden. Przepisując program od nowa, linijka po linijce i testując praktycznie każdą zmianę, zapomniałem pozamykać wszystkich otwartych dojść do plików itd.
Wyglądało to tak, że program otwierał plik i kończył swoje działanie (sprawdzałem, czy plik zostanie otwarty), niestety bez resetu takie dojście nie jest zamykane, więc plik był niedostępny dla programu po jego kolejnym uruchomieniu (pliku nie dało się nawet usunąć), ale po dodaniu części typu:

move.l FileBase,d1
jsr _LVOClose(a6)

program zaczął funkcjonować.

Ostatnia aktualizacja: 26.12.2012 15:47:09 przez zajebutek
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem