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