Методы адресации и система команд.

 

Система команд семейства MCS-51 ориентирована на организацию гибко­го ввода-вывода данных через универсальные порты Р0..Р3 и первичную обработку информации. Особое внимание уделено операциям с битами и передаче управления по их значению. Команды, выполняющие такие опе­рации, составляют многочисленную группу и образуют вместе с соответствующими аппаратными механизмами так называемый «булев процессор» (Boolean proceccor по терминологии фирмы Intel) в составе архитектуры MCS-51.

В целом систему команд MCS-51 можно охарактеризовать как весьма мощ­ную и симметричную в том смысле, что программист имеет возможность использовать большинство операций с полным набором методов адресации и программно доступных ресурсов аппаратуры.

 

Методы адресации

Разработчик изделия работает с системой команд при создании программы на языке ассемблера. При этом он имеет дело с какой-либо кросс-системой, имеющей свою версию языка.

Каждая команда сообщает процессору выполняемую операцию и методы доступа к операндам. Командная строка языка ассемблер содержит метку (символический адрес), мнемонику (символическое имя) команды, операн­ды, комментарий. Имя команды однозначно связано с выполняемой ею опе­рацией (действием). Число операндов в разных командах микроконтролле­ров MCS-51 находится в диапазоне от нуля до трех, операнды разделяются запятыми. При двух операндах первым указывается приемник, вторым ис­точник. Многие команды по умолчанию используют аккумулятор как один из источников операнда и/или как приемник результата.

Методы адресации представляют собой набор механизмов доступа к опе­рандам. Одни из них просты и поэтому приводят к компактному формату команды и быстрому доступу к операнду, но объем доступных с их помо­щью ресурсов ограничен. Другие методы адресации позволяют оперировать со всеми имеющимися в системе ресурсами, но команда получается длин­ной, на ее ввод и выполнение тратится много времени. Набор методов адре­сации в каждой системе команд является компромиссным сочетанием изве­стных механизмов адресации, выбранным проектировщиками архитектуры исходя из набора решаемых задач. При этом для процессоров с архитекту­рой CISC (complete instruction set computer) большую роль имеет и удоб­ство работы программиста.

С точки зрения формата, команды микроконтроллеров семейства MCS-51 делятся на одно-, двух- и трехбайтные. Используется четыре основных ме­тода адресации.

Регистровая адресация. Операнд находится в одном из регистров общего назначения R0..R7 банка, номер которого определяется разрядами RS0, RS1 регистра PSW. Номер регистра определяется тремя младшими битами бай­та кода операции (КОП - первый байт команды). Регистровая адресация позволяет в одном байте указать код операции и адрес операнда. Поскольку операнд находится во внутренней ячейке, не требуется циклов обращения к внешней памяти данных.

Формат команды сложения ADD A,Rn следующий:

Прямая адресация. Операнд находится во внутренней памяти данных, адрес ячейки определяет отдельный байт команды. Таким образом, ко­манды с использованием прямой адресации имеют минимум два байта, доступны только 256 ячеек, обращения за операндом к внешней памяти не требуется.

Формат команды сложения ADD A,direct следующий:

Косвенно-регистровая адресация. Этот метод адресации использует ре­гистры R0 и R1 в качестве указателей. Регистры берутся из банка, опреде­ляемого разрядами RS0, RS1 регистра PSW. Содержимое этих регистров ис­пользуется как адрес для обращения к ячейке внутренней памяти данных, хранящей операнд. Команда получается однобайтной, номер регистра указывает младший бит. Длина команды при этом соответствует длине коман­ды с использованием регистровой адресации, но косвенная адресация дает доступ ко всему пространству внутренней памяти данных.

Формат команды сложения ADD A, @Ri следующий:

Непосредственная адресация. Операнд находится в отдельном байте ко­манды, это константа. Таким образом, команды с использованием непосред­ственной адресации имеют минимум два байта, обращения за операндом к внешней памяти не требуется.

Формат команды сложения ADD A, #data следующий: