Przeszukiwanie Pamięci

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 tekstowa A$ zawierająca naszą procedurę w liniach 10 i 20, pozostałe linie programu są kasowane. Po zapisaniu tyci) linii programu na nośniku zewnętrznym instrukcją LIST, możemy za pomocą tnstrukcji 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)1 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.

Krzysztof Kołodziej