Ready/Run

Takie sobie archiwum listingów ze starych magazynów komputerowych


Przeszukiwanie pamięci
  • Język programu: Basic
  • Platforma: Atari XE/XL
  • Kod zamieszczono w Bajtek 12/1988
  • Autor listingu: Krzysztof Kołodziej
  • Listing nadesłał: Amarok

Stan listingu:

0
Listing niesprawdzony - świeżo po OCR lub przepisaniu

Podczas pisania programów w BASIC-u, w których wykonujemy operacje na zmiennych tekstowych, zachodzi czasami konieczność wyszukiwania w nich pewnych podciągów znakowych.
Również w Basicowych monitorach pamięci pomocną opcją może być możliwość wyszukiwania umieszczonych w pamięci mikrokomputera sekwencji bajtów. Napisanie procedury, która by realizowała powyższe czynności w języku Basic jest czynnością prostą, ale czas jej wykonywania zwłaszcza przy przeszukiwaniu dużych obszarów pamięci jest zbyt długi, co pogarsza efektywność pisanych programów. W związku z tym proponuję wykorzystanie do tych celów zamieszczonego poniżej programu.
Program ten zawiera w liniach 80—110 dane do relokowanej procedury maszynowej, które dla wygody użytkownika umieszczane są przez program w zmiennej tekstowej AS. Po bezbłędnym wpisaniu programu i jego uruchomieniu (dla bezpieczeństwa zapisać program na taśmie lub dyskietce) tworzona jest zmienna tek-
stowa A$ zawierająca naszą procedurę w liniach 10 i 20, pozostałe linie programu są kasowane. Po zapisaniu tych linii programu na nośniku zewnętrznym instrukcją LIST, możemy za pomocą instrukcji ENTER dołączać je do własnych programów. Wywoływanie procedury:
1. W przypadku wyszukiwania sekwencji bajtów bezpośrednio w pamięci mikrokomputera postać wywołania jest następująca:
X = USR(ADR(A$),START,KONIEC, ADR(B$),LEN(B$))
gdzie B$ jest zmienną tekstową, w którą należy wpisać wcześniej wyszukiwaną sekwencję bajtów w znakach ATASCII (maksymalna długość 255 znaków);
START, KONIEC — są to adresy odpowiednio początku i końca przeszukiwanego przez procedurę obszaru pamięci.
Pod zmienną X procedura podstawia adres pierwszego bajtu odnalezionej w pamięci sekwencji. W przypadku jej nieodnalezienia podstawiana jest pod X wartość zero. Uwaga! Wartość zero podstawiana jest pod X także, gdy sekwencja rozpoczyna się od adresu 0000.
2. W przypadku wyszukiwania sekwencji bajtów w zmiennej tekstowej postać wywołania i znalezienia początku jej położenia jest nieco bardziej złożone. Jako adres startu wyszukiwania (START) podstawiamy adres przeszukiwanej tablicy np. dla tablicy S$ podstawiamy ADR(SS), adresem końca zaś w tym przypadku będzie ADR(S|) + LEN(S$)-1. Postać wywołania procedury może być więc następująca:
X = USR(ADR(A$),ADR(SS),ADR(SS) + LEN(SS) -1 ,ADR(B$),LEN(BS))
Po tym wywołaniu należy jako pierwszą wykonać następującą instrukcję:
X = X-ADR(S$)+1
Jeśli X<0 to przeszukiwana tablica nie zawiera danej sekwencji, gdy zaś X>0 to wartość X wskazuje położenie szukanej sekwencji w zmiennej S$.
Na zakończenie chcę powiedzieć, że czas przeszukiwania przez procedurę obszaru pamięci 64KB wynosi nieco ponad 2 sekundy, zaś w przypadku przeszukiwania
zmiennych tekstowych procedura działa szybciej niż instrukcja FIND w Basicu XL.