Система команд микроконтроллеров семейства 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-разрядная величина смещения программного счетчика. |