Базовый язык ассемблера ( 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 .
Набор команд состоит из низкоуровневых операций, поддерживаемых оборудованием, таких как:
Инструкция | Мнемонический | Описание |
---|---|---|
НАГРУЗКА | L | копировать значение из памяти в регистр |
ХРАНИТЬ | ST | скопировать значение из регистра в память |
СРАВНИВАТЬ | C | сравнить значение регистра со значением в памяти |
Сдвиг | SLL, SRL | перемещать биты регистра влево или вправо |
НАЧАТЬ ПОДКАНАЛ | SSCH | начать операцию ввода / вывода подканала, используя строку командных слов канала |
Чрезвычайная простота этих операций означает, что исходный код программы, написанной на ассемблере, обычно будет намного длиннее, чем эквивалентная программа, скажем, на COBOL или Fortran . В прошлом часто считалось, что скорость написанных вручную программ на ассемблере компенсирует этот недостаток, но с появлением оптимизирующих компиляторов, C для мэйнфреймов и других достижений ассемблер потерял большую часть своей привлекательности. IBM продолжает обновлять ассемблер, и он все еще используется, когда первостепенное значение имеет скорость или очень точный контроль. Тем не менее, все последователи IBM для BAL включают в себя сложное средство макросов, которое позволяет писать гораздо более компактный исходный код.
Еще одна причина использовать ассемблер заключается в том, что не все функции операционной системы могут быть доступны на языках высокого уровня. Интерфейс прикладных программ операционных систем мэйнфреймов определяется как набор «макросов» на языке ассемблера, которые обычно вызывают аппаратные инструкции 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).
Ассемблер системы программирования Model 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
Для специальных сред существует несколько 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-совместимые мэйнфреймы на базе ПК - список совместимых машин или виртуальных машин
- Дизассемблер - обратный процесс сборки, реконструкция исходного кода сборки из машинного кода.
Рекомендации
- ^ a b «HLASM - Список всех кодов операций, расширенной мнемоники и функциональных кодов, отсортированных по мнемонике» . Проверено 14 января 2013 года .
- ^ Корпорация IBM. Принципы работы IBM System / 360 (PDF) . Проверено 6 декабря 2018 года .
- ^ а б Корпорация IBM (1965 г.). Базовый язык ассемблера для поддержки программирования IBM System / 360 (PDF) .
- ^ Корпорация IBM (1964 г.). Пакет поддержки IBM 7090/7094 для IBM System / 360 (PDF) .
- ^ Корпорация IBM (1965 г.). Ассемблер спецификаций языка базовой операционной системы IBM System / 360 ('16K Disk / Tape) (PDF) .
- ^ Корпорация IBM (1970). Язык ассемблера дисковых и ленточных операционных систем IBM System / 360 (PDF) .
- ^ Корпорация IBM (1966 г.). Руководство по программной логике ассемблера операционной системы IBM System / 360 (32K) (PDF) .
- ^ Корпорация IBM (1968 г.). Программная логика ассемблера дисковой операционной системы IBM System / 360 (F) (PDF) .
- ^ Корпорация IBM (1971 г.). Логика программы IBM System / 360 Assembler (F) (PDF) .
- ^ Корпорация IBM (1974 г.). Язык ассемблера ОС IBM (PDF) .
- ^ Корпорация IBM (1966 г.). Язык ассемблера системы программирования IBM System / 360 Model 44 (PDF) . п. 73 . Проверено 2 июля 2019 года .
- ^ Стэнфордский центр линейных ускорителей. «ОБЩИЕ ИЗМЕРЕНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ IBM SYSTEM 360 (SLAC-PUB-715)» (PDF) . Проверено 8 октября 2012 года .
- ^ Корпорация IBM (1984). Записная книжка по преобразованию MVS / расширенной архитектуры (PDF) .
- ^ Корпорация IBM. «5668-962 IBM Assembler H версии 2, выпуск 1.0» . Проверено 8 октября 2012 года .
- ^ Корпорация IBM (1973). Руководство программиста на ассемблере OS / VS (PDF) .
- ^ Корпорация IBM (2008 г.). Руководство пользователя High Level Assembler для Linux на zSeries (PDF) .
- ^ Корпорация IBM. «Письмо-объявление № 292-244» . Проверено 8 октября 2012 года .
- ^ Корпорация IBM (1995 г.). IBM High Level Assembler for MVS & VM & VSE Release 2 Presentation Guide (PDF) . Архивировано из оригинального (PDF) 23 января 2016 года.
- ^ а б Корпорация IBM (1966 г.). Язык ассемблера системы программирования IBM System / 360 Model 44 (PDF) .
- ^ Корпорация IBM (1976 г.). Руководство программиста IBM Time Sharing System Assembler (PDF) .
- ^ Олкок, Дэвид. "Часто задаваемые вопросы о сборщике архитектуры z / Dave" . Планета МВС . Проверено 15 декабря 2012 года .
- ^ Руководства Fujitsu ASSEMH доступны по адресу http://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435 (последнее посещение - 27 февраля 2016 г.)
- ^ Дигнус, ООО. «Системы / АСМ» . Проверено 15 декабря 2012 года .
- ^ ООО «Тахион Софтвер». «Tachyon Software» . Проверено 15 декабря 2012 года .
- Заметки
- Радд, Энтони. Иллюстрированное руководство для программистов на ассемблере z / Architecture. Создать пространство (2012).
Внешние ссылки
- Введение программиста в язык ассемблера IBM System / 360 (текст для учащихся)
- Ассемблер высокого уровня для z / OS & z / VM & z / VSE Language Reference
- Внимательный программист: ассемблер мэйнфреймов IBM
- Базовое программирование на языке ассемблера IBM Mainframe
- Введение в программирование на ассемблере OS / 390 [ постоянная мертвая ссылка ]
- Веб-компилятор IBM Assembler F для небольших экспериментов
- ASSIST - Ассемблерная система для обучения студентов и системного обучения