Макроязык АС - средство создания информационных систем

Обычно при создании информационных систем используются языки высокого уровня типа Паскаль, ПЛ/1, КОБОЛ. Однако, даже такой развитый язык, как ПЛ/1, не всегда удобен и эффективен, поэтому некоторые модули приходится писать на языке ассемблера. Язык ассемблера, хотя и предоставляет программисту широкие возможности по использованию ресурсов ЭВМ, заставляет его выполнять множество рутинных операций - базирование, прием параметров и т.д. Общеизвестны и другие недостатки языка ассемблера: отсутствие операторов цикла, выбора и т.д., что затрудняет использование таких прогрессивных методов программирования, как нисходящее и структурное программирование.

От большинства из недостатков языка ассемблера можно избавиться, введя соответствующие макрокоманды. Так, например, существует множество макрокоманд структурного описания логики программы, макрокоманды входа в модуль (правда, обычно их возможности ограничиваются созданием цепочки областей сохранения), и т.д. Данный подход реализован в макроязыке АС (ассемблер структурированный), разработанном на ВЦ Красноярского государственного университета.

Макроязык АС - это комплекс макрокоманд, построенных по единой идеологии и предназначенный для повышения производительности труда программистов. Ас состоит из четырех групп макрокоманд: Обеспечение модульных связей; описание логики программы; ввод-вывод; прочие макрокоманды.

Межмодульные связи обеспечиваются макрокомандами входа, возврата, вызова и динамического вызова.

Макрокоманда входа в модуль автоматически сохраняет регистры, строит цепочку областей сохранения, базирует модуль с использованием регистров, указанных программистом и принимает параметры, т.е., фактически, выполняет роль заголовка подпрограммы в языках высокого уровня. Программисту нужно только указать номера базовых регистров и список параметров модуля. Макрокоманда входа предоставляет программисту широкие возможности по приему параметров: можно принять в поле, определенное в модуле, значение параметра или его адрес; адрес параметра можно принять в общий регистр; если, параметр - слово, то в регистр можно принять его значение. Таким образом, с программиста снимается вся рутина, связанная с интерпретацией списка параметров.

Макрокоманда возврата, кроме обычных действий по восстановлению регистров и т.д., позволяет вернуть значения параметров в вызывающий модуль и установить код возврата в регистре 15. Как и для макрокоманды входа, параметры могут находиться в полях и регистрах, в полях и регистрах могут находиться и адреса возвращаемых параметров. Кроме того, можно возвращать литералы и управлять длинной возвращаемых данных.

Макрокоманда вызова существенно расширяет возможности аналогичной макрокоманда ОС ЕС. Адрес вызываемой программы может находиться в любом регистре или в поле, в качестве параметра можно указать не только поле или регистр, но и литерал. Можно указать не сам параметр, а его адрес в виде смещение-индекс-база. Адрес параметра может находиться в любом поле или регистре. Таким образом, В одной макрокоманде можно указывать разнообразные ссылки на параметры, что избавляет программиста от рутины по созданию списка параметров.

Макрокоманда динамического вызова выполняет загрузку модуля, вызов его (со всеми возможностями макрокоманды вызова) и уничтожение его.

Все указанные макрокоманды используют стандартное соглашение о связях, поэтому эффективно используются в разноязыковых системах. Так, модуль, написанный на языке АС, может быть вызван из модулей, написанных на ПЛ/1 и ФОРТРАНе и вызывать модули, написанные на этих языках. Никакие дополнительные команды, кроме имеющихся в языке АС, не требуются.

Таким образом, макрокоманды обеспечения межмодульных связей снимают с программиста всю рутину, связанную со входом в модуль, выходом из него, вызовом других модулей и значительно облегчает создание разноязыковых систем.

Описание логики модуля обеспечивается макрокомандами входа в блок, выхода из блока, организации цикла и организации развилки.

Блок может содержать любые команды ассемблера, макрокоманды ОС, АС и пользователя, в том числе и другие блоки. Глубина вложенности блоков не ограничена. Понятие блока аналогично понятию операторных скобок в ПЛ//1, но, если блок имеет параметры, то он рассматривается уже как внутренняя процедура. Блок может быть только вызван, при последовательном выполнении блок обходится.

