IBM Basic Assembly Language и его последователи - IBM Basic Assembly Language and successors - Wikipedia

Базовый язык ассемблера (БАЛ) - это обычно используемый термин для языка программирования низкого уровня, используемый в IBM System / 360 и последующие мэйнфреймы. Первоначально «Базовый язык ассемблера» применялся только к крайне ограниченному диалекту, предназначенному для работы под управлением Поддержка базового программирования IBM (BPS / 360) в системах только с 8 КБ оперативной памяти и только картридер, а перфорация карты, и принтер для ввод, вывод - отсюда и слово «Базовый». Однако полное имя и инициализм "BAL" почти сразу же стал популярным среди всех диалектов ассемблера в System / 360 и ее потомках. BAL для BPS / 360 был представлен с Система / 360 в 1964 г.

Ассемблеры в других операционных системах System / 360 через Система / 370, Система / 390, и Система z, так же хорошо как UNIVAC серии 90 мэйнфреймы, сделанные Sperry Corporation, а BS2000 Мэйнфреймы в настоящее время производятся Fujitsu, унаследовал и расширил его синтаксис. Последний производный язык известен как Ассемблер высокого уровня IBM (ХЛАЗМ). Программисты, использующие это семейство ассемблеров, также называют их ALC (для кодирования на языке ассемблера) или просто «ассемблером».

BAL также является мнемоникой "Branch And Link". инструкция.[1]

Общие характеристики

Архитектура мэйнфреймов IBM за эти годы претерпела несколько расширений, включая System / 360, System / 370, System / 370 XA, ESA / 370, ESA / 390, и z / Архитектура. Каждая из этих архитектур сохранила совместимость с большинством функций своего предшественника. BAL использует родной Набор инструкций этих машин. Таким образом, он ближе к оборудованию, чем языки третьего поколения, такие как КОБОЛ.

Набор команд состоит из низкоуровневых операций, поддерживаемых оборудованием, таких как:

ИнструкцияМнемоническийОписание
НАГРУЗКАLкопировать значение из памяти в регистр
ХРАНИТЬSTкопировать значение из регистра в память
СРАВНИВАТЬCсравнить значение регистра со значением в памяти
СдвигSLL, SRLперемещать биты регистра влево или вправо
НАЧАТЬ ПОДКАНАЛSSCHначать операцию ввода / вывода подканала, используя строку командных слов канала

Чрезвычайная простота этих операций означает, что исходный код программы, написанной на ассемблере, обычно будет намного длиннее, чем эквивалентная программа, скажем, КОБОЛ или же Фортран. В прошлом часто считалось, что скорость написанных вручную программ на ассемблере компенсирует этот недостаток, но с появлением оптимизирующих компиляторов, C для мэйнфреймов и других достижений ассемблер потерял большую часть своей привлекательности. IBM продолжает обновлять ассемблер, и он все еще используется, когда первостепенное значение имеет скорость или очень точный контроль.

Еще одна причина использовать ассемблер заключается в том, что не все функции операционной системы могут быть доступны на языках высокого уровня. Интерфейс прикладных программ операционных систем мэйнфреймов определяется как набор «макросов» на языке ассемблера, которые обычно вызывают Вызов супервизора (SVC) [в z / OS] или Диагностика (DIAG) [в z / VM] аппаратные инструкции для вызова процедур операционной системы. Можно использовать службы операционной системы из программ, написанных на языках высокого уровня, с помощью подпрограмм ассемблера.

Формат заявления ассемблера

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

  • Необязательная метка заявления или имя от одного до шести буквенно-цифровых символов, начинающихся в столбце 1. Первый символ должен быть буквенным.
  • Код операции или мнемоника может начинаться в любом столбце справа от столбца 1, отделенном от метки оператора пробелом.
  • Поле операнда может начинаться в любом столбце справа от кода операции, отделенное от кода операции как минимум одним пробелом. Пробелы в операндах недопустимы, за исключением символьных констант. Поле операнда, состоящее из одного или нескольких операндов, является необязательным в зависимости от кода операции.
  • Необязательные комментарии могут отображаться справа от поля операнда, разделенные хотя бы одним пробелом.
  • Базовый Ассемблер не допускает продолжения оператора. В более поздних версиях ассемблера продолжение указывается появлением любого символа в столбце 72 оператора продолжения. Базовый язык ассемблера требует, чтобы столбец 72 был пустым.
  • "Комментарий к карточке" отмечен звездочкой (*) в столбце 1.
  • Столбцы карточек 73–80, называемые поле идентификационной последовательности могут использоваться программистом для любых целей, но обычно содержат порядковые номера для пересортировки перемешанной колоды карт.

