PL/M
Z Wikipedia
PL/M to strukturalny język programowania wysokiego poziomu, lecz równocześnie należy do kategorii języków tzw. bliskich sprzętowi, czasem (potocznie) używa się określenia asemblerowy język wysokiego poziomu. Był stosowany niegdyś 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.
Hello world w PL/M:
/* HELLO WORLD in ISIS-II and CP/M operating systems */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;
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.
Instrukcje języka PL/M:
- przypisania: v1, v2, …, vn = wyrażenie;
- pusta: ;
- grupująca:
DO; deklaracje i definicje instrukcje END;
IF wyrażenie THEN instrukcja [ELSE instr-else]
DO CASE wyrażenie"; instr_0" instr_1" … instr_n" END;
- przejścia: GOTO etykieta";
- iteracyjna:
DO v=e TO t [BY b]; instrukcje END;
DO WHILE wyrażenie; instrukcje END;
CALL nazwa_proc(argumenty);
RETURN [wyrażenie];
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
- 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, wydanie drugie uzupełnione, seria: Mikrokomputery, ISBN 83-204-0893-8
Zobacz też
|