Форматы команд ЦПУ микроконтроллеров семейства MSP430
Полный набор команд семейства MSP430 содержит 27 команд ядра и 24 эмулированные команды. Команды ядра – это команды, имеющие уникальный код операции, декодируемый ЦПУ. Эмулированные команды представляют собой инструкции, облегчающие чтение и написание кода, но не имеющие собственного кода операции, поэтому ассемблер автоматически меняет их на эквивалентные команды ядра. Использование эмулированных команд не приводит к увеличению объема кода или снижению производительности.
Существует три формата команд ядра:
- с двойным операндом;
- с одиночным операндом;
- команды перехода.
Все команды с одним и двумя операндами могут быть командами для работы с байтами или командами для работы со словами, используя, соответственно, расширения «.B» или «.W». Байтовые команды используются для доступа к данным байта или к байту периферийного устройства. Команды-слова используются для доступа к данным слова или к слову периферийного устройства. Если никакое расширение не используется, команда является командой-словом.
Источник и получатель в команде определяются следующими полями:
src | Операнд источника определяется As и S-reg |
dst | Операнд получателя определяется Ad D-reg |
As | Адресные биты, задающие режим адресации, используемые для источника (src) |
S-reg | Рабочий регистр, используемый в качестве источника (src) |
Ad | Адресные биты, задающие режим адресации, используемые для получателя (dst) |
D-reg | Рабочий регистр, используемый в качестве получателя (dst) |
B/W | Операция с байтом или словом: 0: операция со словом 1: операция с байтом |
Адрес получателя действителен в любом месте карты распределения памяти. Однако, при использовании команды, изменяющей содержимое получателя, пользователь должен быть уверен, что по адресу назначения можно производить запись. К примеру, маскированное ПЗУ имеет правильный адрес назначения, но его содержимое не может модифицироваться, поэтому команда изменения его содержимого не будет правильно выполнена.
Команды с двойным операндом (Формат I)
На рисунке Д.1 показана структура формата команды с двойным операндом.
Рисунок Д.1 – Схема формата команды с двойным операндом
В таблице Д.1 приведено описание и перечень команд с двойным операндом.
Таблица Д.1 - Команды с двойным операндом
Мнемоника | S-Reg, D-Reg | Операция | Биты статуса | |||
V | N | Z | C | |||
MOV(.B) | src,dst | src --> dst | - | - | - | - |
ADD(.B) | src,dst | src + dst --> dst | * | * | * | * |
ADDC(.B) | src,dst | src + dst + C --> dst | * | * | * | * |
SUB(.B) | src,dst | dst + .not.src + 1 --> dst | * | * | * | * |
SUBC(.B) | src,dst | dst + .not.src + C --> dst | * | * | * | * |
CMP(.B) | src,dst | dst – src | * | * | * | * |
DADD(.B) | src,dst | src + dst + C --> dst (десятичное) | * | * | * | * |
BIT(.B) | src,dst | src .and. dst | * | * | * | |
BIC(.B) | src,dst | .not.src .and. dst --> dst | - | - | - | - |
BIS(.B) | src,dst | src .or. dst --> dst | - | - | - | - |
XOR(.B) | src,dst | src .xor. dst --> dst | * | * | * | * |
AND(.B) | src,dst | src .and. dst --> dst | * | * | * |
Обозначения в таблицеД.1:
* - Влияет на бит статуса.
- - Не влияет на бит статуса.
0 - Бит статуса очищается.
1 - Бит статуса устанавливается.
Команды CMP и SUB идентичны, за исключением сохранения результата. Это также справедливо для команд BIT и AND.
Команды с одним операндом (Формат II)
На рисунке Д.2 показана структура формата команды с одним операндом.
Рисунок Д.2 - Схема формата команды с одним операндом
В таблице Д.2 приведено описание и перечень команд с одним операндом.
Таблица Д.2 - Команды с одним операндом
Мнемоника | S-Reg, D-Reg | Операция | Биты статуса | |||
V | N | Z | C | |||
RRC(.B) | dst | C --> MSB --> … LSB --> C | * | * | * | * |
RRA(.A) | dst | MSB --> MSB --> … LSB --> C | * | * | * | |
PUSH(.B) | src | SP-2 --> SP, src --> @SP | - | - | - | - |
SWPB | dst | Обмен байтами | - | - | - | - |
CALL | dst | SP-2 ? SP, PC+2 --> @SP dst --> PC | - | - | - | - |
RETI | TOS --> SR, SP+2 --> SP TOS --> PC, SP+2 --> SP | * | * | * | * | |
SXT | dst | Бит7 --> Бит8 … … Бит15 | * | * | * |
Обозначения в таблице Д.2:
* - Влияет на бит статуса.
- - Не влияет на бит статуса.
0 - Бит статуса очищается.
1 - Бит статуса устанавливается.
Для команды CALL возможны все способы адресации. Если используется символический, непосредственный, абсолютный или индексный режимы адресации следующее за командой CALL слово должно содержать информацию об адресе.
Команды перехода
На рисунке Д.3 показан формат команды условного перехода.
Рисунок Д.3 - Схема формата команды условного перехода
В таблице Д.3 приведено описание и перечень команд переходов.
Таблица Д.3 - Команды переходов
Мнемоника | S-Reg, D-Reg | Операция |
JEQ/JZ | Метка | Переход к метке, если бит нуля (Z) установлен |
JNE/JNZ | Метка | Переход к метке, если бит нуля (Z) сброшен |
JC | Метка | Переход к метке, если бит переноса (C) установлен |
JNC | Метка | Переход к метке, если бит переноса (C) сброшен |
JN | Метка | Переход к метке, если бит отрицательного результата (N) установлен |
JGE | Метка | Переход к метке, если (N.XOR.V)=0 |
JL | Метка | Переход к метке, если (N.XOR.V)=1 |
JMP | Метка | Безусловный переход к метке |
Условные переходы обеспечивают ветвление программы относительно программного счетчика PC и не оказывают влияния на биты статуса. Возможный диапазон переходов с помощью команды перехода составляет от -511 до +512 слов относительно текущего значения PC. 10-разряное смещение программного счетчика обрабатывается как 10-разрядное значение со знаком: удваивается и складывается с содержимым программного счетчика:
PCnew=PCold + 2 + PCoffset x 2, (1) | |
где | PCnew – новое содержимое программного счетчика; PCold – исходное содержимое программного счетчика; PCoffset – 10-разрядная величина смещения программного счетчика. |
Приложение Е
(справочное)