Базовый язык ассемблера также допускает альтернативный формат оператора с оператором, начинающимся в столбце 25, что позволяет вставлять собранную инструкцию в ту же карту, начинающуюся в столбце 1. Этот вариант не был продолжен в более поздних версиях ассемблера.

Типы инструкций

В исходном коде программы, написанной на ассемблере, можно найти три основных типа инструкций.

Машинные инструкции (мнемонические)

Отношения один-на-один с машинные инструкции. Полный набор мнемонических инструкций описан в Принципы работы[2] руководство для каждого процессора. Примеры:

 * Это строка комментария * Загрузка целого числа полного слова, хранящегося в * месте, помеченном 'ZIGGY', в общий регистр 3: L 3, ZIGGY SLA 4,5 сдвигает значение в общем регистре 4 влево на 5 битов MVC TARGET, SOURCE перемещает символы из ячейки 'SOURCE' в 'TARGET' AP COUNT, = P'1 'добавить 1 к значению в ячейке памяти' COUNT '(упакованный десятичный формат) B NEXT безусловный переход к метке' NEXT 'HERE EQU * Это метка CLC TARGET , = C'ADDRESS 'Сравнить ячейку памяти' TARGET 'со строкой' ADDRESS 'BE THERE, если она равна метке программы' THERE '

Общепринятые стандарты, хотя и не обязательные, включают идентификацию регистров общего назначения с помощью мнемоники. В отличие от ассемблеров для некоторых других систем, таких как Язык ассемблера X86, мнемоники регистров не являются зарезервированными символами, а определяются с помощью операторов EQU в другом месте программы. Это улучшает читаемость программ на языке ассемблера и обеспечивает перекрестную ссылку использования регистров. Таким образом, обычно вы можете увидеть в программе на ассемблере следующее:

 R3 EQU 3 ... L R3, ZIGGY

Некоторые известные инструкция мнемоника BALR для вызова, сохраняющего адрес возврата в регистре до использования стеков, SVC, DIAG, и ЗАП.[1] Последняя вдохновила программиста на название утилиты SuperZAP под псевдонимом ВАМОЦАРТ, ср. SuperZap на Бесплатный онлайн-словарь по вычислительной технике.

Машинные инструкции System / 360 имеют длину одно, два или три полуслова (от двух до 6 байтов). Первоначально существовало четыре формата инструкций, обозначенных первыми двумя битами поля кода операции; z / Архитектура добавлены дополнительные форматы.

Инструкции ассемблера

Инструкции ассемблера, иногда называемые директивы в других системах - это запросы к ассемблеру на выполнение различных операций в процессе генерации кода. Например, CSECT означает «начать здесь часть кода»; ОКРУГ КОЛУМБИЯ определяет константу, которая будет помещена в объектный код.

Макросы и условная сборка

Базовый язык ассемблера не поддерживает макросы Более поздние версии ассемблера позволяют программисту группировать инструкции вместе в макросы и добавлять их в библиотеку, которую затем можно вызывать в других программах, обычно с параметрами, такими как средства препроцессора в C и родственных языках. Макросы могут включать условные инструкции ассемблера, такие как AIF (конструкция «if»), используемая для генерации другого кода в соответствии с выбранными параметрами. Это делает макро-средство этого ассемблера очень мощным. В то время как многострочные макросы в C являются исключением, определения макросов в ассемблере могут легко состоять из сотен строк.

Макросы операционной системы

Для большинства программ потребуются услуги от Операционная система, а ОС предоставляет стандартные макросы для запроса этих услуг. Это аналог Unix системные вызовы. Например, в MVS (позже z / OS), STORAGE (с параметром OBTAIN) динамически выделяет блок памяти, а GET извлекает следующую логическую запись из файла.

Однако, в отличие от системных вызовов Unix, макросы не стандартизированы для операционных систем. Даже такая простая вещь, как запись «последовательного файла», кодируется иначе, например в Z / OS, чем в Z / VSE.

Примеры

Следующий фрагмент показывает, как логика «Если SEX = 'M', добавить 1 к MALES; иначе добавить 1 к FEMALES» будет выполняться на ассемблере.

          CLI SEX, C'M 'Male? BNE IS_FEM Если нет, перейти к L 7, MALES Загрузить текущее значение MALES в регистр 7 AL 7, = F'1 'добавить 1 ST 7, MALES сохранить результат B GO_ON Завершено с этой частью IS_FEM EQU * A метка L 7 , FEMALES Загрузить текущее значение из FEMALES в регистр 7 AL 7, = F'1 'добавить 1 ST 7, FEMALES сохранить результат GO_ON EQU * - остальная часть программы - * MALES DC F'0' Счетчик для MALES (изначально = 0 ) FEMALES DC F'0 'Счетчик для FEMALES (изначально = 0)

