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

Команды могут занимать от одного до трех байтов. Размер команды определяется кодом операции, записанным в первом байте, Дополнительные байты могут содержать адреса и/или данные. В символической записи команд, как правило, указываются все операнды. В машинных командах часть информации, необходимой для адресации, может содержаться в коде операции. При помощи байта кода операции можно закодировать 256 команд, но для микроконтроллера i8051 используется только 255. Код 0A5h зарезервирован для дальнейшего развития семейства.

Адресация команд (то есть их выполнение) по порядку их располо­жения в ПЗУ называется естественной. При завершении чтения очередной команды содержимое программного счетчика содержит адрес кода операции следующей команды. Команды, в результате выполнения которых может быть изменен естественный порядок исполнения команд, называются управляющими. Передача управления может происходить в зависимости от выполнения некоторых условии, тогда это называется условной передачей управления (conditional jump). Если команда всегда передает управле­ние в другую часть программы, то это называется безусловной передачей управления (unconditional jump). Некоторые из условных управляющих команд используют информацию, содержащуюся в слове состояния программы, а другие сами производят сравнение байтов или проверку содержимого битов ОЗУ. В операнде управляющей команды в общем случае должна содержаться информация для изменения кода в программ­ном счетчике. Способы адресации управляющих команд в микроконтроллере типа i8051 различаются по дальности перехода на короткие (short), абсо­лютные (absolute) и длинные (long). Приведенные далее сведения по способам вычисления адреса, заносимого в программный счетчик управ­ляющей командой, являются справочными. Для передачи управления программисту достаточно указать символический адрес перехода в соот­ветствующем операнде ассемблерной команды.

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

Название абсолютного перехода унаследовано от предшествующей модели микроконтроллера, у которой объем ПЗУ был ограничен двумя килобайтами. При переходе к 64 Кбайт старое адресное пространство стали называть страницей (page). 11озтому 3 старших бита адреса перехода содержатся в коде операции, а 8 младших — во втором байте команды. Этот способ обеспечивает адресацию в пределах одной из 32 страниц ПЗУ, номер которой определяется 5 старшими разрядами кода операции. При абсолютном способе адресации 11 младших разрядов содержимого программного счетчика заменяются на содержимое адресной части команды. Для длинного перехода адресная часть команды состоит из двух байтов, содержимое которых заносится в программный счетчик. Корот­кий, абсолютный и длинный безусловные переходы обозначаются в мнемокодах команды начальными буквами

S(Short), A(Absolute) и L(Long) соответственно.

Команды безусловного перехода можно разделить на команды без запоминания адреса возврата, команды с запоминанием адреса возврата и команды возврата, В последней разновидности команд безусловного перехода адресная часть отсутствует. Есть также команда безусловного перехода, использующая индексную адресацию. Более подробно о способах адресации будет рассказано в описании управляющих команд.

Эту главу мы завершаем описанием команд, разделенных функцио­нально на следующие 4 группы: команды пересылки информации, команды поразрядной обработки информации, арифметические команды и управляющие команды. Существует одна команда, которую нельзя отнести ни к одной из групп, так как она не делает ничего в течение одного такта:

NOP

Однако эта команда (No OPeration — нет операции) нужна для работы в реальном масштабе времени, чтобы обеспечить кратковременную задержку перед выполнением следующей команды.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: