PL/M (akronim od ang. Programming Language for Microprocessors lub Programming Language for Microcomputers) – kompilowany, strukturalny język programowania wysokiego poziomu stworzony przez Gary'ego Kildalla w 1973 roku. Jest klasyfikowany zwykle jako asemblerowy język wysokiego poziomu ze względu na wysoki współczynnik przełożenia na język asemblera.
Został stworzony jako język mający ułatwić tworzenie oprogramowania systemowego. Stosowany był do tworzenia m.in. systemów operacyjnych (CP/M) i kompilatorów.
Ważną implementacją 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 języka jest wzorowana na języku PL/I.
Historia Pierwsza wersja języka powstała dla mikroprocesora Intel 8008 w 1973 roku. Jej autorem był Gary Kildall pracujący wówczas (dodatkowo) w Microcomputer Application Associates (MAA)poprzedniku Digital Research a dla Intela jako konsultant. Kompilator PL/M został zaimplementowany w języku FORTRAN IV na komputerze PDP-10.
W kolejnych latach powstały wersje kompilatorów języka dla innych procesorów (w szczególności dla Intel 8080), które wykorzystywane były w implementacji systemowych programów narzędziowych, kompilatorów oraz systemów operacyjnych.
Najbardziej znanym systemem, który powstał w PL/M, był CP/Mktórego autorem był również Gary Kildall – pierwszy szeroko wykorzystywany system operacyjny dla mikrokomputerów, którego pierwsza wersja powstała w 1974 roku.
Przykład
/* 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 Język PL/M jest językiem umożliwiającym programowanie modularne, przy czym ważną cechą była możliwość tworzenia 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 jedną 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, wprowadziły 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/I) 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, repetycyjnej DO WHILE…END, wywołania CALL, powrotu RETURN.
Język posiada także wbudowane procedury i predefiniowane zmienne.
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;
Uwagi
Przypisy
Bibliografia 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,
Zobacz też PL/I CP/M
Kategoria:Języki programowania