Ниже приводится повсеместный Привет, мир программа и будет, выполняясь в операционной системе IBM, такой как OS / VS1 или же MVS, отобразите на консоли оператора слова Hello World:

 HELLO CSECT Название этой программы - «HELLO» * Зарегистрируйте здесь 15 баллов при входе из OPSYS или вызывающего абонента. STM 14,12,12 (13) Сохранение регистров 14,15 и 0–12 в области сохранения вызывающего абонента LR 12,15 Настройка базового регистра с адресом точки входа программы ИСПОЛЬЗОВАНИЕ HELLO, 12 Сообщите ассемблеру, какой регистр мы используем для pgm. база LA 15, СОХРАНИТЬ сейчас Укажите на нашу собственную область сохранения ST 15,8 (13) Установить прямую цепочку ST 13,4 (15) Установить обратную цепочку LR 13,15 Установить R13 на адрес новой области сохранения * -Конец обслуживания ( аналогично для большинства программ) - WTO 'Hello World' Write To Operator (макрос операционной системы) * L 13,4 (13) восстановить адрес в предоставленную вызывающим абонентом область сохранения XC 8 (4,13), 8 (13) Очистить цепочку пересылки LM 14,12,12 (13) Восстановить регистры как при записи DROP 12 Противоположно «USING» SR 15,15 Установить регистр 15 в 0, чтобы код возврата (R15) был нулем BR 14 Возврат к вызывающему * SAVE DS 18F Задайте 18 полных слов для сохранения регистров вызывающей программы. END HELLO. Это конец программы.

ВТО это макрос ассемблера, который генерирует вызов операционной системы. Из-за сохранения регистров и последующего восстановления и возврата эту небольшую программу можно использовать как пакетную программу, вызываемую непосредственно операционной системой. Язык управления заданиями (JCL) вот так:

//EXECPGM = ПРИВЕТ

или, альтернативно, его можно ВЫЗЫВАТЬ как подпрограмму из такой программы:

 ЗВОНИТЕ «ПРИВЕТ»

Версии

За исключением сборщиков для IBM System / 360 Модель 20 ассемблеры IBM были в значительной степени совместимы снизу вверх. Различия заключались в основном в сложности разрешенных выражений и в обработке макросов. OS / 360 Ассемблеры изначально были обозначены в соответствии с их требованиями к памяти.

Ассемблер пакета поддержки 7090/7094

Этот кросс-ассемблер работает на 7090 или 7094 system и использовалась, пока System / 360 находилась в разработке.[3][4]

Ассемблер базовой поддержки программирования

Ассемблер для BPS это настоящий «базовый ассемблер». Он был предназначен для загрузки с карт и будет работать в системе 8 КБ / 360 (кроме модели 20). Он не поддерживает инструкции макросов или расширенная мнемоника (например, BH вместо BC 2 для перехода, если код условия 2 указывает на высокое сравнение). Он может собирать только одну секцию управления и не позволяет фиктивные секции (определения структуры). Выражения в скобках не допускаются, а выражения ограничены тремя терминами с единственными операторами «+», «-» и «*».[3]:стр.59–61

Ассемблер базовой операционной системы

В Базовая операционная система имеет две версии ассемблера. Оба требуют 16 КБ памяти, один резидентный, а другой - дисковый.[5]:стр.7–8

Ассемблер D

Ассемблер D был DOS / 360 ассемблер для машин с объемом памяти 16 КБ. Он был в двух версиях: вариант 10 КБ для машин с минимальным объемом памяти 16 КБ и вариант 14 КБ для машин с 24 КБ. Ассемблер F-уровня также был доступен для машин DOS с 64 КБ и более. Ассемблеры D предлагали почти все возможности более высоких версий.[6]:стр.7

Ассемблер E и F

Ассемблер E был разработан для работы в системе OS / 360 с объемом оперативной памяти не менее 32 КБ, а самому ассемблеру требуется 15 КБ.[7]:стр.2 Ассемблер F может работать под DOS / 360 или OS / 360 в системе с памятью 64 КБ, а ассемблер требует 44 КБ.[8][9][10] Эти ассемблеры являются стандартной частью OS / 360; созданная версия была указана в генерация системы (SYSGEN).

Ассемблер системы программирования Model 44

