Перейти к содержанию

Система команд MSP430

Ядро MSP430 — 16-битный RISC с 27 основными командами, которые работают с любыми из семи режимов адресации. Ещё 24 удобные команды ассемблер превращает в основные. Ниже — все команды с операциями и флагами, режимы адресации, генератор констант, форматы кодов и время выполнения по руководству TI.

Обновлено Редакция GAW

Ядро MSP430 описано в главе 3 руководства TI SLAU144K: 16 регистров по 16 бит, 16-битные шины адреса и данных и ортогональная система команд — любую команду можно использовать с любым режимом адресации. Регистры, память и режимы работы разобраны в статье «Архитектура MSP430».

Регистры

РегистрНазначение
R0 (PC)счётчик команд, всегда чётный
R1 (SP)указатель стека, всегда чётный; стек растёт вниз
R2 (SR, CG1)регистр состояния; в отдельных режимах — генератор констант
R3 (CG2)генератор констант
R4–R15регистры общего назначения

Флаги регистра состояния: C (перенос, бит 0), Z (ноль, бит 1), N (знак, бит 2), V (переполнение, бит 8). Биты GIE, CPUOFF, OSCOFF, SCG0 и SCG1 управляют прерываниями и режимами пониженного потребления.

Режимы адресации

Для источника есть семь режимов, для приёмника — четыре (As — биты режима источника, Ad — приёмника):

As/AdРежимЗаписьОперанд
00/0регистровыйRnсодержимое регистра
01/1индексныйX(Rn)по адресу Rn + X; X — в следующем слове
01/1символьныйADDRпо адресу PC + X — индексный с PC
01/1абсолютный&ADDRпо адресу из следующего слова — индексный с SR, где SR даёт ноль
10/–косвенный регистровый@Rnпо адресу из Rn
11/–косвенный с автоинкрементом@Rn+по адресу из Rn, затем Rn увеличивается на 1 для .B и на 2 для .W
11/–непосредственный#Nконстанта из следующего слова — это @PC+

Для приёмника доступны только регистровый, индексный, символьный и абсолютный режимы; косвенные режимы — лишь для источника.

Генератор констант

Шесть частых констант берутся из R2 и R3 без дополнительного слова кода:

РегистрAsКонстанта
R210+4
R211+8
R3000
R301+1
R310+2
R311−1 (0FFFFh)

R2 с As = 00 — обычный регистр SR, с As = 01 даёт абсолютную адресацию. Ассемблер подставляет генератор констант сам, когда видит одно из этих чисел в непосредственном операнде.

Двухоперандные команды (формат I)

Формат: биты 15–12 — код операции, 11–8 — регистр источника, 7 — Ad, 6 — B/W, 5–4 — As, 3–0 — регистр приёмника. Обозначения флагов: * — меняется, 0 — сбрасывается, – — не меняется.

КодКомандаОперацияVNZC
4xxxMOV(.B) src,dstsrc → dst––––
5xxxADD(.B) src,dstsrc + dst → dst****
6xxxADDC(.B) src,dstsrc + dst + C → dst****
7xxxSUBC(.B) src,dstdst + not.src + C → dst****
8xxxSUB(.B) src,dstdst + not.src + 1 → dst****
9xxxCMP(.B) src,dstdst − src, результат не сохраняется****
AxxxDADD(.B) src,dstsrc + dst + C → dst в двоично-десятичном коде****
BxxxBIT(.B) src,dstsrc and dst, результат не сохраняется0***
CxxxBIC(.B) src,dstnot.src and dst → dst––––
DxxxBIS(.B) src,dstsrc or dst → dst––––
ExxxXOR(.B) src,dstsrc xor dst → dst****
FxxxAND(.B) src,dstsrc and dst → dst0***

CMP отличается от SUB, а BIT от AND только тем, что результат не записывается. BIS и BIC — основной способ устанавливать и сбрасывать биты в регистрах периферии, они не меняют флаги.

Однооперандные команды (формат II)

КодКомандаОперацияVNZC
1000h / 1040hRRC(.B) dstсдвиг вправо через перенос: C → старший бит … младший бит → C****
1080hSWPB dstобмен байтов слова––––
1100h / 1140hRRA(.B) dstарифметический сдвиг вправо, старший бит сохраняется, младший → C0***
1180hSXT dstрасширение знака: бит 7 → биты 8–150***
1200h / 1240hPUSH(.B) srcSP − 2 → SP, src → @SP––––
1280hCALL dstSP − 2 → SP, PC + 2 → @SP, dst → PC––––
1300hRETISR и PC восстанавливаются из стека****

Коды указаны без полей операнда: младшие биты задают режим адресации и регистр. RRA, RRC, SWPB и SXT нельзя использовать с непосредственным операндом — TI предупреждает, что результат непредсказуем.

Переходы

КодКомандаУсловие перехода
2000hJNE / JNZZ = 0
2400hJEQ / JZZ = 1
2800hJNC / JLOC = 0
2C00hJC / JHSC = 1
3000hJNN = 1
3400hJGEN xor V = 0
3800hJLN xor V = 1
3C00hJMPвсегда

Переход относительный: 10-битное знаковое смещение удваивается и прибавляется к адресу следующей команды, PCnew = PCold + 2 + смещение · 2. Дальность — от −511 до +512 слов. Переходы не меняют флаги. Для перехода дальше используют BR — то есть MOV в PC.

Эмулируемые команды

