MSP430 имеет фоннеймановскую архитектуру, с единым адресным пространством для команд и данных. Память может адресоваться как побайтово, так и пословно. Порядок хранения 16-разрядных слов — от младшего к старшему (англ. little-endian).
Процессор содержит 16 16-разрядных ортогональных регистров. Регистр R0 используется как программный указатель (англ. Program Counter - PC), регистр R1 как указатель стека (англ. Stack Pointer - SP), регистр R2 как регистр статуса (англ. Status Register - SR), а R3 как специальный регистр именуемый генератор констант (англ. Constant Generator - CG), R2 также может использоваться в качестве генератора констант. Генератор констант используется для сокращения общей длины команды вследствие неявного представления константы в коде операции. Регистры с R4 по R15 используются как регистры общего назначения.
Набор инструкций очень простой и представлен 27 инструкциями, 24 эмулированными инструкциями. Инструкции имеют как 8-битную (байт), так и 16-битную (слово) форму обработки операндов. Бит B/W управляет этим признаком.
MSP430 система команд
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Команда
|
|
|
|
|
|
| opcode
| B/W
| As
| register
| Однооперандные команды
|
|
|
|
|
|
|
|
|
| B/W
| As
| register
| RRC Вращение вправо через перенос
|
|
|
|
|
|
|
|
|
|
| As
| register
| SWPB Обмен байтов
|
|
|
|
|
|
|
|
|
| B/W
| As
| register
| RRA Вращение вправо арифметическое
|
|
|
|
|
|
|
|
|
|
| As
| register
| SXT Расширение знака байта до слова
|
|
|
|
|
|
|
|
|
| B/W
| As
| register
| PUSH Опустить операнд в стек
|
|
|
|
|
|
|
|
|
|
| As
| register
| CALL Вызов подпрограммы; сохранить PC в стеке и загрузить PC новым значением
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| RETI Возврат из прерывания; Извлечь SR и PC из стека
|
|
|
| условие
| 10-бит знаковое смещение
| Условный переход; PC = PC + 2×offset
|
|
|
|
|
|
| 10-бит знаковое смещение
| JNE/JNZ Переход если не_равно/не_ноль
|
|
|
|
|
|
| 10-бит знаковое смещение
| JEQ/JZ Переход если равно/ноль
|
|
|
|
|
|
| 10-бит знаковое смещение
| JNC/JLO Переход если не_перенос/ниже (беззнаковое сравнение)
|
|
|
|
|
|
| 10-бит знаковое смещение
| JC/JHS Переход если перенос/выше или то же (беззнаковое сравнение)
|
|
|
|
|
|
| 10-бит знаковое смещение
| JN Переход если отрицательный
|
|
|
|
|
|
| 10-бит знаковое смещение
| JGE Переход если больше_или_равно
|
|
|
|
|
|
| 10-бит знаковое смещение
| JL Переход если меньше
|
|
|
|
|
|
| 10-бит знаковое смещение
| JMP Переход (непосредственный)
|
opcode
| source
| Ad
| B/W
| As
| destination
| Двух операндная арифметика
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| MOV Переслать источник в приёмник
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| ADD Прибавить источник к приёмнику
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| ADDC Прибавить источник_и_перенос к приёмнику
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| SUBC Вычесть источник из приёмника (с переносом)
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| SUB Вычесть источник из приёмника
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| CMP Сравнить (операцией вычитания) источник с приёмником
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| DADD Decimal Десятичное сложение источника и приёмника (с переносом)
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| BIT Проверка битов (операцией AND) источника и приёмника
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| BIC Битовая очистка (dest &= ~src)
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| BIS Битовая установка (logical OR)
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| XOR Исключающее или источника с приёмником
|
|
|
|
| source
| Ad
| B/W
| As
| destination
| AND Логический AND источника с приёмником (dest &= src)
|
Все инструкции 16-битные. 4 способа адресации операнда, определены в 2 битах как As поле.
Поле As— Регистровый, индексный, косвенный-регистровый, косвенно-регистровый с пост декрементом. Поле Ad определяет два способа адресации — регистровый и индексный.
MSP430 Режим адресации
|
As
| Регистр
| Синтаксис
| Описание
|
| n
| Rn
| Регистровый. Операнд — содержимое одного из регистров из Rn.
|
| n
| x(Rn)
| Индексный. Операнд находится в памяти по адресу Rn+x.
X-слово находится после текущей команды.
|
| n
| @Rn
| Косвенный регистровый. Операнд находится в памяти по адресу, который содержится в регистре Rn.
|
| n
| @Rn+
| Косвенный регистровый с автоинкрементом. В зависимости от значения разряда B/W значение регистра Rn увеличивается после выполнения операции на 1 или 2.
|
Режимы адресации при использовании R0 (PC)
|
| 0 (PC)
| LABEL
| Относительный(символьный). x(PC) Операнд в памяти по адресу PC+x.
|
| 0 (PC)
| #x
| Непосредственный. @PC+ Адрес операнда из х-слова находящегося после текущей команды.
|
Использование R2 (SR) и R3 (CG), специальный способ декодирования
|
| 2 (SR)
| &LABEL
| Абсолютный. Операнд в памяти по адресу взятому из x.
|
| 2 (SR)
| #4
| Константа 4.
|
| 2 (SR)
| #8
| Константа 8.
|
| 3 (CG)
| #0
| Константа 0.
|
| 3 (CG)
| #1
| Константа 1. при байтовых операциях.
|
| 3 (CG)
| #2
| Константа 2.
|
| 3 (CG)
| #-1
| Константа −1 или 0xFFFF.
|