PL/M (Programming Language for Microcomputers)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:42, 8 июня 2016.
PL/M
Разработчики Gary Kildall at Digital Research
Первый   появившийся 1972 (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;

Литература

  1. Система программного обеспечения СМ 1800. Описание языка ПЛ/М. — Москва: ИНЭУМ, 1980.
  2. Шаньгин В. Ф., Поддубная Л. М. Программирование на языке ПЛ/М. — Москва: Высшая школа, 1991 (ISBN 5-06-001789-3)
  3. Гребенников Л. К., Летник Л. А. Программирование микропроцессорных систем на языке ПЛ/М. — Москва: Финансы и статистика, 1996

Ссылки

  1. PL/M to C Translator
  2. XTRAN Example — Translate PL/M to C