"За некоторыми исключениями, IBM System / 360 Модель 44 Programming System Assembler Language - это отобранное подмножество языков, доступных для поддержки программирования IBM System / 360 ». Наиболее важно, что ассемблер Model 44 не поддерживал макросы и операторы продолжения. С другой стороны, он имел ряд функций, которых не было в других Ассемблеры System / 360 - особенно инструкции по обновлению изображение карты исходный набор данных, названный общим, и неявное определение SETA переменные ассемблера.[11]

Ассемблер G

"Assembler G" - это набор модификаций, внесенных в Assembler F в 1970-х годах Университет Ватерлоо (Ассемблер F был / является открытым исходным кодом). Улучшения в основном заключаются в улучшенной обработке ввода / вывода и улучшенной буферизации, что значительно ускоряет сборку.[12] «Ассемблер G» никогда не был продуктом IBM.

Ассемблер H

Ассемблер H версии 2 был анонсирован в 1981 году и включает поддержку расширенной архитектуры (XA), включая директивы AMODE и RMODE.[13]:стр.3–28 Он был изъят из продажи в 1994 году, а поддержка прекратилась в 1995 году. Его заменил ассемблер высокого уровня.[14]

Ассемблер XF

Assembler XF - это обновление Assembler F, которое включает новые инструкции архитектуры System / 370. Эта версия предоставляет общий ассемблер для систем OS / VS и DOS / VS. Другие изменения включают ослабление ограничений на выражения и обработку макросов. Assembler XF требует минимального размера раздела / области 64 КБ (виртуальный). Рекомендуемый размер - 128 КБ.[15]:стр.73

Ассемблер высокого уровня

Ассемблер высокого уровня (HLASM), объявленный в 1992 году как лицензионная программа, «становится переводчиком по умолчанию для операционных сред System / 370 (TM) и System / 390 (TM)». Ассемблер поддерживает операционные системы MVS, VSE и VM и их преемников. Начиная с версии 6 теперь он может работать под Linux на IBM Z и генерировать ELF или же COFF объектные файлы.[16] Он содержит длинный список улучшений, в основном повышающих удобство использования, и включает SLAC (Stanford Linear Accelerator) модификации Ассемблера H. Среди добавленных функций было указание на CSECT/DSECT для счетчика местоположения - список "используемых" регистров, активных в данный момент, указание того, читается ли переменная или записывается в перекрестной ссылке, и разрешающие имена символов в смешанном регистре.[17] В RSECT Директива (раздел управления только для чтения) позволяет ассемблеру проверять возможность повторного входа для отдельных разделов. RSECT ранее был «недокументирован и непоследовательно реализован в Assembler H.»[18]:стр.43 HLASM - текущий ассемблер для систем мэйнфреймов IBM по состоянию на 2012 год.

Специализированные версии

Ассемблер IBM System / 360 Model 44 PS

В IBM System / 360 Модель 44 Программирование System Assembler обрабатывает язык, который является «выбранным подмножеством» языков ассемблера OS / 360 и DOS / 360. Он не поддерживает инструкции хранения в хранилище (SS) или преобразовать в двоичный (CVB), преобразовать в десятичный (ССЗ), читать прямо (RDD) и написать прямо (WRD) инструкции.[19] Он включает четыре инструкции, уникальные для Model 44: Изменить маску приоритета (CHPM), Загрузить PSW Special (LPSX), Читать прямое слово (RDDW), и Написать прямое слово (WRDW). Он также включает директивы для обновления исходной программы, функции, выполняемой служебными программами в других системах (СКПТО, НАЗАД, NUM, ПРОПУСКАТЬ и ЗАВЕРШИТЬ). Это обеспечивает названный общий и неявно определен & SETA символы, но также имеет некоторые ограничения.[19]:стр.53,73

Ассемблер IBM System / 360 TSS

Ассемблер для Система / 360 Модель 67 Система разделения времени имеет ряд различий в директивах для поддержки уникальных функций TSS. В PSECT директива генерирует Секция управления прототипом содержащие перемещаемые адресные константы и изменяемые данные, используемые программой.[20]:стр.143

Сборщики не-IBM

