Page 55 - 6733
P. 55
Команда може не мати операндів або мати один чи два операнди, над якими
виконується задана мнемонікою операція. Якщо команда має два операнди, то
результат виконання записується у перший операнд.
По замовчуванню всі константи в тексті програми є десятковими. Для
шістнадцяткових констант слід вказувати суфікс h, для двійкових – суфікс b.
Якщо в деякій команді використовується безпосередньо вказана константа
(число), перед нею обов’язково повинен бути символ #. Якщо не вказати цей
символ, компілятор інтерпретує число як адресу комірки пам’яті. Наприклад,
команда
MOV A, #10
означає "занести в регістр А число 10 ", а команда
MOV A, 10
означає "занести в регістр А вміст комірки пам’яті з адресою 10".
Директива CSEG AT 0 означає, що наступна за нею команда буде
розміщуватись за адресою 0.
Архітектура мікроконтролера 8051 передбачає, що перша команда, яка
починає виконуватись після включення живлення, розміщується за адресою 0, а
підпрограми обробки переривань повинні розміщуватись за адресами 0003, 000В,
0010, 001В, 0023, тому за адресою 0, як правило, розміщують команду
безумовного переходу на першу команду основної програми, яка розташовується
в будь-якій вільній області пам’яті програм. Команда безумовного переходу має
формат
JMP <мітка>
Мітка може являти собою довільну послідовність символів букв, цифр та
знаків _, що починається з букви. Мітка може розміщуватись в довільному місці
програмного коду, після мітки стаивться двокрапка (в командах переходів
вказується лише ім’я мітки, без двокрапки).
Щоб не задумуватись над тим, за якими адресами розміщувати команди і
дані, використовують сегменти – області пам’яті різних типів, в яких розміщують
програмний код або змінні.
Синтаксис асемблера А51 передбачає, що спочатку слід оголосити сегмент
директивою
<імя сегменту> SEGMENT <тип сегменту>
Тип сегменту може бути CODE (код), DATA (внутрішній ОЗП), XDATA
(зовнішній ОЗП), BIT (бітовий сегмент). Ім’я сегменту може бути довільним.
Після цього сегмент можна відкрити директивою
RSEG <імя сегменту>
що вказує початок сегменту, тобто після цієї директиви можна писати
директиви резервування памяті (якщо це сегмент даних чи стеку) або код
програми (якщо це кодовий сегмент).
55