PL/M
PL/M – strukturalny język programowania wysokiego poziomu, klasyfikowany zwykle jako asemblerowy język wysokiego poziomu ze względu na wysoki współczynnik przełożenia na język asemblera. Niegdyś stosowany był do tworzenia oprogramowania systemowego, w tym m.in. systemów operacyjnych i kompilatorów. Jedną z ważniejszych implementacji była wersja opracowana przez firmę Intel dla procesorów serii 8080/8085, stosowana m.in. w systemie ISIS-II oraz PL/M-86 opracowana głównie dla potrzeb programowania procesów w systemach czasu rzeczywistego iRMX.
Składnia tego języka wzorowana jest na języku PL/1.
Przykład
[edytuj | edytuj kod]/* HELLO WORLD dla systemów operacyjnych ISIS-II i CP/M */ HELLO: DO; DECLARE REP ADDRESS; WRITE: PROCEDURE (A,B,C,D) EXTERNAL; DECLARE (A,B,C,D) ADDRESS; END; CALL WRITE(0,.('Hello, world!'),13,.REP); END HELLO;
Cechy
[edytuj | edytuj kod]Język PL/M jest językiem umożliwiającym programowanie modularne, przy czym jedną z ważniejszych jego cech było tworzenie przemieszczalnych modułów i możliwość programowania hybrydowego (PL/M + asembler).
Język PL/M (jego implementacja PL/M-80) jest tak zaprojektowany, że istnieje bezpośrednie odwzorowanie konstrukcji tego języka na język maszynowy procesora Intel] 8080/8085. Kompilator ten posiada opcję umożliwiającą translację programu źródłowego w PL/M na program w asemblerze.
Program w języku PL/M składa się z niezależnie kompilowanych modułów. Moduł źródłowy (najmniejsza kompilowalna jednostka) jest instrukcją strukturalną o postaci:
nazwa: DO; deklaracje i definicje [instrukcje] END nazwa;
Jeżeli moduł zawiera co najmniej 1 instrukcję, to stanowi moduł główny i od niego rozpoczyna się wykonywanie programu; przy kilku takich modułach wyróżnienie modułu głównego następuje na etapie konsolidacji. Pozostałe moduły mogą zawierać jedynie deklaracje i definicje.
W języku PL/M zmienne posiadają określane w deklaracjach atrybuty:
- zmienne proste:
- BYTE – bajtowe
- ADDRESS – dwubajtowe, zmienne te mogą oprócz liczb całkowitych przechowywać dane wskaźnikowe (należy raczej powiedzieć, że dane całkowite przechowywane w tych zmiennych mogą być traktowane jako wskaźniki)
- BASE – bazowe
- tablicowe – tablice mogą być w PL/M jednowymiarowe o ustalonym wymiarze indeksowane od zera,
- strukturowe,
- literały – LITERALLY 'tekst'.
Późniejsze wersje języka, jak PL/M 386 dla systemu iRMX, wprowadzają już nowe typy znane z innych języków programowania, takie jak całkowity, rzeczywisty, znakowy, umożliwiające programowanie na wyższym poziomie abstrakcji, choć oczywiście nadal jest możliwe programowanie bliskie sprzętowi, w tym korzystanie z ww. danych bajtowych i słowowych.
Pozostałe atrybuty określają inne cechy zmiennych:
- AT(adres) – określa położenie zmiennej w pamięci,
- INITIAL(wartość) – nadanie początkowej wartości zmiennej,
- PUBLIC – udostępnienie zmiennej dla innych modułów,
- EXTERNAL – zmienna z innego modułu.
W deklaracjach (podobnie jak w PL/1) można grupować identyfikatory: DECLARE (A,B) (3) ADDRESS;
Deklaracja i definicja procedury ma postać:
nazwa: PROCEDURE(parametry) [typ_wartości] [atrybuty]; DECLARE deklaracje parametrów, deklaracje zmiennych; instrukcje END nazwa;
W przypadku procedur zewnętrznych stosować należy deklarację o postaci jak wyżej z pominięciem deklaracji zmiennych i instrukcji, ale z dodatkowym atrybutem EXTERNAL. Inne atrybuty to PUBLIC dla procedur udostępnianych dla innych modułów i REENTRANT dla procedur rekurencyjnych.
Główne instrukcje języka PL/M:
- przypisania:
v1, v2, …, vn = wyrażenie
, - pusta
;
(separator instrukcji), - grupująca
DO…END
, - warunkowa
IF…THEN…[ELSE…]
, - wyboru
DO CASE…END
, - skoku
GOTO
, - pętli: iteracyjnej
DO…TO…[BY…]…END
, repetycyjnejDO WHILE…END
, - wywołania
CALL
, - powrotu
RETURN
.
Język posiada także szereg wbudowanych procedur i predefiniowanych zmiennych.
Przykład:
PR1: DO; DECLARE LICZ BYTE, TAB(5) BYTE, SUM ADRESS INITAL(0); READTAB: PROCEDURE; DECLARE I BYTE; DO I=1 TO 5 BY 1; TAB(I)=INPUT(1); END; END READTAB; CALL READTAB; LICZ=1; DO WHILE LICZ<6; SUM=SUM+TAB(LICZ); LICZ=LICZ+1; END; OUTPUT(1)=SUM; END PR1;
Bibliografia
[edytuj | edytuj kod]- Jan Bielecki, PL/M – język programowania mikroprocesorów, Wydawnictwa Komunikacji i Łączności, Warszawa 1987, Seria: Elektronizacja, zeszyt 25
- Jan Bielecki, System operacyjny ISIS-II, Wydawnictwa Naukowo-Techniczne, Warszawa 1987, wyd. II uzup., seria: Mikrokomputery, ISBN 83-204-0893-8