для наочності і читаності програми. У даній програмі ми будемо використовувати лише один регістр, і переваги такого перейменування тут не дуже видно. Але уявіть, що ви використовуєте безліч різних регістрів для зберігання самих різних величин. У цьому випадку привласнення осмисленого імені дуже полегшує програмування. Скоро ви самі в цьому переконаєтеся. До речі, саме таким чином визначено імена всіх стандартних регістрів у файлі tn2313def. inc.
. cseg-псевдооператор вибору програмного сегмента пам'яті. Про що йде мова? Як вже говорилося, мікроконтролер для зберігання даних має три види пам'яті: пам'ять програм (Flash), оперативну пам'ять (SRAM) і енергонезалежну пам'ять даних (EEPROM). Програма на Асемблері повинна працювати з будь-яким з цих трьох видів пам'яті. Для цього в Асемблері існує поняття В«сегмент пам'ятіВ». Існують директиви, що оголошували кожен за кой сегмент:
В· сегмент коду (пам'яті програм). cseg;
В· сегмент даних (ОЗУ) dseg;
В· сегмент EEPROMeseg.
Після оголошення кожного такого сегмента він стає поточним. Це означає, що всі наступні оператори відносяться виключно до оголошеного сегменту. Оголошений сегмент буде залишатися поточним доти, поки не буде оголошено небудь інший сегмент. p align="justify"> Тільки в сегменті коду Асемблер описує команди, які потім у вигляді кодів будуть записані в пам'ять програм. В інших двох сегментах використовуються директиви розподілу пам'яті і директиви опису даних. Ну, до сегментів dseg і eseg ми ще повернемося. Зараз же докладніше розглянемо сегмент cseg. p align="justify"> Так як команди в програмній пам'яті повинні розташовуватися по порядку, одна за одною, то їх розміщення зручно автоматизувати. Програміст не вказує, за якою адресою в пам'яті повинна бути розташована та чи інша команда. Програміст просто послідовно пише команди. А вже транслятор автоматично розміщує їх у пам'яті. Для цього використовується поняття В«покажчик поточного адресиВ». Покажчик поточного адреси не має відношення до регістру адреси мікроконтролера і взагалі фізично не існує. Це просто поняття, що використовується в мові Асемблер. Покажчик допомагає транслятору розмістити всі команди програми по осередках пам'яті. Типово вважається, що на початку програми значення поточного покажчика рано нулю. Тому перша ж команда програми буде розміщена по нульовому адресою. У міру трансляції програми покажчик зміщується в бік збільшення адреси. Якщо команда має довжину в один байт, то після її трансляції покажчик зміщується на одну клітинку. Якщо команда складається з двох байтів - на дві. Таким чином, розміщуються всі команди програми. p align="justify">. org - Примусове позиціонування покажчика поточного адреси. Іноді необхідно розмістити небудь фрагмент програми в програмній пам'яті не відразу після попереднього фрагмента, а в конкретному місці програмної пам'яті. Наприклад, починаючи з якого-небудь заздалегідь визначеного адреси. Для цього використовують директиву org. p align="justify"> Вона дозволяє примусово змінити значення покажчика поточного адреси. Оператор org має всього один параметр - нове значення покажчика адреси. Наприклад, команда.org 0x10 встановить покажчик на адресу 0x10. Транслятор автоматично стежить, щоб при переміщенні покажчика ваші фрагмент програми не налазили один на одного. У разі недотримання цієї умови транслятор видає повідомлення про помилку. p align="justify"> У нашій програмі команда позиціонування покажчика застосовується всього один раз. У рядку 5 покажчик встановлюється на нульовій адресу. У даному випадку директива org має чисто декларативне значення, так як і на початку програми, значення покажчика і так дорівнює нулю. br/>
2.7 Оператори
Idi-Завантаження в РОН числової константи. У рядку 6 програми (лістинг 4.1) за допомогою цієї команди в регістр temp (rl6) записується числова константа, рівна максимальному адресою ОЗУ. Ця константа має ім'я RAMEND. Її значення описано у файлі tn2313def. inc. У нашому випадку (для мікроконтролера ATtiny2313) значення RAMEND одно $ 7F. p align="justify"> Як можна бачити з лістингу 4.1, оператор Idi має два параметри:
В· перший параметр - це ім'я РОН, куди поміщається наша константа;
В· другий параметр - значення цієї константи.
Зверніть увагу, що в команді спочатку записується приймач інформації, потім її джерело. Такий же порядок ви побачите в будь-який інший команді, що має два операнди. Це загальне правило для мови Асемблер. p align="justify"> Out-Висновок вмісту РОН в регістр вводу-виводу. ...