PL/M (Programming Language for Microcomputers)
Последнее изменение этой страницы: 23:42, 8 июня 2016.
Разработчики | Gary Kildall at Digital Research |
---|---|
Первый появившийся | 1972 |
Под влиянием | |
ALGOL, PL/I, XPL |
PL/M - это высокоуровневый язык, разработанный для системного и прикладного программирования под микропроцессоры Intel. Был создан в Digital Research Гэри Килдалом в 1972 году.
PL/M больше не поддерживается Intel, но существуют сторонние инструменты наподобие транслятора PL/M-to-C (см. ссылки [1] [2]).
Содержание
Преимущества использования PL/M
Программы на PL/M портативные, что означает, что они легко переносятся с одного микропроцессора на другой. При использовании PL/M не нужно заботиться о наборе инструкций целевого процессора. Дополнительно, не нужно заботиться о других деталях целевого процессора, таких как выделение регистров или выделение нужного количества байт для каждой единицы данных. Компилятор PL/M-386 делает это всё автоматически. Ключевые слова и фразы PL/M близки к естественному английскому, и многие операторы (включая арифметические и булевы операции) могут быть соединены в выражения. Это позволяет выполнять последовательность операций в одной програмной инструкции. Типы данных и структуры данных обладают функциональными аттрибутами. Например, в PL/M программа может быть записана с помощью булевых выражений, символов структур данных, в дополнение к байтам, словам и целым числам.
Программирование на языке высокого уровня, а не на языке ассемблера, позволяет мыслить ближе к уровню проектирования системы.
Далее приводится список преимуществ использования PL/M, и приложения, для которых PL/M подходит лучше всего:
- блочная структура и конструкции управления PL/M помогают и поощряют использование структурного программирования.
- в PL/M есть средства для структур данных, таких как структурные массивы и динамические перменные с указателем.
- PL/M - типизированный язык. Компилятор выполняет проверку совместимости типов данных для помощи в обнаружении логических ошибок в программах.
- в PL/M средства и инстукции управления разработаны в единобразном стиле. Поэтому, PL/M является хорошим языком для описания алгоритмов системного программирования.
- PL/M - это стандартный язык, использующийся для разработки приложений на системах Intel. Программы на PL/M совместимы среди семейства микропроцессоров Intel386 и Intel486.
- PL/M был разработан для программистов (вообще, системных программистов), которым требовался доступ к таким частям микропроцессора, как косвенная адресация и прямой доступ к вводу-выводу для оптимального использования всех системных ресурсов.
По сравнению с другими языками, PL/M предлагает больше возможностей, чем BASIC, и он является языком более общего назначения, чем FORTRAN (который лучше всего подходит для научного применения) или COBOL (разработанный для обработки данных). В PL/M получить доступ к железу микропроцессора проще, чем на С. Дополнительно, по сравнению с С, PL/M позволяет создавать вложенные процедуры и структуру программы легче поддерживать.
Структура программы на PL/M
PL/M - блочно-структурированный язык; каждая инструкция программы принадлежит хотя бы к одному блоку. Блок - чётко определённая группа инструкций, которая начинается с инструкции DO или описания процедуры и заканчивается инструкцией END.
Модуль - именованный простой блок DO. Модуль должен начинаться с именованной инструкции DO и заканчиваться инструкцией END. Между инструкцией DO и инструкцией END располагаются другие интсрукции, которые описывают данные и действия, составляющие программу. Эти инструкции, как уже было сказано, должны быть частью блока, содержаться в блоке или быть вложенным в блок. Модуль может содержать другие блоки, но он сам никогда не содержится внутри другого блока.
Каждая программа на PL/M состоит из одного или более модулей, скомпилированных раздельно, каждый состоящий из одного или более блоков. Определены два типа блоков - блоки DO и блоки, описывающие процедуру.
Блок, описывающий процедуру - это набор инструкций, начинающийся с определения процедуры и заканчивающийся инструкцией END. Другие определения и исполняемые инструкции могут быть размещены между ними и используются тогда, когда процедура вызывается на выполнение. Описывающий блок - это дальнейшее указание того, что будет использовать и делать процедура.
Обзор инструкций в PL/M
В PL/M используются два типа инструкций - описания и исполнения. Все инструкции в PL/M заканчиваются точкой с запятой (;).
Инструкции описания
Простой пример инструкции описания:
DECLARE WIDTH BYTE;
Эта инструкция представляет идентификатор WIDTH и связывает его с содержимым 1 байта (8 бит) памяти. Теперь вместо того, чтобы запоминать адрес этого байта, к нему можно обратиться по имени WIDTH.
Группе инструкций, нацеленных на выполнение функции (т.е. подпрограмме), может быть задано имя с помощью объявления процедуры с таким именем:
ADDER_UPPER: PROCEDURE (BETA) BYTE;
Инструкции, которые определяют процедуру, идут после точки с запятой. Этот блок инструкций вызывается из других мест в программе и может включать передачу парметров в программу. Когда процедура прекращает выполнение, управление возвращается сразу в основную программу. Эта возможность является главной особенностью, обеспечивающей модульную структуру программ.
Инструкции выполнения
Пример инструкции выполнения:
CLEARANCE = WIDTH + 2;
Два идентификатора, CLEARANCE и WIDTH, должны быть определены до этой инструкции, которая создаёт машинный код на получение значения WIDTH из памяти. Как только оно получено, к нему добавляется 2 и сумма сохраняется в области памяти, именованной CLEARANCE.
Для большинства задач нет необходимости думать в терминах расположения в памяти при программировании на PL/M. CLEARANCE и WIDTH - переменные, и инструкция присвоения присваивает значение выражения WIDTH + 2 переменной CLEARANCE. Компилятор автоматически генерирует все машинные коды, необходимые для получения данных из памяти, для вычисления выражения и для сохранения результата в правильном месте.
Список доступных инструкций выполнения:
- Инструкция присвоения
- Инструкция CALL
- Инструкция CAUSE$INTERRUPT
- Инструкция DISABLE
- Инструкция DO CASE
- Инструкция DO WHILE
- Инструкция ENABLE
- Инструкция END
- Исполняемые функции
- Инструкция GOTO
- Инструкция HALT
- Инструкция IF
- Итеративная инструкция DO
- Вложенная инструкция IF
- Инструкция RETURN Statement
- Простая Инструкция DO
Встроенные процедуры и переменные
PL/M обеспечивает множество встроенных процедур и переменных. Они включют в себя такие функции как сдвиги и повороты, преобразования типов данных, исполняемые функции, блочный ввод-вывод, математика с действительными числами и работа со строками.
Обзор выражений PL/M
Выражение в PL/M состоит из операндов и оператора, и схоже с обычным алгебраическим выражением.
Операнды включают в себя числовые константы (такие как 3.78 or 105) и переменные (и другие типы). Операторы включают в себя + и - для сложения и вычитания, * и / для умножения и деления и MOD для модульной арифметики.
Так же как и в алгебраических выражениях, элементы выражений в PL/M можно группировать в круглые скобки.
Выражение вычисляется с использованием беззнаковой двоичной арифметики, знаковой целочисленной арифметики, и/или арифтметики с действительными числами в зависимости от типов операндов в выражении.
Ввод и вывод
PL/M не обеспечивает возможности форматированного ввода-вывода как в FORTRAN, BASIC или COBOL. Однако, PL/M обеспечивает встроенные функции для прямого ввода-вывода, который не требует поддержки исполняющей среды операционной системы. Компилятор PL/M-386 имеет встроенные функции, которые дают возможность ввода-вывода одного байта, полуслова или слова, так же как и блочного ввода-вывода (для строк из байт, полуслов или одиночных слов).
Пример кода на PL/M
FIND: PROCEDURE(PA,PB) BYTE;
DECLARE (PA,PB) BYTE;
/* НАЙТИ СТРОКУ, НАЧИНАЮЩУЮСЯ НА PA И ЗАКАНЧИВАЮЩУЮСЯ НА PB*/
DECLARE J ADDRESS,
(K, MATCH) BYTE;
J = BACK ;
MATCH = FALSE;
DO WHILE NOT MATCH AND (MAXM > J);
LAST,J = J + 1; /* НАЧАТЬ СКАН С J */
K = PA ; /* ПОПЫТКА СРАВНИТЬ СТРОКИ */
DO WHILE SCRATCH(K) = MEMORY(LAST) AND
NOT (MATCH := K = PB);
/* СРАВНИТЬ ЕЩЁ ОДИН СИМВОЛ */
K = K + 1; LAST = LAST + 1;
END;
END;
IF MATCH THEN /* ПЕРЕМЕСТИТЬ */
DO; LAST = LAST - 1; CALL MOVER;
END;
RETURN MATCH;
END FIND;
Литература
- Система программного обеспечения СМ 1800. Описание языка ПЛ/М. — Москва: ИНЭУМ, 1980.
- Шаньгин В. Ф., Поддубная Л. М. Программирование на языке ПЛ/М. — Москва: Высшая школа, 1991 (ISBN 5-06-001789-3)
- Гребенников Л. К., Летник Л. А. Программирование микропроцессорных систем на языке ПЛ/М. — Москва: Финансы и статистика, 1996
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.