Формати і способи адресації команд

Команди можуть займати від одного до трьох байтів. Розмір команди визначається кодом операції, записаним у першому байті. Додаткові байти можуть містити адреси і/або дані. У символічному записі команд як правило указуються всі операнди. У машинних командах частина інформації, необхідної для адресації, може міститися в коді операції. За допомогою байта коду операції можна закодувати 256 команд, але для мікроконтролера 8051 використовується тільки 255. Код 0A5h зарезервований для подальшого розвитку сімейства.

Адресація команд (тобто їхнє виконання) одна за одною її розташування в ПЗП називається природною. При завершенні читання чергової команди вміст програмного лічильника містить адресу коду операції наступної команди. Команди, у результаті виконання яких може бути змінений природний порядок виконання команд, називаються керуючими. Передача керування може відбуватися в залежності від виконання деяких умов. Тоді це називається умовною передачею керування (conditional jump). Якщо команда завжди передає керування в іншу частину програми, то це називається безумовною передачею керування (unconditional jump). Деякі з умовних керуючих команд використовують інформацію, що міститься в слові стану програми, а інші самі роблять порівняння байтів чи перевірку вмісту бітів ОЗП. В операнді керуючої команди в загальному випадку повинна міститися інформація для зміни коду в програмному лічильнику. Способи адресації керуючих команд у мікроконтролері типу 8051 розрізняються за дальністю переходу на короткі (short), абсолютні (absolute) і довгі (long). Для передачі керування програмісту досить указати символічну адресу переходу у відповідному операнді асемблерної команди.

При використанні короткого способу адресації в останньому байті команди міститься різниця між адресою тієї команди, якій передається керування, і адресою команди, що випливає за керуючою командою. Ця різниця може складати від - 128 до + 127. Для обчислення нового вмісту програмного лічильника із вмісту останнього байта команди спочатку формується двобайтовий код за допомогою запису старшого (знакового) біта в усі розряди старшого байта. Потім двобайтовий код додається до вмісту програмного лічильника. Такий спосіб часто називають відносним (relative).

Назва абсолютного переходу успадкована від попередньої моделі мікроконтролера, у якого обсяг ПЗП був обмежений двома кілобайтами. При переході до 64 кбайт старий адресний простір стали називати сторінкою (page). Тому 3 старших біти адреси переходу містяться в коді операції, а 8 молодших — у другому байті команди. Цей спосіб забезпечує адресацію в межах однієї з 32-х сторінок ПЗП, номер якої визначається 5 старшими розрядами коду операції. При абсолютному способі адресації 11 молодших розрядів умісту програмного лічильника заміняються на вміст адресної частини команди. Для довгого переходу адресна частина команди складається з двох байтів, уміст яких заноситься в програмний лічильник. Короткий, абсолютний і довгий безумовні переходи позначаються в мнемокодах команди початковими літерами S (Short), A (Absolute) і L (Long) відповідно.

Команди безумовного переходу можна розділити на команди без запам'ятовування адреси повернення, команди із запам'ятовуванням адреси повернення і команди повернення. В останньому різновиді команд безумовного переходу адресна частина відсутня. Є також команда безумовного переходу, що використовує індексну адресацію.

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

Однак ця команда (No OPeration — немає операції) потрібна для роботи в реальному масштабі часу, щоб забезпечити короткочасну затримку перед виконанням наступної команди.