PL/M
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.[1] 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[2]. Stosowany był do tworzenia m.in. systemów operacyjnych (CP/M[1]) 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
[edytuj | edytuj kod]Pierwsza wersja języka powstała mikroprocesora Intel 8008 w 1973 roku. Jej autorem był Gary Kildall, który pracował wówczas (dodatkowo) dla Intela jako konsultant. Kompilator PL/M został zaimplementowany w języku FORTRAN IV na komputerze PDP-10.[1][2]
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/M[a], pierwszy szeroko wykorzystywany system operacyjny dla mikrokomputerów, którego pierwsza wersja powstała w 1974 roku.[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 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, repetycyjnejDO 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
[edytuj | edytuj kod]- ↑ którego autorem był również Gary Kildall
Przypisy
[edytuj | edytuj kod]- ↑ a b c d Liam Proven: 50 years ago, CP/M started the microcomputer revolution. The Register, 2024-09-02. [dostęp 2026-01-11]. (ang.).
- ↑ a b MCS-8 Micropcomputer Set - 8008 8-bit parallel Central Processor Unit - User's Manual. Intel, 1973, s. okładka 2. [dostęp 2026-01-11]. (ang.).
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