КомандаДействиеЗаменяется на
ADC(.B) dstdst + C → dstADDC #0,dst
BR dstпереход по адресуMOV dst,PC
CLR(.B) dst0 → dstMOV #0,dst
CLRC, CLRN, CLRZсбросить C, N, ZBIC #1,SR; BIC #4,SR; BIC #2,SR
DADC(.B) dstdst + C в двоично-десятичном кодеDADD #0,dst
DEC(.B), DECD(.B) dstdst − 1, dst − 2SUB #1,dst; SUB #2,dst
DINT, EINTзапретить, разрешить прерыванияBIC #8,SR; BIS #8,SR
INC(.B), INCD(.B) dstdst + 1, dst + 2ADD #1,dst; ADD #2,dst
INV(.B) dstинверсия битовXOR #0FFFFh,dst (XOR.B #0FFh,dst)
NOPничегоMOV #0,R3
POP(.B) dst@SP → dst, SP + 2 → SPMOV @SP+,dst
RETвозврат из подпрограммыMOV @SP+,PC
RLA(.B) dstсдвиг влевоADD dst,dst
RLC(.B) dstсдвиг влево через переносADDC dst,dst
SBC(.B) dstdst − not(C)SUBC #0,dst
SETC, SETN, SETZустановить C, N, ZBIS #1,SR; BIS #4,SR; BIS #2,SR
TST(.B) dstсравнение с нулёмCMP #0,dst

Всего их 24, если считать байтовые и словные варианты одной командой. Константы 0, 1, 2, 4, 8 и −1 в этих заменах берутся из генератора констант, поэтому, например, INC R5 занимает одно слово.

Время выполнения

Число тактов MCLK определяется форматом и режимами адресации. Переходы — 2 такта независимо от того, выполняется ли переход; вход в прерывание — 6 тактов, RETI — 5.

Источник → приёмник (формат I)ТактовСловПример
Rn → Rm11MOV R5,R8
Rn → PC21BR R9
Rn → X(Rm), EDE, &EDE42ADD R5,4(R6)
@Rn или @Rn+ → Rm21AND @R4,R5
@Rn или @Rn+ → память52MOV @R5,EDE
#N → Rm22MOV #20,R9
#N → память53ADD #33,EDE
X(Rn), EDE, &EDE → Rm32MOV 2(R5),R7
память → память63MOV 4(R7),TONI
Формат II, режимRRA, RRC, SWPB, SXTPUSHCALLСлов
Rn1341
@Rn3441
@Rn+3551
#N—452
X(Rn), EDE, &EDE4552

Константы генератора не добавляют слова кода, и процессору не нужно читать их из памяти — TI называет это главным преимуществом генератора. При 16 МГц такт длится 62,5 нс — так в даташите MSP430G2553 указано время цикла команды.

Примеры

        MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; stop the watchdog (password 05Ah in the high byte)
        BIS.B   #BIT0,&P1DIR            ; P1.0 as output
Loop:   XOR.B   #BIT0,&P1OUT            ; toggle P1.0
        MOV.W   #50000,R15              ; delay counter
Delay:  DEC.W   R15                     ; emulated: SUB #1,R15
        JNZ     Delay
        JMP     Loop

Вход в режим пониженного потребления — установка битов в SR: например, BIS #GIE+CPUOFF+SCG1+SCG0,SR — режим LPM3 с разрешёнными прерываниями. Подробнее о режимах и тактировании — в статье об архитектуре MSP430, обзор семейств — в разделе «MSP430». Сравнить с другими ядрами можно по страницам о системах команд AVR, Thumb-2 и 8051.

Частые вопросы

Сколько команд у MSP430?

27 основных — у них есть собственные коды операций — и 24 эмулируемые. Эмулируемые команды вроде CLR, INC, RET или NOP ассемблер заменяет основными с подходящими операндами, например CLR dst — это MOV #0,dst. TI подчёркивает, что эмулируемые команды не стоят ни лишнего кода, ни времени.

Что такое генератор констант MSP430?

Регистры R2 и R3 в некоторых режимах адресации источника выдают не своё содержимое, а одну из шести констант: 0, 1, 2, 4, 8 и −1. Ассемблер использует их сам, когда в команде стоит такое число, и команда обходится без дополнительного слова с константой — короче и быстрее.

Сколько тактов выполняется команда MSP430?

Зависит от режимов адресации, а не от самой команды. Операция регистр–регистр занимает 1 такт, любой переход — 2 такта, команда с операндами в памяти в обоих местах — до 6 тактов. Вход в прерывание — 6 тактов, возврат RETI — 5.

Чем отличаются MOV и MOV.B?

Суффиксом .B команда работает с байтом, без суффикса или с .W — со словом. Байтовые команды нужны для 8-битных регистров периферии и байтовых данных. Если результат байтовой операции записывается в регистр, его старший байт обнуляется.

Источники

  1. Texas Instruments. MSP430F2xx, MSP430G2xx Family User's Guide (SLAU144K, revised August 2022) — разд. 3.2 — регистры и генератор констант (табл. 3-2); разд. 3.3 — режимы адресации (табл. 3-3); разд. 3.4 — форматы (рис. 3-9…3-11), табл. 3-11…3-13 — команды, табл. 3-14…3-16 — такты и длина, рис. 3-12 — карта кодов, табл. 3-17 — сводная таблица, разд. 3.4.6 — эмуляция каждой команды
  2. Texas Instruments. MSP430G2x53, MSP430G2x13 Mixed Signal Microcontroller (SLAS735J, revised May 2013) — цикл команды 62,5 нс при 16 МГц; максимальная тактовая частота от напряжения питания

Нашли ошибку?