Strona główna | English English
Attached
Powrót | Poprzedni | Następny

O jednolitą terminologię

“Instrukcja” czy “rozkaz”?

Odpowiedź na pytanie, którego z tych określeń używać, nie jest oczywista nawet dla specjalistów. W wielu publikacjach termin instrukcja jest używany wymiennie z terminem rozkaz. Zakresy znaczeniowe obu terminów z pewnością zachodzą na siebie. Sytuację pogarsza fakt, że w informatyce wyraz instrukcja nie jest dokładnym odpowiednikiem angielskiego określenia instruction.

Według normy PN-71/T-01016 instrukcja (ang. statement) jest to wyrażenie języka źródłowego określające pewną operację, a rozkaz (ang. instruction) jest to ciąg znaków inicjujących i określających częściowo lub całkowicie operację. Można stąd wnioskować, że termin instrukcja dotyczy języka, a rozkaz nie; lecz czy wyrażenie języka nie musi być ciągiem znaków w tym języku?

Wątpliwość wyjaśnia norma ISO-2382 (obowiązująca także w Polsce), która nie różnicuje pod tym względem obu terminów. Według tej normy instrukcja (ang. statement) jest to w języku programowania wyrażenie znaczące, które może opisywać lub określać operacje i jest zwykle zupełne w kontekście tego języka, a rozkaz (ang. instruction) oznacza w języku programowania wyrażenie znaczące, które określa pojedynczą operację i – jeżeli istnieją – jej argumenty.

Z podanych określeń wynika, że istotna różnica między instrukcją a rozkazem polega na większej ogólności instrukcji. Według normy ISO-2382 instrukcja dotyczy wszystkich operacji wobec pojedynczej operacji określanej przez rozkaz, a według normy PN-71/T-01016 – pełnej operacji wobec częściowego określenia operacji przez rozkaz. Zauważalna niezgodność wynika najprawdopodobniej stąd, że operacja jest rozumiana nieco inaczej w każdej z norm.

Jeżeli nadal istnieją wątpliwości, warto zajrzeć do “Leksykonu informatyki” (G. Löbel, P. Mëller, H. Schmid, WNT, Warszawa, 1977), który choć jest pracą popularną, spełnia w naszych warunkach pożyteczną rolę wyjaśniając wiele kwestii szczegółowych. Choć nie podaje on precyzyjnej definicji instrukcji, jednak pod tym hasłem stwierdza się wyraźnie, że instrukcja może składać się sama z wielu instrukcji cząstkowych, a instrukcje, których nie można rozłożyć na cząstkowe, nazywają się rozkazami.

Zatem każdy rozkaz jest instrukcją, lecz nie każda instrukcja rozkazem. Nie jest więc błędem, jeżeli wyrażenie MOV A, B języka symbolicznego nazwiemy instrukcją, choć precyzyjniej należałoby je nazwać rozkazem. Natomiast wyrażenie GO TO 100 jeżyka FORTRAN można nazwać tylko instrukcją.

Przez listę rozkazów (taki odpowiednik ang. określenia instruction set podaje norma PN-71/T-01016, a więc nie zbiór rozkazów ani repertuar rozkazów) rozumie się według normy ISO zbiór wszystkich rozkazów komputera, języka lub języków programowania. Określenie podane w normie polskiej jest węższe, ponieważ dotyczy tylko języka programowania, natomiast treść haseł, lista rozkazów i repertuar rozkazów w “Leksykonie informatyki” jest zgodna z definicją ISO.

Wymieniona norma międzynarodowa precyzuje dalsze określenia związane z terminem rozkaz, które warto przytoczyć.

Makrorozkaz (makroinstrukcję) określa się jako rozkaz języka źródłowego, który ma zostać zastąpiony przez określony ciąg rozkazów tego samego języka źródłowego. Zdecydowanie nie zaleca się używania terminu pseudorozkaz (pseudoinstrukcja), lecz dyrektywa (ang. directive), który oznacza wyrażenie znaczące w języku programowania, wpływające na interpretację innych wyrażeń tego języka. Terminem bliskim dyrektywie jest komenda (ang. command), zwana także poleceniem, którą można określić jako wyrażenie znaczące w języku porozumiewania się z innymi programami systemowymi, np. z programem redagującym.

Skoro mowa o rozkazach, warto poświęcić trochę miejsca nazwom poszczególnych rodzajów rozkazów. Choć trudno przypuszczać, aby w praktyce udało się ujednolicić nazwy rozkazów, przede wszystkim dlatego, że nie dbają o to producenci komputerów i mikroprocesorów, to warto podać pewne wskazówki – jak postępować w sytuacjach wątpliwych. Istotną rolę może tu odegrać norma ISO-2382 która definiuje niektóre rodzaje operacji, a więc pośrednio odpowiadające im rozkazy.

Przykładowo, zmiana kolejności wykonywania rozkazów może nastąpić w wyniku wykonania rozkazów skoku (ang. jump) lub rozgałęzienia (wg normy PN-71/T-01016 odpowiednik angielskiego terminu branch). Według normy ISO skok podczas wykonywania programu jest to zmiana niejawnej lub zadeklarowanej kolejności wykonywania rozkazów. Rozgałęzienie podczas wykonywania programu jest to wybór jednego z kilku alternatywnych zbiorów rozkazów. Żadna z norm nie definiuje jednak rozkazu skip, który można określić polskim odpowiednikiem przeskok, ponieważ zmiana kolejności polega w tym wypadku zazwyczaj na pominięciu jednego lub najwyżej kilku rozkazów.

Nie jest powszechnie wiadomym, że najczęściej wykonywane operacje przepisywania lub kopiowania danych (ang. copy) są także dokładnie zdefiniowane w normie ISO. Operacja wprowadzania danych do rejestru nazywa się ładowaniem (ang. load). Wprowadzanie danych z rejestru do pamięci wewnętrznej nazywa się zapamiętywaniem (ang. store), a przepisywanie z jednej komórki pamięci wewnętrznej do innej komórki tej pamięci – przesyłaniem (ang. move). Wprowadzanie danych do pamięci zewnętrznej nazywa się zapisywaniem (ang. write), a przepisywanie z pamięci zewnętrznej – odczytywaniem (ang. read). Przepisywanie danych między dwoma komórkami pamięci zewnętrznej nazywa się również przesyłaniem (ang. transfer). Wynika stąd, że odpowiednie rozkazy powinny nazywać się po polsku rozkazami ładowania, zapamiętywania, przesyłania, zapisu i odczytu, co jest na ogół praktykowane.

Pozostaje jeszcze do wyjaśnienia kwestia przyjmowania danych przez system cyfrowy jako całość lub dostarczania danych przez ten system. Nazwy odpowiednich rozkazów są w zasadzie ustalone przez normy jako rozkaz wejścia (ang. input) i wyjścia (ang. output), natomiast odpowiadające tym rozkazom czynności określane są jako wprowadzanie i wyprowadzanie (ang. input process, output process). Dlatego wydaje się, że obu ostatnich określeń nie należałoby używać w innym znaczeniu.

Choć istnieje wiele innych rodzajów rozkazów, niebezpieczeństwo niejednoznaczności jest niewielkie, dlatego na ogół nie są definiowane w normach.

Janusz Zalewski

Źródło: “Informatyka,” nr 11/1980, str. 38



  Poprzedni | Następny
Strona dodana 24 maja 2003 roku.

Copyright © 2002-2005 Marcin Wichary
Wersja do druku | Kontakt | Mapa serwisu