Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

BAL также мнемонические из «Branch И Link» инструкции . [1]

Общие характеристики [ править ]

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

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

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

Еще одна причина использовать ассемблер заключается в том, что не все функции операционной системы могут быть доступны на языках высокого уровня. Интерфейс прикладных программ операционных систем мэйнфреймов определяется как набор «макросов» на языке ассемблера, которые обычно вызывают аппаратные инструкции Supervisor Call (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 ЗДЕСЬ EQU * Это ярлык CLC TARGET, = C'ADDRESS 'Сравнить ячейку памяти' TARGET 'со строкой' ADDRESS ' Ветвь BE THERE, если она равна метке программы THERE

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

 R3 EQU 3 ... L R3, ZIGGY

Некоторые известные инструкции мнемоника BALRдля вызова хранящего обратный адрес в регистре , прежде чем были использованы стеки SVC, DIAGи ZAP. [1] Последняя вдохновила программиста на название утилиты SuperZAP под псевдонимом WAMOZART , ср. SuperZap в бесплатном он-лайн словаре по вычислительной технике .

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

Инструкции ассемблера [ править ]

Инструкции ассемблера, иногда называемые директивами в других системах, представляют собой запросы к ассемблеру для выполнения различных операций в процессе генерации кода. Например, CSECTозначает «начать здесь часть кода»; DCопределяет константу, которая будет помещена в объектный код.

Макросы и условная сборка [ править ]

Базовый язык ассемблера не поддерживает макросы . Более поздние версии ассемблера позволяют программисту группировать инструкции в макросы и добавлять их в библиотеку, которую затем можно вызывать в других программах, обычно с параметрами, такими как средства препроцессора в 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, МУЖЧИНЫ сохраняют результат B GO_ON Закончено с этой порцией IS_FEM EQU * Метка L 7, FEMALES Загрузить текущее значение из FEMALES в регистр 7  AL 7, = F'1 'добавить 1  ST 7, СУКИ сохраняют результат GO_ON EQU * - остальная часть программы - * MALES DC F'0 'Счетчик для MALES (изначально = 0) FEMALES DC F'0 'Счетчик для САМОК (изначально = 0)

Ниже представлена ​​вездесущая программа Hello world , которая, выполняясь в операционной системе 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, СОХРАНИТЬ. Укажите на нашу собственную зону сохранения. СТ 15,8 (13) Задняя передняя цепь ST 13,4 (15) Цепь задняя  LR 13,15 Установить R13 для адреса новой области сохранения * -окончание уборки (аналогично для большинства программ) - Запись оператору WTO Hello World (макрос операционной системы) * 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 полных слов для сохранения регистров вызывающей программы  КОНЕЦ ПРИВЕТ Это конец программы

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

// EXEC PGM = ПРИВЕТ  

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

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

Версии [ править ]

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

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

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

Ассемблер для поддержки базового программирования [ править ]

Ассемблер для BPS - это настоящий «базовый ассемблер». Он был предназначен для загрузки с карт и будет работать на 8-килобайтной системе System / 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).

Ассемблер системы программирования модели 44 [ править ]

«За некоторыми исключениями, язык ассемблера системы программирования IBM System / 360 Model 44 является выбранным подмножеством языков, доступных для поддержки программирования IBM System / 360». Наиболее важно то, что ассемблер Model 44 не поддерживал макросы и операторы продолжения. С другой стороны, у него был ряд функций, которых нет в других ассемблерах System / 360, в частности инструкции по обновлению набора данных источника изображения карточки , названного common, и неявное определение SETAпеременных ассемблера. [11]

Ассемблер G [ править ]

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

Ассемблер H [ править ]

Ассемблер H версии 2 был анонсирован в 1981 году и включает поддержку расширенной архитектуры (XA), включая директивы AMODE и RMODE. [13] : p.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) для Assembler H. Среди добавленных функций было указание на CSECT/DSECTдля счетчика местоположения - список "используемых" регистров, активных в данный момент, указание того, читается ли переменная или записывается в перекрестной ссылке, и разрешающие имена символов в смешанном регистре. [17]RSECT директива (только для чтения , секция управления) позволяет сборщику проверки реентерабельности на основе каждого раздела. RSECTранее был «недокументирован и непоследовательно реализован в Assembler H.» [18] : стр.43 HLASM - это текущий ассемблер для систем мэйнфреймов IBM по состоянию на 2012 год.

Специализированные версии [ править ]

Ассемблер IBM System / 360 Model 44 PS [ править ]

IBM System / 360 Model 44 Программирование системы Ассемблер обрабатывает язык , который является «выбрано подмножество» из OS / 360 и DOS / 360 ассемблере. Он не поддерживает инструкции «хранилище в хранилище» (SS) или преобразование в двоичный ( CVB), преобразование в десятичное ( CVD), чтение direct ( RDD) и запись direct ( WRD) инструкций. [19] Он включает четыре инструкции, уникальные для модели 44: изменение маски приоритета ( CHPM), загрузка специального PSW ( LPSX), чтение прямого слова ( RDDW) и запись прямого слова (WRDW). Она также включает в себя директиву для обновления исходной программы, функция выполняется сервисными программами в других системах ( SKPTO, REWND, NUM, OMITи ENDUP). Он предоставляет именованные общие и неявно определенные &SETAсимволы, но также имеет некоторые ограничения. [19] : стр.53,73