Макрокоманды организации цикла и развилки позволяет записывать логику модуля в виде, близком к записи на ПЛ/1 по структурированности и простоте, оставляя в то же время все возможности языка ассемблера. Возможность неограниченно вкладывать цикл в цикл, развилку в развилку, цикл в развилку, и т.д. позволяет эффективно использовать нисходящий метод программирования. Макрокоманды позволяют организовать цикл по счетчику, находящемуся в регистре, цикл по условию до или после тела цикла, двоичную (ЕСЛИ-ТО-ИНАЧЕ) и множественную развилку. В программе на языке АС можно вообще не использовать команды перехода.

Таким образом, макрокоманды описания логики снимают с программиста рутину по организации логики программы, позволяет использовать прогрессивные методы программирования и, в конечном счете, повышают надежность программы.

Макрокоманды ввода-вывода в основном просто объединяют по несколько макрокоманд ОС, обычно используемых последовательно (например макрокоманда закрытия последовательного файла включает в себя обычную макрокоманду закрытия и плюс освобождение буферного пула). Макрокоманды же печати и работы с консолью существенно расширяют возможности аналогичных макрокоманд ОС.

Так макрокоманда печати избавляет программиста от рутины, связанной со способом печатаемой строки и по своим возможностям приближается к операторам печати в языках высокого уровня. В одной макрокоманде можно указать несколько полей и литералов, которые соберутся в одну строку. Поле может быть указано символическим именем, или адресом в виде смещение-база, или же адрес поля может находиться в регистре лил другом поле. Длина поля может быть взята автоматически (если поле указано символическим именем или литералом) или же, в любом случае, может быть задана программистом. Макрокоманда позволяет указывать количество строк, пропускаемых перед печатью, задавать смещение от начала строки АЦПУ и т.д.

Макрокоманда работы с консолью позволяет вывести не только литерал, как соответствующая макрокоманда ОС, но и любое поле, причем поле может быть задано адресом в регистре или форме смещение-база. Длина передаваемых или принимаемых данных может быть как задана числом, так и находиться в любом общем регистре.

Прочие макрокоманды включают в себя макрокоманду выполнения арифметических операций и средства отладки.

Чтобы выполнить арифметическую операцию над числами, находящимися в памяти, нужно как минимум три команды: загрузка первого операнда, собственно операция и запись в память результата. В языке АС это выполняется одной макрокомандой, причем типы операндов могут быть различными: слово, полуслово и даже один байт.

Макрокоманда отладки языка АС базируется на макрокоманде отладки ОС ЕС, но более удобна в работе, так как позволяет более гибко указывать границы дампируемых областей. Можно указать адрес обеих границ: символическим именем, адресом в регистре или поле и т.д. Можно указать адрес только нижней границы, и длину, которая может быть литералом или находиться в регистре или поле. Макрокоманда отладки имеет режим, включив который, программист в случае сбоя программы получит аварийный дамп, содержащий имя сбойной секции, слово состояния программы, адрес сбойной секции и относительный адрес сбойной команды в секции. Этот дамп особенно полезен, если ОС работает в режиме с переменным числом задач, так как в этом случае индикативный дамп не выдается, а выдается только код прерывания, и найти не только ошибочную команду, но и ошибочный модуль невозможно без полного дампа разделения.

Все макрокоманды языка АС унифицированы по синтаксису, организации, использованию, однако достаточно автономны, что позволяет пользователю как написать программу полностью на языке АС, так и с использованием лишь некоторых макрокоманд из него. Программа на языке АС в три-четыре раза короче программы, написанной на языке ассемблера, что в сочетании с более удобными средствами описания логики повышает наглядность и обозримость программы.

Объем макроязыка АС - около тысячи перфокарт; включение АС в систему - просто запись макрокоманд в символическую библиотеку.

Макроязык АС широко используется в Красноярском государственном университете в течение пяти лет. На нем написано около 50 тысяч операторов АИОС ДЕЛЬТА. Он используется студентами, практикующимися в языке ассемблера и системными программистами. В последнее время макроязык АС передан пользователям ряда организаций.


Опубликовано: Автоматизированные системы управления и вычислительная техника. Тезисы докладов к краевой конференции 8 июня 1984 г. Красноярск
© Алексей Бабий 1984