Асемблювання
Асемблюва́ння (від англ. assemble — збирати) ― процес транслювання початкового коду програми на мові асемблер на об’єктну мову.
Під час асемблювання кожен виконуваний оператор асемблера перетворюється у відповідну йому машинну команду. У більшості випадків цей процес відбувається у два етапи: асемблювання й компонування.
Найпростіший з асемблерів (абсолютний асемблер) генерує програму в абсолютних адресах (тобто таку, що не потребує налаштовування адрес під час її завантаження в оперативну пам’ять), що часто використовують у записі програм у постійну пам’ять (постійні та напівпостійні запам’ятовувальні пристрої). Що нижчий рівень мови програмування, то ближча специфіка роботи програми до процесора, для якого її написано. Мови низького рівня складніші й потребують вужчої спеціалізації програміста, оскільки написана на асемблері програма для процесорів одного типу не завжди придатна для роботи з іншими процесорами, зате такі програми компактні та швидкодійні.
Окрім транслювання багато програм-асемблерів підтримують й іншу функціональність, корисну під час розроблення системного й прикладного програмного забезпечення ― вибір формату об’єктного модуля, генерування символьної інформації (наприклад, відлагоджувальної), різноманітні директиви на кшталт EXTERN чи GLOBAL, макрокоманди тощо.
Директива асемблера ― мовна конструкція, яка не транслюється в машинний код, а слугує для контролю асемблювання програми. Директиви дають змогу керувати формуванням лістинга (друкованого списку рядків комп’ютерного коду або цифрових даних у зручній для сприйняття людиною формі) асемблювання, розподілом пам’яті, визначати символи та дані тощо. Лістинг асемблювання містить результат роботи асемблера. У ньому можна побачити, який машинний код згенеровано відповідно до кожної машинної команди. Лістинг використовують для налагодження й документування програми.
Під час асемблювання програми виконуються такі кроки:
- аналізування вхідного модуля на наявність синтаксичних помилок;
- видавання протоколу роботи компілятора лістинга та аварійних повідомлень про помилки;
- генерування об’єктного модуля.
Кожний перегляд тексту програмного модуля компілятором називають проходом. Компілятор двічі переглядає програму з асемблера, тобто робить два проходи. Такі компілятори називають двопрохідними. На першому проході транслятор знаходить багато помилок (але не всі) і будує деякі важливі таблиці, дані з яких використовують на наступних кроках.
Спочатку кожен рядок асемблера обробляє спеціальна програма транслятора — лексичний аналізатор, який розбиває кожен рядок на лексеми — логічно неподільні одиниці мови: імена, числа, рядки символів, розділювачі, коментарі. На етапі лексичного аналізу виявляють лексичні помилки, коли деяка група символів не може бути віднесена до жодного з класів лексем.
Після розбивання рядка асемблера на лексеми починається другий етап обробки рядка — етап синтаксичного аналізу. Його виконує програма транслятора — синтаксичний аналізатор, який будує з лексем складніші конструкції рядка: поля мітки, коди операцій та операндів. Особливу увагу на цьому етапі приділено іменам користувача: синтаксичний аналізатор заносить їх у спеціальну таблицю імен (часто її ще називають таблицею символічних імен або таблицею символів). Разом з кожним ім’ям у цю таблицю заносять й атрибути імені. Синтаксичний аналізатор може виявити й помилки, що стосуються модуля в цілому, наприклад, перевищення максимальної довжини певного сегмента, відсутність сегмента стека (від. англ. stack — «стос», різновид лінійного списку, структура даних, яка працює за принципом «останнім прийшов — першим пішов») у головному модулі, використання мітки команди в пропозиції резервування пам’яті тощо. На другому проході синтаксичний аналізатор виявляє всі помилки в програмному модулі й однозначно визначає формат кожної команди.
Останній етап роботи транслятора ― генерування об’єктного модуля. На цьому етапі всі числа перетворюються у внутрішнє машинне представлення, записується бітове подання всіх команд, оформляється паспорт об’єктного модуля. Далі отриманий об’єктний модуль записується в бібліотеку об’єктних модулів.
Література
- Нортон П., Соухэ Д. Язык ассемблера для IBM PC. Москва : Компьютер, 1992.
- Владислав Пирогов. Ассемблер для Windows. Санкт-Петербург : БХВ-Петербург, 2002. 896 с.
- Магда Ю. С. Ассемблер. Разработка и оптимизация Windows-приложений. Санкт-Петербург : БХВ-Петербург, 2003.
- В. Пирогов. Ассемблер и дизассемблирование. Санкт-Петербург : БХВ-Петербург, 2006. 464 с.
Автор ВУЕ
Покликання на цю статтю: Гладун А. Я. Асемблювання // Велика українська енциклопедія. URL: https://vue.gov.ua/Асемблювання (дата звернення: 6.05.2024).
Статус гасла: Оприлюднено
Оприлюднено: 24.11.2021
Важливо!
Ворог не зупиняється у гібридній війні і постійно атакує наш інформаційний простір фейками.
Ми закликаємо послуговуватися інформацією лише з офіційних сторінок органів влади.
Збережіть собі офіційні сторінки Національної поліції України та обласних управлінь поліції, аби оперативно отримувати правдиву інформацію.
Отримуйте інформацію тільки з офіційних сайтів