Для специальных сред существует несколько IBM-совместимых ассемблеров.[21]

  • В Univac 90/60, 90/70 и 90/80 серия из Unisys был разработан, чтобы принять ассемблер формата IBM, поскольку серия машин была похожа на S / 360 и S / 370.
  • В Fujitsu Серия BS2000 также была построена как 370 подобная машина из того же ресурса, что и Univac, и все еще используется в некоторых частях Европы.[22]
  • ООО Дигнус Системы / ASM - это HLASM-совместимый ассемблер, который может работать как в системах IBM, так и в качестве кросс-ассемблера.[23]
  • Бесплатное ПО PC / 370, написанный Доном Хиггинсом, позже был куплен Микро Фокус.
  • z390 ассемблер и эмулятор System 390, также написанный Доном Хиггинсом и запрограммированный на Ява. Это открытый исходный код, доступный на http://www.z390.org/
  • Университет штата Пенсильвания разработал пакет под названием ПОМОЩЬ, который включает ассемблер и интерпретатор System 370.
  • Tachyon Software LLC продает Верстак Tachyon Assembler который работает в Windows, Linux / x86, Linux для S / 390 и zSeries, AIX и Solaris.[24]
  • Ассемблер GNU (газ) является частью Коллекция компиляторов GNU (gcc) для Linux на OS / 390 и IBM Z. Этот ассемблер имеет уникальный синтаксис, несовместимый с другими ассемблерами для архитектур IBM.

Смотрите также

Рекомендации

  1. ^ а б «HLASM - Список всех кодов операций, расширенной мнемоники и функциональных кодов, отсортированных по мнемонике». Получено 14 января, 2013.
  2. ^ Корпорация IBM. Принципы работы IBM System / 360 (PDF). Получено 6 декабря, 2018.
  3. ^ а б Корпорация IBM (1965 г.). IBM System / 360 Basic Programming Support Базовый язык ассемблера (PDF).
  4. ^ Корпорация IBM (1964 г.). Пакет поддержки IBM 7090/7094 для IBM System / 360 (PDF).
  5. ^ Корпорация IBM (1965 г.). Ассемблер спецификаций языка базовой операционной системы IBM System / 360 ('16K Disk / Tape) (PDF).
  6. ^ Корпорация IBM (1970). Язык ассемблера дисковых и ленточных операционных систем IBM System / 360 (PDF).
  7. ^ Корпорация IBM (1966 г.). Руководство по программной логике ассемблера операционной системы IBM System / 360 (32K) (PDF).
  8. ^ Корпорация IBM (1968 г.). Программная логика ассемблера дисковой операционной системы IBM System / 360 (F) (PDF).
  9. ^ Корпорация IBM (1971 г.). Программная логика IBM System / 360 Assembler (F) (PDF).
  10. ^ Корпорация IBM (1974 г.). Язык ассемблера ОС IBM (PDF).
  11. ^ Корпорация IBM (1966 г.). Язык ассемблера системы программирования IBM System / 360 Model 44 (PDF). п. 73. Получено 2 июля, 2019.
  12. ^ Стэнфордский центр линейных ускорителей. «ОБЩИЕ ИЗМЕРЕНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ IBM SYSTEM 360 (SLAC-PUB-715)» (PDF). Получено 8 октября, 2012.
  13. ^ Корпорация IBM (1984). Блокнот для преобразования MVS / расширенной архитектуры (PDF).
  14. ^ Корпорация IBM. "5668-962 IBM Assembler H, версия 2, выпуск 1.0". Получено 8 октября, 2012.
  15. ^ Корпорация IBM (1973). Руководство программиста OS / VS Assembler (PDF).
  16. ^ Корпорация IBM (2008 г.). Ассемблер высокого уровня для Linux на zSeries Руководство пользователя (PDF).
  17. ^ Корпорация IBM. «Письмо-объявление № 292-244». Получено 8 октября, 2012.
  18. ^ Корпорация IBM (1995 г.). IBM High Level Assembler for MVS & VM & VSE Release 2 Руководство по презентации (PDF). Архивировано из оригинал (PDF) 23 января 2016 г.
  19. ^ а б Корпорация IBM (1966 г.). Язык ассемблера системы программирования IBM System / 360 Model 44 (PDF).
  20. ^ Корпорация IBM (1976). Руководство программиста IBM Time Sharing System Assembler (PDF).
  21. ^ Олкок, Дэвид. "Часто задаваемые вопросы о Dave's z / Architecture Assembler". Планета МВС. Получено 15 декабря, 2012.
  22. ^ Руководства Fujitsu ASSEMH доступны по адресу http://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435 (Дата обращения 27 февраля 2016)
  23. ^ Дигнус, ООО. «Системы / АСМ». Получено 15 декабря, 2012.
  24. ^ ООО «Тахион Софтвер». "Tachyon Software". Получено 15 декабря, 2012.
Примечания
  • Радд, Энтони. Иллюстрированное руководство для программистов на ассемблере z / Architecture. Создать пространство (2012).

внешняя ссылка