Открыть сервисСервис

Ассемблер 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).
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru