WikiDer > Сборка высокого уровня
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Разработчики) | Рэндалл Хайд |
---|---|
Стабильный выпуск | 2.16 / 6 июля 2011 г. |
Репозиторий | Sourceforge |
Написано в | язык ассемблера |
Операционная система | Windows, Linux, FreeBSD, macOS |
Платформа | IA-32 |
Доступно в | английский |
Тип | Ассемблер |
Лицензия | Всеобщее достояние |
Интернет сайт | плантации-производства |
Сборка высокого уровня (HLA) это язык ассемблера высокого уровня разработан Рэндалл Хайд. Он позволяет использовать языковые конструкции более высокого уровня, чтобы помочь как новичкам, так и опытным разработчикам ассемблера. Он полностью поддерживает расширенные типы данных и объектно-ориентированного программирования. Он использует синтаксис, основанный на нескольких языки программирования высокого уровня (HLLs), такие как Паскаль, Ада, Модула-2, и C ++, чтобы позволить создавать читаемые программы на языке ассемблера и позволить программистам HLL изучать HLA как можно быстрее.
Истоки и цели
HLA изначально задумывался как инструмент для обучения программированию на ассемблере на уровне колледжа и университета. Цель состоит в том, чтобы использовать имеющиеся у студентов знания программирования при изучении языка ассемблера, чтобы максимально быстро научить их. Большинство студентов, проходящих курс программирования на ассемблере, уже знакомы с высокоуровневым поток управления структуры, такие как IF, WHILE, FOR и т. д. HLA позволяет студентам немедленно применять эти знания программирования к кодированию на языке ассемблера на ранних этапах своего курса, позволяя им освоить другие обязательные предметы в ассемблере, прежде чем научиться кодировать низкоуровневые формы этих управляющие структуры. Книга Искусство программирования на языке ассемблера Рэндалл Хайд использует для этой цели HLA.[1]
Ассемблер высокого и низкого уровня
Ассемблер HLA v2.x поддерживает те же машинные инструкции низкого уровня, что и обычный ассемблер низкого уровня. Разница в том, что ассемблеры высокого уровня, такие как HLA, Ассемблер макросов Microsoft (MASM) или Турбо Ассемблер (TASM), на Intel x86 семейство процессоров, также поддерживает операторы, подобные языку высокого уровня, такие как IF, WHILE и т. д., и директивы объявления более сложных данных, такие как структуры-записи, союзы и даже классы.
В отличие от большинства других инструментов ассемблера, компилятор HLA включает Стандартная библиотека с тысячами функции, процедуры, и макросы которые можно использовать для создания полных приложений с помощью языка высокого уровня. Пока язык ассемблера библиотеки не новы, язык, включающий большую стандартизованную библиотеку, делает программистов гораздо более склонными использовать такой библиотечный код, а не просто писать свои собственные библиотечные функции.
HLA поддерживает все те же низкоуровневые машинные инструкции, что и другие ассемблеры x86. Кроме того, высокоуровневые управляющие структуры HLA основаны на структурах MASM и TASM, которые на несколько лет предшествовали появлению HLA-подобных функций. В HLA низкоуровневый ассемблерный код можно написать так же легко, как и в любом другом ассемблере, просто игнорируя конструкции HLL-control. В отличие от HLL, таких как Pascal и C (++), HLA не требует встроенных операторов asm. В HLA HLL-подобные функции, по-видимому, предоставляют помощь начинающим программистам на ассемблере, сглаживая кривую обучения, с предположением, что они прекратят использование этих операторов, как только овладеют набором команд низкого уровня. На практике многие опытные программисты продолжают использовать HLL-подобные операторы в HLA, MASM и TASM еще долгое время после освоения низкоуровневого набора команд, но обычно это делается для улучшения читабельности.
Также можно написать высокий уровень программы, использующие HLA, что позволяет избежать утомительного программирования на языке ассемблера низкого уровня. Некоторые программисты на ассемблере сразу отвергают HLA, потому что он позволяет программистам это делать. Однако поддержка как высокоуровневого, так и низкоуровневого программирования дает любому языку расширенный диапазон применимости. Если нужно выполнять только низкоуровневое кодирование, это возможно. Если необходимо написать более читаемый код, можно использовать операторы более высокого уровня.
Отличительные черты
Две особенности HLA отличают его от других ассемблеров x86: мощная макросистема (язык времени компиляции) и стандартная библиотека HLA.
Макросистема
Язык времени компиляции HLA позволяет легко расширять язык, даже создавать небольшие предметно-ориентированные языки чтобы помочь легко решить типичные проблемы программирования. Макрос stdout.put
Кратко описанный ранее - хороший пример сложного макроса, который может упростить программирование. Рассмотрим следующий вызов этого макроса:
stdout.put ("I =", я, "s =", s, "u =", u, "r =", r: 10: 2, nl);
Макрос stdout.put обрабатывает каждый из аргументов, чтобы определить тип аргумента, а затем вызывает соответствующую процедуру в стандартной библиотеке HLA для обработки вывода каждого из этих операндов.
Большинство ассемблеров предоставляют своего рода возможности макросов: преимущество, которое HLA предлагает перед другими ассемблерами, состоит в том, что он может обрабатывать параметры макросов, такие как r: 10: 2
с помощью обширных строковых функций HLA во время компиляции и средств макросов HLA можно вывести типы переменных и использовать эту информацию для управления расширением макросов.
Макроязык HLA предоставляет специальный Без контекста макро-объект. Эта функция позволяет легко писать макросы, охватывающие другие разделы кода, через начало и прекращение пара макросов (вместе с необязательной средний вызовы макросов, которые доступны только между макросами начало – конец). Например, с помощью этого макроса можно написать полностью рекурсивно-вложенный оператор SWITCH – CASE – DEFAULT – ENDSWITCH.
Благодаря контекстно-независимой конструкции средств макроса HLA эти операторы switch..case..default..endswitch могут быть вложенными, и генерируемый код вложенных операторов не будет конфликтовать с внешними операторами.
Язык времени компиляции
Макросистема HLA на самом деле является подмножеством более крупной функции, известной как HLA. Язык времени компиляции (CTL). HLA CTL - это интерпретируемый язык, который доступен в исходном файле программы HLA. Интерпретатор выполняет операторы HLA CTL во время компиляции исходного файла HLA; отсюда и название язык времени компиляции.
HLA CTL включает множество операторов управления, таких как #IF, #WHILE, #FOR, #PRINT, оператор присваивания.[требуется разъяснение] и так далее. Также можно создавать переменные и константы времени компиляции (включая структурированные типы данных, такие как записи и объединения). HLA CTL также предоставляет сотни встроенных функций (включая очень богатый набор функций сопоставления строк и шаблонов). HLA CTL позволяет программистам создавать CTL программы которые сканируют и анализируют строки, позволяя этим программистам создавать встроенный специфичные для домена языки (EDSL, также называемые мини-языки). В stdout.put
Макрос, появившийся ранее, является примером такого EDSL. Макрос put (в пространстве имен stdout, отсюда и название стандартный вывод.put) анализирует свой список параметров макроса и выдает код, который распечатает его операнды.
Стандартная библиотека
Стандартная библиотека HLA - это обширный набор предварительно записанных подпрограмм и макросов (таких как макрос stdout.put, описанный выше), которые облегчают жизнь программистам, избавляя их от необходимости изобретать колесо каждый раз, когда они пишут новое приложение. Возможно, не менее важно, что стандартная библиотека HLA позволяет программистам писать переносимые приложения, работающие под Windows или Linux, с помощью не более чем перекомпиляции исходный код. Словно Стандартная библиотека C для языка программирования C, Стандартная библиотека HLA позволяет абстрагироваться от низкоуровневых Операционная система (ОС), поэтому тот же набор ОС интерфейсы прикладного программирования (API) могут обслуживать все операционные системы, поддерживаемые HLA. В то время как язык ассемблера позволяет выполнять любые необходимые вызовы ОС, а программы используют набор API стандартной библиотеки HLA, писать программы, переносимые для ОС, легко.
Стандартная библиотека HLA предоставляет тысячи функций, процедур и макросов. Хотя список со временем меняется, по состоянию на середину 2010 г. для HLA v2.12 он включал функции в следующие категории:
- Обработка аргументов командной строки
- Объявление и манипулирование массивом (динамическим)
- Битовые манипуляции
- Манипуляции с Blob (большими двоичными объектами)
- Манипуляции с персонажами
- Конверсии
- Управление набором символов
- Функции даты и времени
- Объектно-ориентированный файловый ввод-вывод
- Стандартный файловый ввод / вывод
- Функции управления файловой системой, например, удаление, переименование, изменение каталога
- Декларации и функции, связанные с HLA
- Библиотека объектов Windows HLA: объектно-ориентированная среда для программирования Win32
- Управление связным списком
- Математические функции
- Распределение памяти и управление
- API для FreeBSD
- API для Linux
- API для MacOS
- API для Win32
- Функции текстовой консоли
- Поддержка сопрограмм
- Поддержка переменных окружения
- Поддержка обработки исключений
- Поддержка файлов с отображением памяти
- Поддержка сокетов и клиент-серверных объектов
- Поддержка потоков и синхронизации
- Функции таймера
- Поддержка сопоставления с образцом для регулярных выражений и контекстно-свободных языков
- Генераторы случайных чисел
- Поддержка удаленного вызова процедур
- Стандартные функции вывода ошибок
- Стандартные функции вывода
- Стандартные функции ввода
- Строковые функции
- Стол (ассоциативная) поддержка
- Строковые функции с нулевым завершением
Дизайн
Языковая система HLA v2.x - это инструмент, управляемый из командной строки, который состоит из нескольких компонентов, включая ракушка программа (например, hla.exe в Windows), компилятор языка HLA (например, hlaparse.exe), низкоуровневый переводчик (например, HLABE или HLA Back Engine), компоновщик (link.exe в Windows, ld в Linux) и другие инструменты, такие как компилятор ресурсов для Windows. Версии до 2.0 полагались на внутреннюю часть внешнего ассемблера; версии 2.x и более поздние версии HLA используют встроенный HLABE как средство форматирования серверного объектного кода.
HLA ракушка приложение обрабатывает параметры командной строки и направляет соответствующие файлы каждой из программ, составляющих систему HLA. Он принимает в качестве ввода .hla
файлы (исходные файлы HLA), .как м
файлы (исходные файлы для ассемблеров MASM, TASM, FASM, NASM или Gas), .obj
файлы для ввода компоновщику и .rc
файлы (для использования компилятором ресурсов).
Перевод исходного кода
Первоначально инструмент HLA v1.x компилировал свой исходный код в промежуточный исходный файл, который бэкэнд ассемблер, такой как MASM, TASM, плоский ассемблер (FASM), Сетевой ассемблер (NASM) или Ассемблер GNU (Gas) переводится в файл объектного кода нижнего уровня. Начиная с HLA v2.0, HLA включал собственный HLA Back Engine (HLABE), который обеспечил трансляцию низкоуровневого объектного кода. Однако с помощью различных параметров командной строки HLA v2.x по-прежнему может преобразовывать исходный файл HLA в исходный файл, совместимый с одним из этих ассемблеров.
HLA Back Engine
HLA Back Engine (HLABE) - это серверная часть компилятора, которая переводит внутренний промежуточный язык на низкоуровневый Переносимый исполняемый файл (PE), общий формат объектного файла (COFF), Исполняемый и связываемый формат (ELF) или Мачо объектный код. HLABE программа в основном состоит из операторов передачи данных (байтов), операторов 32-битных перемещаемых адресов, инструкций передачи управления x86 и различных директив. Помимо преобразования операторов байта и перемещаемого адреса в формат низкоуровневого объектного кода, HLABE также обрабатывает оптимизацию смещения ветвления (выбирая самую короткую возможную форму инструкции ветвления).
Хотя HLABE включен в компилятор HLA v2.x, на самом деле это отдельный продукт. Это общественное достояние и открытый исходный код (размещен на SourceForge.net).
Смотрите также
Примечания
- ^ "Искусство программирования на языке ассемблера". Архивировано из оригинал на 2018-03-29. Получено 2010-02-12.
Рекомендации
- Ричард Блюм, Профессиональный язык ассемблера, Wiley, 2005 г., ISBN 0-7645-7901-0, п. 42
- Рэндалл Хайд, Напишите отличный код: понимание машины, Пресс без крахмала, 2004, ISBN 1-59327-003-8, pp. 14–15 и используется на протяжении всей книги.
- Рэндалл Хайд, Искусство ассемблера, 2-е издание, Пресс без крахмала, 2010, ISBN 1-59327-207-3, используется в книге
дальнейшее чтение
- Пол Пэнкс (29 июня 2005 г.), HLA: язык программирования высокого уровня на ассемблере, Linux журнал