Асемблювання

Асемблюва́ння (від англ. assemble — збирати) ― процес транслювання початкового коду програми на мові асемблер на об’єктну мову.

Під час асемблювання кожен виконуваний оператор асемблера перетворюється у відповідну йому машинну команду. У більшості випадків цей процес відбувається у два етапи: асемблювання й компонування.

Найпростіший з асемблерів (абсолютний асемблер) генерує програму в абсолютних адресах (тобто таку, що не потребує налаштовування адрес під час її завантаження в оперативну пам’ять), що часто використовують у записі програм у постійну пам’ять (постійні та напівпостійні запам’ятовувальні пристрої). Що нижчий рівень мови програмування, то ближча специфіка роботи програми до процесора, для якого її написано. Мови низького рівня складніші й потребують вужчої спеціалізації програміста, оскільки написана на асемблері програма для процесорів одного типу не завжди придатна для роботи з іншими процесорами, зате такі програми компактні та швидкодійні.

Окрім транслювання багато програм-асемблерів підтримують й іншу функціональність, корисну під час розроблення системного й прикладного програмного забезпечення ― вибір формату об’єктного модуля, генерування символьної інформації (наприклад, відлагоджувальної), різноманітні директиви на кшталт EXTERN чи GLOBAL, макрокоманди тощо.

Директива асемблера ― мовна конструкція, яка не транслюється в машинний код, а слугує для контролю асемблювання програми. Директиви дають змогу керувати формуванням лістинга (друкованого списку рядків комп’ютерного коду або цифрових даних у зручній для сприйняття людиною формі) асемблювання, розподілом пам’яті, визначати символи та дані тощо. Лістинг асемблювання містить результат роботи асемблера. У ньому можна побачити, який машинний код згенеровано відповідно до кожної машинної команди. Лістинг використовують для налагодження й документування програми.

Під час асемблювання програми виконуються такі кроки:

  • аналізування вхідного модуля на наявність синтаксичних помилок;
  • видавання протоколу роботи компілятора лістинга та аварійних повідомлень про помилки;
  • генерування об’єктного модуля.

Кожний перегляд тексту програмного модуля компілятором називають проходом. Компілятор двічі переглядає програму з асемблера, тобто робить два проходи. Такі компілятори називають двопрохідними. На першому проході транслятор знаходить багато помилок (але не всі) і будує деякі важливі таблиці, дані з яких використовують на наступних кроках.

Спочатку кожен рядок асемблера обробляє спеціальна програма транслятора — лексичний аналізатор, який розбиває кожен рядок на лексеми — логічно неподільні одиниці мови: імена, числа, рядки символів, розділювачі, коментарі. На етапі лексичного аналізу виявляють лексичні помилки, коли деяка група символів не може бути віднесена до жодного з класів лексем.

Після розбивання рядка асемблера на лексеми починається другий етап обробки рядка — етап синтаксичного аналізу. Його виконує програма транслятора — синтаксичний аналізатор, який будує з лексем складніші конструкції рядка: поля мітки, коди операцій та операндів. Особливу увагу на цьому етапі приділено іменам користувача: синтаксичний аналізатор заносить їх у спеціальну таблицю імен (часто її ще називають таблицею символічних імен або таблицею символів). Разом з кожним ім’ям у цю таблицю заносять й атрибути імені. Синтаксичний аналізатор може виявити й помилки, що стосуються модуля в цілому, наприклад, перевищення максимальної довжини певного сегмента, відсутність сегмента стека (від. англ. stack — «стос», різновид лінійного списку, структура даних, яка працює за принципом «останнім прийшов — першим пішов») у головному модулі, використання мітки команди в пропозиції резервування пам’яті тощо. На другому проході синтаксичний аналізатор виявляє всі помилки в програмному модулі й однозначно визначає формат кожної команди.

Останній етап роботи транслятора ― генерування об’єктного модуля. На цьому етапі всі числа перетворюються у внутрішнє машинне представлення, записується бітове подання всіх команд, оформляється паспорт об’єктного модуля. Далі отриманий об’єктний модуль записується в бібліотеку об’єктних модулів.

Література

  1. Нортон П., Соухэ Д. Язык ассемблера для IBM PC. Москва : Компьютер, 1992.
  2. Владислав Пирогов. Ассемблер для Windows. Санкт-Петербург : БХВ-Петербург, 2002. 896 с.
  3. Магда Ю. С. Ассемблер. Разработка и оптимизация Windows-приложений. Санкт-Петербург : БХВ-Петербург, 2003.
  4. В. Пирогов. Ассемблер и дизассемблирование. Санкт-Петербург : БХВ-Петербург, 2006. 464 с.

Автор ВУЕ

А. Я. Гладун


Покликання на цю статтю

Покликання на цю статтю: Гладун А. Я. Асемблювання // Велика українська енциклопедія. URL: https://vue.gov.ua/Асемблювання (дата звернення: 6.05.2024).


Оприлюднено

Статус гасла: Оприлюднено
Оприлюднено:
24.11.2021

Важливо!

Ворог не зупиняється у гібридній війні і постійно атакує наш інформаційний простір фейками.

Ми закликаємо послуговуватися інформацією лише з офіційних сторінок органів влади.

Збережіть собі офіційні сторінки Національної поліції України та обласних управлінь поліції, аби оперативно отримувати правдиву інформацію.

Отримуйте інформацію тільки з офіційних сайтів


Міністерство оборони України Лого.png

Міністерство оборони України

МВС України Лого.jpg

Міністерство внутрішніх справ України

Генеральний штаб ЗСУ Лого.jpg

Генеральний штаб Збройних сил України

Державна прикордонна служба України Лого.jpg

Державна прикордонна служба України

Увага! Опитування читачів ВУЕ. Заповнити анкету ⟶