Home | Polski | |
Go back | Previous | Next |
(Note: This page is available in Polish language only. If you would like it translated to English, please let me know. Sorry for the inconvenience) |
O jednolitą terminologię “Adresowanie” W normie PN-71/T-01016 przez adresowanie rozumie się określenie części pamięci komputera albo innego źródła lub miejsca przeznaczenia danych, za pomocą adresu. Natomiast adres jest to symbol lub numer identyfikujący rejestr, komórkę pamięci lub urządzenie. Po wnikliwym przeanalizowaniu treści pierwszej z tych definicji nasuwają się dwie uwagi. Po pierwsze – łatwo zauważyć pewną jej nadmiarowość, która nie jest chyba konieczna. Ogólnie wiadomo, że adresowanie dotyczy nie tylko pamięci komputera; i to prawdopodobnie chcieli wyłazić autorzy słowami: “... albo innego źródla lub miejsca przeznaczenia danych”. W takim razie włączenie do treści definicji słów “części pamięci komputera” jest zbędne, ponieważ element pamięciowy jest szczególnym przypadkiem źródła lub miejsca przeznaczenia danych. Zatem, pomijając wymienione słowa niczego nie tracimy na precyzji, a zyskujemy na zwięzłości wypowiedzi. Uproszczona w ten sposób definicja brzmiałaby następująco: adresowanie jest to określenie źródła lub miejsca przeznaczenia danych za pomocą adresu. Jednakże nie jest dostatecznie jasne – i to jest druga uwaga – na czym polega owo określenie miejsca pochodzenia lub przeznaczenie danych. Z praktyki wiemy, że może to polegać na takim wyznaczeniu adresu (np. przez obliczenie go), aby był on podany w postaci jawnej, lub też – na fizycznym, tzn. układowym przesłaniu go w określone miejsce. Pewnym ułatwieniem w precyzyjnym rozumieniu pojęcia adresowanie jest określenie podane w normie ISO 2382, według której termin adresować znaczy odwoływać się do urządzenia lub elementu danych za pomocą adresu. Zatem w definicji tej podkreśla się raczej fizyczny proces odwoływania się do urządzenia. Niewielu autorów zwraca uwagę na taką dwuczęściowość procesu adresowania. Jednym z nich jest D. D. Klingman, który w książce pt. “Projektowanie systemów mikroprocesorowych” (WNT, Warszawa, w druku), oddziela sam sposób tworzenia adresu od dostarczania tego adresu podsystemowi wykonawczemu. Fakt ten można uwzględnić rozszerzając nieco wyżej podaną definicję adresowania i formułując ją bardziej precyzyjnie w sposób następujący: adresowanie jest to określenie i odwołanie się do źródła lub miejsca przeznaczenia danych za pomocą adresu. Różnica między określaniem źródła danych za pomocą adresu (tworzenie adresu) a odwoływaniem się do tego źródła (dostarczaniem adresu) staje się wyraźniejsza, jeśli się zważy, że tworzenie adresu następuje zazwyczaj w fazie tłumaczenia programu, a dostarczenie adresu podsystemowi wykonawczemu – w fazie wykonawczej. Do pierwszej części tego procesu odnosi się bardzo ważne pojęcie czasu wiązania (ang. binding time), dla którego, niestety, nie stworzono dotychczas obowiązującej definicji. Według normy ISO 2382 wiązanie (adresu) polega na skojarzeniu adresu z symbolem lub etykietą w programie komputerowym; mówiąc najprościej – czas wiązania określa moment skojarzenia adresu z symbolem. Zagadnienia te nie ograniczają się jednak tylko do adresowania. W tej samej normie ISO podano ogólniejszą definicję wiązania (zmiennej) jako przypisanie wartości zmiennej. Interesująco omawia tę problematykę w swojej książce P. Wegner (Języki programowania, struktury informacji i organizacja maszyny cyfrowej, PWN, Warszawa, 1979), określając czas wiązania danego zbioru atrybutów struktury informacyjnej jako przedział czasu, w którym dany zbiór atrybutów jest ustalony (związany). Istnieje wiele sposobów adresowania, zarówno w sensie określania adresu, jak i w sensie odwoływania się za pomocą adresu. Ponieważ sposoby dostarczania adresu podsystemowi wykonawczemu zależą w znacznej mierze od technologii, a dotychczasowy jej gwałtowny rozwój nie sprzyja ustalaniu terminologii, skupimy uwagę na terminach odnoszących się do określania adresu. Sposoby adresowania związane z określeniem źródła lub miejsca przeznaczenia danych za pomocą adresu nazywa się trybami adresowania (ang. addressing modes). Choć nie jest to termin ostatecznie ustalony, głosowałbym za jego przyjęciem. W języku potocznym wyraz tryb oznacza ustalony porządek załatwiania określonych spraw, sposób postępowania, a w naszym przypadku – sposób postępowania przy określaniu adresu. Zanim przejdziemy do omówienia różnych typów adresowania, podamy kilka określeń podstawowych. Ponieważ na ogół adresowanie wiąże się z określaniem adresów argumentów operacji, warto wiedzieć, że w terminologii polskiej argument (ang. operand, argument) jest to element danych, na którym jest wykonywana operacja; natomiast nie ma w języku polskim terminu operand. Format rozkazów (ang. instruction format) określających operacje jest dobierany tak, aby mieścił informacje dotyczące argumentów. Przykładowo, rozkaz dwuargumentowy ma część adresową składającą się z pola źródłowego (ang. source field) i pola wynikowego (ang. destination field), na których znajdują się informacje określające sposób dostępu do argumentów: źródłowego (ang. source argument) i wynikowego (ang. destination argument), tzn. sposób utworzenia odpowiednich adresów, a więc – tryb adresowania. Podczas wykonania rozkazu dwuargumentowego adresowanie dotyczy pobrania dwu argumentów ze źródła i przesłania wyniku do miejsca przeznaczenia. W tym sensie celem adresowania jest zarówno źródło, jak i miejsce przeznaczenia danych. Zatem rozpowszechnione w literaturze polskiej określenie argument docelowy (ang. destination argument) nie jest poprawne. Istnieje znaczna różnorodność trybów adresowania i jeszcze więcej ich nazw. Najbardziej naturalne jest adresowanie bezpośrednie (ang. direct addressing), które polega na tym, że część adresowa rozkazu zawiera bezpośrednią informację o argumencie. Może to być jego adres bezpośredni, tzn. adres wyznaczający komórkę pamięci, której zawartość ma być traktowana jako argument operacji (według PN-71/T-01016). Jeżeli informacja ta określa rejestr, w którym znajduje się argument, a tak jest często, to niekiedy ten tryb adresowania nazywa się rejestrowym. Zdarza się jednak, że część adresowa zawiera sam argument operacji. Ponieważ w tym wypadku nie zachodzi potrzeba adresowania, ten tryb nazywa się literalnym (ang. literal). Tryb pośredni (ang. indirect mode) jest to taki tryb adresowania, w którym zawartość komórki określonej przez podstawową informację adresową jest traktowana także jako adres (określenie zgodne z normą PN-71/T-01016). Adresowanie pośrednie może być wielopoziomowe (ang. multilevel addressing), tzn. adres A1 znajdujący się w komórce A0, wyznaczonej przez informację adresową, nie musi być adresem miejsca przechowywania danych, lecz może być adresem miejsca przechowywania następnego adresu A2, itd. Liczba rozumianych w ten sposób poziomów adresowania jest, oczywiście, ograniczona. Nowoczesne procesory skonstruowane są tak, aby zapewnić możliwość zmiany zawartości wybranego rejestru lub komórki pamięci o 1 lub 2 bez konieczności wykonywania operacji arytmetycznych, a jedynie przez odwołanie się do tego elementu pamięciowego (jego zaadresowanie). Jest to bardzo wygodne w praktyce i umożliwia używanie tych elementów jako wskaźników, indeksów itp. Tę czynność zwiększania zawartości przed wykonaniem operacji oraz zmniejszania zawartości po wykonaniu operacji, określa się w języku angielskim zwięźle jako incrementation i decrementation. Choć w języku polskim określenie te są nie uznane, wydaje mi się, że należałoby je wprowadzić nazywając odpowiednie tryby adresowania: adresowaniem bezpośrednim (pośrednim) z inkrementacją (dekrementacją) lub, jeżeli to okaże się lepsze, adresowaniem bezpośrednim (pośrednim) inkrementalnym (dekrementalnym). Bardzo ważnym trybem adresowania jest adresowanie indeksowe (ang. index addressing – często niepoprawnie tłumaczone jako adresowanie indeksowane) należące do tzw. trybów rachunkowych (ang. computed addressing). Adresowanie indeksowe lub, jak się często mówi, po prostu indeksowanie polega na określeniu adresu argumentu przez dodanie pewnej wartości X (zwanej indeksem lub przemieszczeniem) do adresu określonego w trybie bezpośrednim. W istocie omówione wyżej tryby adresowania inkrementalnego są szczególnym przypadkiem adresowania indeksowego z przemieszczeniem ograniczonym do l lub 2 (-l, -2). Połączenie trybu indeksowego z pośrednim może nastąpić dwojako. Jeżeli określenie adresu argumentu następuje najpierw na drodze pośredniej, a następnie przez dodanie przemieszczenia X, to takie adresowanie nazywa się pośrednim adresowaniem indeksowym (ang. indirect indexed adressing) dla zaznaczenia, że podstawowy jest tu tryb indeksowy. Jeżeli natomiast, adres służący do wyznaczenia argumentu na drodze pośredniej został uzyskany po uprzednim dodaniu przemieszczenia do adresu określonego przez pierwotną informację adresową (adresu bezpośredniego), to ten tryb adresowania nazywamy indeksowym adresowaniem pośrednim (ang. indexed indirect addressing) dla zaznaczenia, że podstawowy jest tu tryb pośredni. Do głównych trybów adresowania stosowanych w komputerach należą tryby związane z wykorzystaniem licznika rozkazów. Ponieważ najczęściej po pobraniu rozkazu z pamięci zawartość licznika rozkazów jest zwiększana w taki sposób, aby wskazać adres następnego rozkazu, można wykorzystać ten fakt do adresowania danych. Jeżeli w komórce następującej po komórce zawierającej rozkaz znajduje się adres bezwzględny argumentu, to mó-wimy o adresowaniu bezwzględnym (ang. absolute addressing). Podobnie ma się sprawa z adresowaniem względnym (ang. relative addressing) i względnym pośrednim (ang. indirect relative addressing). Trudniej natomiast nazwać tryb adresowania, w którym za rozkazem znajduje się sam argument. Jeżeli przez tryb adresowania rozumiemy sposób tworzenia adresu, jak w tym przypadku, to termin adresowanie natychmiastowe, będący dosłownym odpowiednikiem angielskiego określenia immediate addressing, jest niepoprawny językowo. Ponieważ termin adresowanie bezpośrednie nie może być użyty, proponuje skorzystanie z faktu, że argument znajduje się “wprost” za rozkazem. Jednakże sformułowanie adresowanie wprostne byłoby nieco archaiczne, zaproponowałbym, zatem, używanie terminu adresowanie proste (tryb prosty). Źródło: “Informatyka,” nr 1/1981, str. 37-38 |
O jednolitą terminologię “Adresowanie” Niektóre terminy związane z adresowaniem omówiliśmy w numerze 1/81. Ponieważ istnieją różne poglądy na tematy dotyczące ich używania, nie należy uważać, że sprawa jest już zamknięta. Przedmiotem sporu może być sam termin adresowanie. Musi on wzbudzać wątpliwości niektórych autorów, skoro próbują, i to w najnowszych książkach, używać innego – adresacja. Niestety, jest to błąd językowy. Przypomnijmy, że termin adres pochodzi z języka potocznego, w którym samo określenie miejsca przeznaczenia przesyłki (określenie adresu) nazywa się adresowaniem. Nie ma więc powodu, aby w informatyce mówić adresacja. Jest to czynność, a czynność trudno wyrazić inaczej jak rzeczownikiem odsłownym, tym bardziej, że nie istnieje słowo angielskie “addressation”. Tego rodzaju błędy językowe, np. rozpowszechnienie (także w informatyce) słowa kompletacja zamiast kompletowanie, są piętnowane przez językoznawców (por. W. Cienkowski: Język dla wszystkich; cz. II, Książka i Wiedza, Warszawa, 1980, str. 147). Wypada więc uznać używanie słowa adresacja za nieuzasadnione i traktować jako błąd językowy. Znaczne, choć może nieuzasadnione wątpliwości budzi we mnie sposób definiowania poszczególnych trybów adresowania, spotykamy w różnych słownikach polskich, a także w Polskich Normach, przejęty zresztą z norm ISO. Polega on na tym, że adresowanie A-te (np. pośrednie) określa się jako metodę adresowania za pomocą adresu A-tego (w tym przypadku – pośredniego). Tymczasem najważniejszą cechą adresu komórki jest jego jednoznaczność. Adres jest jeden, a więc różne jego postacie (nie tylko – końcowa, tzn. po modyfikacjach) nie powinny określać kilku różnych trybów adresowania. Wydaje mi się, że w rzeczywistości jest odwrotnie, niż to wynika z definicji słownikowych. Nazwy metod adresowania pochodzą od sposobów wykonywania tej czynności, a nie od rodzajów adresów, natomiast nazwy adresów biorą się od trybów adresowania, ponieważ są względem nich wtórne. Oczywiście, istnieją rodzaje adresów, które nie są związane z żadnym trybem adresowania. W tych przypadkach nazwy pochodzą od innych cech charakterystycznych. Przykładowo, adresem symbolicznym nazywa się adres wyrażony w symbolice konkretnego języka programowania (PN-71/T-01016). Nieco mniej banalna jest definicja adresu efektywnego (ang. effective address). Według normy polskiej adres efektywny jest to adres uzyskany przez przekształcenie adresu pierwotnego w sposób jednoznacznie określony dla danego komputera i języka programowania, i który – dodajmy za normą ISO-2382 – nie wymaga żadnej modyfikacji przed wykonywaniem rozkazu. W rzeczywistości podane określenie dotyczy tej samej komórki pamięci, co terminy: adres bezpośredni, bezwzględny i rzeczywisty, a więc komórki, w której znajduje się argument. Wielość nazw jest związana z kontekstem, w jakim o tym argumencie się mówi. Zwróćmy uwagę, że takie terminy, jak adres pośredni i adres względny mają także rację bytu, ponieważ odnoszą się do komórek pośredniczących w określeniu argumentu, choć same adresy nie wystarczają do takiego określenia. Z adresowaniem względnym związane jest pojęcie adresu podstawowego, inaczej – bazowego (ang. base address), którego określenie raczej nie powinno prowadzić do kontrowersji. Jest to liczba używana jako odniesienie przy obliczaniu adresu podczas wykonywania programu (norma polska i międzynarodowa). Do obliczeń wykorzystuje się tu tzw. przemieszczenie (ang. displacement, offset), tj. liczbę, jaką należy dodać do adresu podstawowego, aby otrzymać – zmodyfikowany. Na ogół przemieszczenie dotyczy obliczania nie tylko adresów danych, lecz także adresów rozkazów. Bardzo popularnym rozkazem jest tzw. skok krótki, w którego słowie rozkazowym znajduje się informacja o odległości skoku. Jest to kilkubitowe przemieszczenie dodawane do adresu komórki zawierającej ten rozkaz, w celu wyznaczenia adresu rozkazu, do którego należy wykonać skok. Zwróćmy uwagę, że w rzeczywistości następuje tu przemieszczenie wzdłuż obszaru zajmowanego przez program. Często zachodzi potrzeba przemieszczenia całego programu w określonym obszarze pamięci. Może tak być np. w wypadku wprowadzania programu do pamięci (ładowania) lub łączenia modułów programu już załadowanego. Wtedy należałoby mówić raczej o relokacji (ang. relocation), utrzymując termin przemieszczenia na oznaczenie pojęcia omówionego powyżej. Jednakże program poddający się zmianie położenia bez konieczności przeadresowania, tj. bez zmian adresów, a więc program niezależny od położenia (ang. position independent) można by nazywać przesuwnym, a niekoniecznie relokowalnym (ang. relocatable), mimo że termin przesunięcie jest zarezerwowany na oznaczenie odpowiednich rozkazów. Wracając do adresowania warto podać regułę, wg której można jednoznacznie określić, jaki tryb jest podstawowy. Przy złożonych metodach adresowania za tryb podstawowy wypada uznać ten, który określa właściwy dostęp do danych lub rozkazów (do komórki zawierającej je). Przykładowo, gdy na adresowanie składają się dwa tryby: indeksowy i pośredni (por. INFORMATYKA, nr 1/1981), należy powiedzieć – indeksowe adresowanie pośrednie, jeżeli dane są zaadresowane pośrednio, natomiast (pośrednie) adresowanie indeksowe, jeśli są zaadresowane przez indeksowanie. Zatem przy kilku trybach adresowania zastosowanych łącznie o nazwie podstawowej powinna decydować końcowa faza dostępu do adresowanej komórki. Często zdarza się, że rozkazy nie zawierają żadnej informacji adresowej, tzn. ani adresu lub innego sposobu dostępu, ani argumentu, a mimo to następuje wykonanie operacji na danych. Ten rodzaj adresowania proponujemy określić mianem adresowanie niejawne, a nie – implikowane (ang. implied addressing), jak się spotyka. Przykładem, choć rzadko spotykanym, adresowania niejawnego jest tzw. adresowanie powtarzalne (ang. repetitive addressing), które polega na tym, że operacja jest wykonywana na argumentach poprzedniego rozkazu. Na zakończenie podkreślmy wyraźnie, że choć słowo adres pochodzi z języka potocznego, to w informatyce adres jest na ogół samą liczbą. Stąd też często spotykane połączenie wyrazowe duży adres, większy adres, itd., należałoby uznać za poprawne, podobnie jak – adres parzysty i nieparzysty. Niekiedy spotyka się też określenie adresy górne i dolne, co wynika ze sposobu organizacji pamięci. Natomiast, nie ma uzasadnienia sformułowanie wysoki (niski) adres. Źródło: “Informatyka,” nr 3/1981, str. 39 | |
Previous | Next |
Page added on 24th May 2003. Copyright © 2002-2005 Marcin Wichary |
Printable version | Contact | Site map |