Ассемблер FAP
Ассемблер FAP (от англ. Fortran Assembly Program) — это язык программирования низкого уровня и одноимённая трансляторная программа, разработанные в начале 1960-х годов корпорацией IBM для мейнфреймов серии IBM 709, IBM 7090 и IBM 7094. FAP представлял собой макроассемблер, предназначенный для написания эффективного машинного кода, оптимизированного для архитектуры этих компьютеров, и использовался преимущественно для системного программирования, разработки компиляторов (в частности, самого компилятора Fortran) и драйверов периферийных устройств. В отличие от более поздних ассемблеров, FAP сочетал в себе возможности символической адресации и макроподстановки, что позволяло программистам работать на уровне, близком к машинному, но с элементами абстракции.
История
Разработка FAP велась в рамках проекта по созданию программного обеспечения для научных и инженерных вычислений на мейнфреймах IBM 7090. Первая версия ассемблера была выпущена в 1961 году для операционной системы IBSYS (предшественницы OS/360). Основной целью было обеспечение обратной совместимости с программами, написанными для более ранних машин IBM 704, а также предоставление инструмента для оптимизации критических участков кода, которые не могли быть эффективно скомпилированы с помощью Fortran.
В 1962 году, с выходом модели IBM 7094, была выпущена модифицированная версия FAP, поддерживающая расширенный набор инструкций (включая операции с плавающей запятой двойной точности и дополнительные команды управления памятью). Ассемблер оставался основным средством низкоуровневого программирования для этой платформы до середины 1960-х годов, пока не был вытеснен более универсальным ассемблером MAP (Macro Assembly Program) для IBM System/360. Однако FAP продолжал использоваться в специализированных проектах до начала 1970-х годов, в частности, в университетских лабораториях и оборонных учреждениях США.
Архитектура и синтаксис
FAP работал с 36-битным машинным словом, характерным для архитектуры IBM 7090. Программа на FAP состояла из последовательности строк, каждая из которых могла содержать метку, мнемонику команды, операнды и комментарий. Синтаксис был строго позиционным: поля разделялись пробелами, а метка начиналась с первой позиции строки.
Основные элементы
- Мнемоники команд: Использовались стандартные для IBM 7090 обозначения, например:
CLA(Clear and Add) — загрузка аккумулятора.ADD— сложение.STO(Store) — сохранение в память.TRA(Transfer) — безусловный переход.TZE(Transfer on Zero) — условный переход по нулю.- Директивы ассемблера: Служебные команды, управляющие процессом сборки:
ORG(Origin) — задание начального адреса размещения кода.BSS(Block Started by Symbol) — резервирование блока памяти.CON(Constant) — определение константы.END— конец программы.- Метки: Идентификаторы, которые могли быть длиной до 6 символов (ограничение 36-битного слова) и использовались для обозначения адресов команд или данных.
Пример кода
Пример программы на FAP, вычисляющей сумму двух чисел и сохраняющей результат:
`` START CLA A ; Загрузить значение A в аккумулятор ADD B ; Сложить с B STO C ; Сохранить результат в C TRA ENDPRG ; Переход к завершению A CON 10 ; Константа A = 10 B CON 20 ; Константа B = 20 C BSS 1 ; Резервирование 1 слова для C ENDPRG END START ; Конец программы, точка входа START ``
Макросредства
Одной из ключевых особенностей FAP была поддержка макросов. Макросы позволяли программисту определять последовательности команд, которые могли быть многократно использованы с различными параметрами. Это существенно повышало производительность труда и уменьшало количество ошибок, хотя и требовало большего времени на трансляцию.
- Определение макроса: Использовалась директива
MACROс именем и списком формальных параметров. - Вызов макроса: Имя макроса с фактическими параметрами.
- Пример: Макрос для сложения двух чисел с проверкой переполнения.
`` MACRO ADDCHK &X, &Y, &RES CLA &X ADD &Y STO &RES TZE *+2 ; Если результат 0, пропустить проверку TRA OVERFLOW ; Иначе — обработка переполнения MEND ``
Применение
Системное программирование
FAP активно использовался для написания ядра операционной системы IBSYS, а также драйверов для магнитных лент, барабанных и дисковых накопителей. Благодаря возможности прямого управления регистрами и прерываниями, ассемблер позволял реализовывать критически важные по времени функции, такие как планирование задач и обработка ввода-вывода.
Компиляторы Fortran
Значительная часть компилятора Fortran II для IBM 7090 была написана на FAP. Это было необходимо для оптимизации генерации кода, особенно при работе с циклами и арифметикой с плавающей запятой. Внутренние процедуры компилятора, отвечающие за синтаксический анализ и генерацию объектного кода, часто реализовывались на ассемблере для достижения максимальной производительности.
Научные расчёты
Хотя основным языком для научных вычислений был Fortran, FAP применялся для написания библиотек подпрограмм, требующих высокой скорости, — например, для быстрого преобразования Фурье (БПФ) или решения систем линейных уравнений. Такие подпрограммы могли быть вызваны из Fortran-программ через механизм внешних ссылок.
Ограничения
- Зависимость от архитектуры: FAP был жёстко привязан к 36-битной архитектуре IBM 7090/7094 и не мог быть перенесён на другие платформы без полной переработки.
- Отсутствие структурирования: В отличие от более поздних ассемблеров (например, MASM или GAS), FAP не поддерживал вложенные макросы, локальные метки или модульную организацию кода.
- Сложность отладки: Отсутствие интерактивных отладчиков и низкая скорость работы с магнитными лентами (основным носителем данных) делали процесс отладки трудоёмким и длительным.
Влияние на последующие разработки
FAP стал прототипом для многих ассемблеров, созданных в 1960-х годах. Его концепция макросов была заимствована и развита в ассемблере MAP для IBM System/360, а также в ассемблерах для машин CDC 6600 и Burroughs B5000. Методы оптимизации кода, разработанные при работе с FAP, легли в основу ранних компиляторов оптимизирующих языков, таких как ALGOL 60 и PL/I.
Источники
- IBM 7090/7094 Assembly Language Programming (IBM Systems Reference Library, 1962).
- Rosen, Saul. Programming Systems and Languages. McGraw-Hill, 1967.
- Sammet, Jean E. Programming Languages: History and Fundamentals. Prentice-Hall, 1969.
- Knuth, Donald E. The Art of Computer Programming, Volume 1: Fundamental Algorithms (раздел 1.1, посвящённый машинному коду IBM 7090).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →