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 oraz 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 z reguły dla potrzeb programowania procesów w systemach czasu rzeczywistego iRMX.
Składnia tego języka wzorowana jest na języku PL/1.
Przykład
-
Sprawdź też: Hello world.
/* HELLO WORLD dla systemów operacyjnych ISIS-II oraz 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
Język PL/M jest językiem umożliwiającym programowanie modularne, przy czym jedną z ważniejszych jego cech było wykonywanie przemieszczalnych modułów oraz 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 ma 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 oraz definicje
instrukcje
END nazwa;
Jeżeli moduł zawiera przynajmniej 1 instrukcję, to stanowi moduł podstawowy oraz 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 potrafią zawierać zaledwie deklaracje oraz definicje.
W języku PL/M zmienne posiadają określane w deklaracjach atrybuty:
- zmienne proste:
- BYTE – bajtowe
- ADDRESS – dwubajtowe, zmienne te potrafią oprócz liczb całkowitych przechowywać dane wskaźnikowe (należy raczej powiedzieć, że dane całkowite przechowywane w tych zmiennych bywają traktowane jako wskaźniki)
- BASE – bazowe
- tablicowe – tablice bywają 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ć bez wątpienia nadal jest możliwe programowanie bliskie sprzętowi, w tym korzystanie z ww. danych bajtowych oraz słowowych.
Pozostałe atrybuty określają inne cechy zmiennych:
- AT(adres) – wyznacza 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) da się grupować identyfikatory: DECLARE (A,B) (3) ADDRESS;
Deklaracja oraz 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ć trzeba deklarację o postaci jak wyżej z pominięciem deklaracji zmiennych oraz instrukcji, ale z dodatkowym atrybutem EXTERNAL. Odmienne atrybuty to PUBLIC dla procedur udostępnianych dla innych modułów oraz 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, repetycyjnej DO WHILE…END,
- wywołania
CALL,
- powrotu
RETURN.
Język ma także szereg wbudowanych procedur oraz 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
- Jan Bielecki, PL/M – język programowania mikroprocesorów, Wydawnictwa Komunikacji oraz Łą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
Sprawdź też