Система команд микроконтроллеров семейства 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: операция с байтом |
| Примечание: адрес получателя Адрес получателя действителен в любом месте карты распределения памяти. Однако, при использовании команды, изменяющей содержимое получателя, пользователь должен быть уверен, что по адресу назначения можно производить запись. К примеру, маскированное ПЗУ имеет правильный адрес назначения, но его содержимое не может модифицироваться, поэтому команда изменения его содержимого не будет правильно выполнена. |
| Примечание: использование меток EDE и TONI Везде в документации по семейству MSP430 используются универсальные метки EDE и TONI. Они являются только метками, не имеющими никакого специального назначения. |
3.4.1 Команды с двойным операндом (Формат I)
На рис.9 показана структура формата команды с двойным операндом.

В таблице 3.11 приведено описание и перечень команд с двойным операндом.
Таблица 3.11. Команды с двойным операндом
| Мнемоника | 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 | 0 | * | * | * |
| 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 | 0 | * | * | * |
-
* - Влияет на бит статуса
- - Не влияет на бит статуса
0 - Бит статуса очищается
1 - Бит статуса устанавливается
| Примечание: Команды CMP и SUB Команды CMP и SUB идентичны, за исключением сохранения результата. Это также справедливо для команд BIT и AND. |
3.4.2 Команды с одним операндом (Формат II)
На рис.3.10 показана структура формата команды с одним операндом.

В таблице 3.12 приведено описание и перечень команд с одним операндом.
| Мнемоника | S-Reg, D-Reg | Операция | Биты статуса | |||
| V | N | Z | C | |||
| RRC(.B) | dst | C -> MSB -> … LSB -> C | * | * | * | * |
| RRA(.A) | dst | MSB -> MSB -> … LSB -> C | 0 | * | * | * |
| 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 | 0 | * | * | * |
-
* - Влияет на бит статуса
- - Не влияет на бит статуса
0 - Бит статуса очищается
1 - Бит статуса устанавливается
Для команды CALL возможны все способы адресации. Если используется символический режим (Адрес), прямой режим (#N), абсолютный режим (&EDE;) или индексный режим x(RN), следующее за командой CALL слово должно содержать информацию об адресе.
3.4.3 Команды перехода
На рис.3.11 показан формат команды условного перехода.

В таблице 3.13 приведено описание и перечень команд переходов.
| Мнемоника | 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 | |
| где: | PCnew – новое содержимое программного счетчика; PCold – исходное содержимое программного счетчика; PCoffset – 10-разрядная величина смещения программного счетчика. |