Ассемблерного ім'я

Асемблерні імена, оппсаннние в фіктивної секції, не можна використовувати в адресних постійних. Це накладає обмеження на вживання Р, Q, R в якостей операндів деяких макрокоманд.

Адреса переходу зазвичай вказується асемблерним ім'ям, позначати ту команду програми, перехід до якої потрібно зробити. Але всередині макроозначення позначати модельні пропозиції звичайним ім'ям небезпечно: якщо ми всередині вхідний програми більше одного рази пошлемося на таке макровизначеннями, один і той же ідентифікатор більше одного разу з'явиться на полі імені і компілятор з базисного мови відзначить помилку. Для уникнення цього в асортименті Макропорцесори є системна змінна зі стандартним позначенням & SYSNDX. Ця змінна може вживатися в модельних пропозиціях точно на таких же правах, як параметри макропрототіпа. Вона автоматично замінюється чотиризначним десятковим числом.

Пере-местімое вираз зазвичай складається з ассемблерного імені, до якого можуть бути дописані справа зі знаком плюс або мінус одне або кілька абсолютних виразів.

Поле імені модельного пропозиції може бути пропуском, містити ассемблерного ім'я, параметр, а також конкатенації (з'єднання) параметрів з послідовностями букв і цифр і іншими параметрами. Правило конкатенації полягає в наступному. З'єднання параметра з параметром і приєднання послідовності символів до параметру зліва від останнього проводиться безпосереднім об'єднанням їхніх текстів. Якщо ж ми хочемо приєднати послідовність літер або цифр (або інших символів в конкатенацію на поле операндів) до параметру справа, між ним і приєднаним текстом потрібно помістити точку.

Термом арифметичного вираження поза макроозначення може бути посилання на характеристику довжини ассемблерного імені, описаного в власне програмою, а в арифметичному виразі всередині макроозначення - посилання на характеристику довжини параметра макроозначення, якого він заміщує асемблерним ім'ям.

Для того щоб посилатися на змінні повторно входь-мого модуля за допомогою ассемблерних імен, зручно користуватися фіктивної програмної секцією, побудованої командою асемблера DSECT. Нехай, наприклад, в RE використовуються змінні Р, Q і R, що займають разом поле в 800 байтів.

Припустимо, що текст довжиною 1 що починається з байта, адреса якого позначений асемблерним ім'ям А, потрібно пере-Гесті на нове місце, що починається з байта, зазначеного ім'ям В. Довжина тексту відома в момент складання програми і буква 1 заміщає відповідне десяткове число.

Системна змінна & SYSECT при обробці кожної дії (як зовнішньої, так і внутрішньої) має своїм значенням ассемблерного ім'я тієї програмної або фіктивної секції, в якій розташована обробляється макрокоманда. Мінлива зазвичай служить для генерування команд продовження поточної секції в тих Макровизначення, які містять модельні команди CSECT або DSECT.

Символьне вираз може бути посиланням на характеристику типу, що складається з літери Т, апострофа і наступного за ним ассемблерного імені (поза макроозначення) або (всередині макроозначення) позначення параметра.

Поле імені макропрототіпа може бути або порожнім, або містити ще один параметр, який зазвичай служить для перенесення ассемблерного імені з поля імені макрокоманди на її розширення.

Передбачається, що a, b, с і d - числа типу Е, розташовані в словах А, В, С і D, a fsM і N2 - асемблерні імена гілок пгограмми.

Термом арифметичного вираження поза макроозначення може бути посилання на характеристику довжини ассемблерного імені, описаного в власне програмою, а в арифметичному виразі всередині макроозначення - посилання на характеристику довжини параметра макроозначення, якого він заміщує асемблерним ім'ям.

Частина ESD (External Symbol Dictionary) - словник зовнішніх зв'язків модуля. Він містить асемблерні імена і вказівки про розташування всіх тих точок модуля, на які можливі посилання з інших модулів, а також перелік усіх імен в інших модулях, посилання на які містить даний модуль.

Поле імені макрокоманди може бути зайнято асемблерним ім'ям або складатися з прогалин, а поле операції повинно містити назву макрокоманди, що збігається з ідентифікатором на поле імені макропрототіпа в одному з макроозначень.

Перша макрокоманда будує блок управління читанням перфокарт. Її перший операнд - призначається автором програми ассемблерного ім'я, яке вказує на початок цього блоку. Другий, необов'язковий, операнд задає адресу тієї команди нашої програми, до якої слід перейти, якщо вхідна інформація вичерпана. Макрокоманда OPENIN повинна виконуватися тільки один раз і обов'язково до першого виконання макрокоманди GET. Остання ж може виконуватися багаторазово, переносячи кожен раз вміст черговий перфокарти з читає пристрої машини на 80-байтное поле, адреса початку якого зазначений у другому операнд GET. При цьому кожен з 80 символів, записаних в зовнішньому коді в колонках перфокарти, перекладається у внутрішній код.

Явний формат команди мало відрізняється від машнннного і вживається в асемблерній програмі у виняткових випадках. Зазвичай операнди описуються в неявному форматі з використанням асемблерних імен - ідентифікаторів, що позначають деякі машинні адреси.

Розглянемо тепер кілька прикладів складання фрагментів програм на мові асемблера, що реалізують деякі досить прості дії. Ці дії ми будемо попередньо описувати операторами мови АЛГОЛ-60 ототожнюючи асемблерні імена з його змінними. При цьому ми будемо припускати, що всі імена, які фігурують в умові завдання, вже описані в попередній частині програми, а відповідні їм ділянки пам'яті під час виконання цієї попе-дме частини заповняться, якщо це необхідно, деякими значеннями. Рішення завдання має полягати в дебавленні до програми групи машинних команд і команд асемблера DS і DC, які здійснюють замовлені дії.

Параметру, якому відповідає опущений операнд, присвоюється порожнє значення. Параметр, розташований на поле імені прототипу, набуває в якості значення ассемблерного ім'я, розташоване на поле імені макрокоманди. Якщо ім'я відсутнє, параметр отримує пусте значення.



Інші публікації на тему:
  • Значення - лічильник - адреса
  • Символічний параметр
  • Ім'я - набір - дані