Ассемблер IBM System / 360 TSS [ править ]

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

Ассемблеры сторонних производителей [ править ]

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

  • В 90/60, 90/70 и 90/80 UNIVAC серии из Unisys был разработан , чтобы принять IBM-формат ассемблер, так как машина серии была workalike на S / 360 и S / 370.
  • Серия Fujitsu BS2000 также была построена как 370 подобная машина из того же ресурса, что и Univac, и до сих пор используется в некоторых частях Европы. [22]
  • Dignus LLC Systems / ASM - это HLASM-совместимый ассемблер, который может работать как в системах IBM, так и в качестве кросс-ассемблера. [23]
  • Бесплатное программное обеспечение PC / 370 , написанное Доном Хиггинсом, позже было приобретено Micro Focus .
  • z390 - это ассемблер и эмулятор System 390, также написанный Доном Хиггинсом и запрограммированный на Java . Это открытый исходный код, доступный по адресу http://www.z390.org/.
  • Университет штата Пенсильвания разработал пакет под названием ASSIST , который включает ассемблер и интерпретатор System 370.
  • Tachyon Software LLC продает Tachyon Assembler Workbench, который работает в Windows, Linux / x86, Linux для S / 390 и zSeries, AIX и Solaris. [24]
  • GNU Assembler (газ) является частью GNU Compiler Collection (GCC) для Linux на OS / 390 и IBM Z . Этот ассемблер имеет уникальный синтаксис, несовместимый с другими ассемблерами для архитектур IBM.

См. Также [ править ]

  • IBM System / 360
  • язык ассемблера
  • IBM-совместимые мэйнфреймы на базе ПК - список совместимых машин или виртуальных машин
  • Дизассемблер - обратный процесс сборки, реконструкция исходного кода сборки из машинного кода.

Ссылки [ править ]

  1. ^ a b «HLASM - Список всех кодов операций, расширенной мнемоники и функциональных кодов, отсортированных по мнемонике» . Проверено 14 января 2013 года . CS1 maint: обескураженный параметр ( ссылка )
  2. ^ Корпорация IBM. Принципы работы IBM System / 360 (PDF) . Проверено 6 декабря 2018 года . CS1 maint: обескураженный параметр ( ссылка )
  3. ^ а б IBM Corporation (1965). Базовый язык ассемблера для поддержки программирования IBM System / 360 (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 года . CS1 maint: обескураженный параметр ( ссылка )
  12. ^ Стэнфордский центр линейных ускорителей. «ОБЩИЕ ИЗМЕРЕНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ IBM SYSTEM 360 (SLAC-PUB-715)» (PDF) . Проверено 8 октября 2012 года . CS1 maint: обескураженный параметр ( ссылка )
  13. ^ Корпорация IBM (1984). Записная книжка по преобразованию MVS / расширенной архитектуры (PDF) .
  14. ^ Корпорация IBM. «5668-962 IBM Assembler H версии 2, выпуск 1.0» . Проверено 8 октября 2012 года . CS1 maint: обескураженный параметр ( ссылка )
  15. ^ Корпорация IBM (1973). Руководство программиста на ассемблере OS / VS (PDF) .
  16. ^ Корпорация IBM (2008). Руководство пользователя High Level Assembler для Linux на zSeries (PDF) .
  17. ^ Корпорация IBM. «Письмо-объявление № 292-244» . Проверено 8 октября 2012 года . CS1 maint: обескураженный параметр ( ссылка )
  18. ^ Корпорация IBM (1995). IBM High Level Assembler for MVS & VM & VSE Release 2 Presentation Guide (PDF) . Архивировано из оригинального (PDF) 23 января 2016 года. CS1 maint: обескураженный параметр ( ссылка )
  19. ^ a b Корпорация IBM (1966 г.). Язык ассемблера системы программирования IBM System / 360 Model 44 (PDF) .
  20. ^ Корпорация IBM (1976). Руководство программиста IBM Time Sharing System Assembler (PDF) .
  21. Алкок, Дэвид. "Часто задаваемые вопросы о сборщике архитектуры z / Dave" . Планета МВС . Проверено 15 декабря 2012 года . CS1 maint: обескураженный параметр ( ссылка )
  22. ^ Руководства Fujitsu ASSEMH доступны по адресу http://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435 (дата обращения 27.02.2016)
  23. ^ Дигнус, ООО. «Системы / АСМ» . Проверено 15 декабря 2012 года . CS1 maint: обескураженный параметр ( ссылка )
  24. ^ Tachyon Software LLC. «Tachyon Software» . Проверено 15 декабря 2012 года . CS1 maint: обескураженный параметр ( ссылка )
Заметки
  • Радд, Энтони. Иллюстрированное руководство для программистов на ассемблере z / Architecture. Создать пространство (2012).

Внешние ссылки [ править ]

  • Введение программиста в язык ассемблера IBM System / 360 (текст для учащихся)
  • Ассемблер высокого уровня для z / OS & z / VM & z / VSE Language Reference
  • Внимательный программист: ассемблер мэйнфреймов IBM
  • Базовое программирование на языке ассемблера IBM Mainframe
  • Введение в программирование на ассемблере OS / 390 [ постоянная мертвая ссылка ]
  • Веб-компилятор IBM Assembler F для небольших экспериментов
  • ASSIST - Ассемблерная система для обучения студентов и системного обучения