MSP430_Final
.pdf
|
|
|
|
|
|
|
4.6. Описание набора команд 181 |
|
|
|
|
|
|
|
|
||
SWPB |
Перестановка байтов |
|
|
|
||||
|
|
|
|
|
|
|
|
|
Синтаксис |
SWP |
dst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операция |
dst.15…8 dst.7…0 |
|
|
|
|
|
||
|
|
|
|
|
||||
Описание |
Старший и младший байты операнда приёмника меняются местами. При использова |
|||||||
|
нии регистрового режима адресации биты 19:16 регистра сбрасываются |
|||||||
|
|
|
|
|
|
|
||
Биты |
Биты состояния не изменяются |
|
|
|
||||
состояния |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
|
|
||||
режима |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Пример |
Старший и младший байты слова EDE (нижние 64 КБ) меняются местами. |
|||||||
|
MOV |
#1234h,&EDE |
; 1234h $> EDE |
|
|
|
||
|
SWP |
&EDE |
; 3412h $> EDE |
|
|
|
||
|
|
|
До команды SWPB |
|
|
|
||
|
|
15 |
8 |
|
7 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Старший байт |
|
|
Младший байт |
|
|
|
|
|
|
|
|
|
|
|
|
После команды SWPB |
|
|
|
|||
|
|
15 |
8 |
|
7 |
0 |
|
|
|
|
|
|
Старший байт |
|
|
Младший байт |
|
|
|
|
|
|
|
|
|
|
Рис. 4.42. Перестановка байтов слова в памяти.
До команды SWPB |
|
|
|
||
19 |
16 |
15 |
8 |
7 |
0 |
|
|
|
|
|
|
|
x |
|
Старший байт |
|
Младший байт |
|
|
|
|
||
После команды SWPB |
|
|
|||
19 |
16 |
15 |
8 |
7 |
0 |
0 |
... 0 |
|
Старший байт |
|
Младший байт |
|
|
|
|
|
|
Рис. 4.43. Перестановка байтов в регистре.
182 Глава 4. 16#битное RISC ЦПУ MSP430X
SXT |
Расширение знака |
||
|
|
|
|
Синтаксис |
SXT |
dst |
|
|
|
|
|
Операция |
dst.7 dst.15:8 |
|
|
|
dst.7 dst.19:8 (при использовании регистрового режима адресации) |
||
|
|
||
Описание |
Регистровый режим: знаковый бит младшего байта слова копируется в биты 19:8 регистра. |
||
|
Если Rdst.7 = 0, то после операции Rdst.19:8 = 000h. |
||
|
Если Rdst.7 = 1, то после операции Rdst.19:8 = FFFh. |
||
|
Прочие режимы: знаковый бит младшего байта слова копируется во все биты старшего |
||
|
байта операнда. |
|
|
|
Если dst.7 = 0, то после операции старший байт = 00h. |
||
|
Если dst.7 = 1, то после операции старший байт = FFh. |
||
|
|
||
Биты |
N: Устанавливается, если результат отрицательный, сбрасывается — если положитель |
||
состояния |
ный. |
|
|
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
||
|
C: Устанавливается, если результат ненулевой, иначе сбрасывается (C = .not.Z). |
||
|
V: Сбрасывается. |
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример 1 |
8 битное число со знаком в EDE (нижние 64 КБ) приводится к 16 битному виду и скла |
||
|
дывается с 16 битным значением в регистре R7. |
||
|
MOV.B |
&EDE,R5 |
; EDE $> R5.00XXh |
|
SXT |
R5 |
; Копируем знак младшего байта в биты R5.19:8 |
|
ADD |
R5,R7 |
; Складываем 16$битные значения |
|
|
||
Пример 2 |
8 битное число со знаком в EDE (PC ±32 КБ) приводится к 20 битному виду и склады |
||
|
вается с 20 битным значением в регистре R7. |
||
|
MOV.B |
EDE,R5 |
; EDE $> R5.00XXh |
|
SXT |
R5 |
; Копируем знак младшего байта в биты R5.19:8 |
|
ADDA |
R5,R7 |
; Складываем 20$битные значения |
|
|
|
|
4.6. Описание набора команд 183
* TST[.W], * TST.B
Проверка операнда (на ноль)
Синтаксис |
TST |
dst или |
TST.W |
dst |
|
|
TST.B |
dst |
|
|
|
|
|
|
|
||
Операция |
dst + 0FFFFh + 1 |
|
|
||
|
dst + 0FFh + 1 |
|
|
||
|
|
|
|
|
|
Эмуляция |
CMP |
#0,dst |
|
|
|
|
CMP.B #0,dst |
|
|
||
|
|
||||
Описание |
Операнд приёмник сравнивается с нулём и в соответствии с результатом изменяются |
||||
|
биты состояния. Сам операнд остаётся неизменным |
||||
|
|
||||
Биты |
N: Устанавливается, если операнд отрицателен, сбрасывается — если положителен. |
||||
состояния |
Z: Устанавливается, если операнд равен нулю, иначе сбрасывается. |
||||
|
C: |
Устанавливается. |
|
||
|
V: |
Сбрасывается. |
|
|
|
|
|
||||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||||
режима |
|
|
|
|
|
|
|
||||
Пример 1 |
Проверяется содержимое регистра R7. Если оно отрицательное, то выполнение про |
||||
|
граммы продолжается с метки R7NEG, если положительное и не равно нулю — с метки |
||||
|
R7POS |
|
|
|
|
|
|
|
TST |
R7 |
; Проверяем R7 |
|
|
|
JN |
R7NEG |
; R7 < 0 |
|
|
|
JZ |
R7ZERO |
; R7 = 0 |
|
R7POS |
...... |
|
; R7 > 0 |
|
|
R7NEG |
...... |
|
; R7 < 0 |
|
|
R7ZERO ...... |
|
; R7 = 0 |
||
|
|
||||
Пример 2 |
Проверяется младший байт регистра R7. Если он отрицателен, то выполнение програм |
||||
|
мы продолжается с метки R7NEG, если положителен и не равен нулю — с метки R7POS. |
||||
|
|
|
TST.B |
R7 |
; Проверяем R7 |
|
|
|
JN |
R7NEG |
; R7 < 0 |
|
|
|
JZ |
R7ZERO |
; R7 = 0 |
|
R7POS |
...... |
|
; R7 > 0 |
|
|
R7NEG |
...... |
|
; R7 < 0 |
|
|
R7ZERO ...... |
|
; R7 = 0 |
||
|
|
|
|
|
|
184 Глава 4. 16#битное RISC ЦПУ MSP430X
XOR[.W], XOR.B
«Исключающее ИЛИ» двух операндов
Синтаксис |
XOR |
src,dst или |
XOR.W |
src,dst |
|
XOR.B |
src,dst |
|
|
|
|
|
|
|
Операция |
src .xor. dst dst |
|
|
|
|
|
|||
Описание |
Выполняется операция «Исключающее ИЛИ» между операндом источником и операн |
|||
|
дом приёмником. Результат помещается в операнд приёмник. Операнд источник не |
|||
|
изменяется. Предыдущее содержимое операнда приёмника теряется |
|||
|
|
|||
Биты |
N: Устанавливается, если результат отрицателен (MSB = 1), иначе сбрасывается. |
|||
состояния |
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|||
|
C: Устанавливается, если результат ненулевой, иначе сбрасывается (С = .not.Z). |
|||
|
V: Устанавливается, если оба операнда отрицательные. |
|||
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
Установленные биты слова TONI (20 битное число) изменяют состояние соответствую |
|||
|
щих битов слова CNTR (16 битное число). Оба операнда расположены в нижней 64 КБ |
|||
|
области. |
|
|
|
|
XOR |
&TONI,&CNTR |
; Переключаем биты CNTR |
|
|
|
|||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), используется для изме |
|||
|
нения состояния битов регистра R6. Биты R6.19:6 = 0. |
|||
|
XOR |
@R5,R6 |
; Переключаем биты R6 |
|
|
|
|||
Пример 3 |
Сбрасываются в 0 те биты младшего байта R7, которые отличаются от соответствующих |
|||
|
битов 1 байтовой переменной EDE. Биты R7.19:8 = 0. Адрес EDE лежит в диапазоне |
|||
|
PC ±32 КБ. |
|
|
|
|
XOR.B |
EDE,R7 |
; Устанавливаем отличающиеся биты в 1 |
|
|
INV.B |
R7 |
; Инвертируем младший байт, |
;старший байт = 0
4.6.3.Расширенные команды
Расширенный набор команд MSP430X позволяет этому ЦПУ в полной мере использовать доступное адресное пространство, определяемое 20 битной шиной адреса. Большинство команд MSP430X требуют ещё одного слова для хранения кода команды, так называемого слова расширения. Все адреса, смещения и не посредственные значения, которым предшествует слово расширения, являются 20 битными. Ниже приведены подробные описания всех расширенных команд MSP430X. Если команда не требует дополнительного слова, это явно указывается в её описании.
4.6. Описание набора команд 185
* ADCX.A, * ADCX[.W], * ADCX.B Сложение переноса операндом
Синтаксис |
ADCX.A |
dst |
|
|
ADCX |
dst |
или ADXC.W dst |
|
ADCX.B |
dst |
|
|
|
|
|
Операция |
dst + C dst |
|
|
|
|
|
|
Эмуляция |
ADDCX.A |
#0,dst |
|
|
ADDCX |
#0,dst |
|
|
ADDCX.B |
#0,dst |
|
|
|
||
Описание |
Бит переноса (C) прибавляется к операнду приёмнику. Предыдущее содержимое опе |
||
|
ранда теряется |
|
|
|
|
||
Биты |
N: Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по |
||
состояния |
ложительный (MSB = 0). |
||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
||
|
C: Устанавливается, если dst изменился с 0FFFFh до 0000, иначе сбрасывается. |
||
|
Устанавливается, если dst изменился с 0FFh до 00, иначе сбрасывается. |
||
|
V: Устанавливается, если произошло переполнение, иначе сбрасывается. |
||
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример |
40 битный счётчик, на который указывают регистры R12 и R13, инкрементируется. |
||
|
INCX.A |
@R12 ; Инкрементируем младшие 20 бит |
|
|
ADCX.A |
@R13 |
; Прибавляем перенос к старшим 20 бит |
|
|
|
|
186 Глава 4. 16#битное RISC ЦПУ MSP430X
ADDX.A, ADDX[.W], ADDX.B Сложение двух операндов
Синтаксис |
ADDX.A |
src,dst |
|
|
|
ADDX |
src,dst или |
ADDX.W |
src,dst |
|
ADDX.B |
src,dst |
|
|
|
|
|
|
|
Операция |
src + dst dst |
|
|
|
|
|
|||
Описание |
Операнд источник прибавляется к операнду приёмнику. Предыдущее содержимое опе |
|||
|
ранда приёмника теряется. Оба операнда могут находиться в любом месте адресного |
|||
|
пространства |
|
|
|
|
|
|||
Биты |
N: Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по |
|||
состояния |
ложительный (MSB = 0). |
|
||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|||
|
C: Устанавливается, если произошёл перенос, иначе сбрасывается. |
|||
|
V: Устанавливается, если результат операции над двумя положительными операндами |
|||
|
отрицателен или если результат операции над двумя отрицательными операндами |
|||
|
положителен; иначе сбрасывается. |
|
||
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
К 20 битному счётчику CNTR, расположенному в двух словах ОЗУ CNTR (младшие би |
|||
|
ты) и CNTR+2 (старшие биты), прибавляется десять. |
|||
|
ADDX.A |
#10,CNTR |
; Прибавляем 10 к 20$битному счётчику |
|
|
|
|||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), складывается с содер |
|||
|
жимым регистра R6. В случае переноса осуществляется переход к метке TONI. |
|||
|
ADDX.W |
@R5,R6 |
; Прибавляем слово к R6, R6.19:16 = 0 |
|
|
JC |
TONI |
; Переходим в случае переноса |
|
|
... |
|
; Нет переноса |
|
|
|
|||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), складывается с содержи |
|||
|
мым регистра R6. При отсутствии переноса осуществляется переход к метке TONI. Ука |
|||
|
затель на таблицу автоматически инкрементируется. |
|||
|
ADDX.B |
@R5+,R6 |
; Прибавляем байт к R6. R5 + 1. R6: 000xxh |
|
|
JNC |
TONI |
; Переходим, если нет переноса |
|
|
... |
|
; Был перенос |
|
|
|
|
|
|
Замечание. Для увеличения плотности кода и скорости выполнения программы используйте коман ду ADDA в следующих случаях:
ADDX.A Rsrc,Rdst или ADDX.A #imm20,Rdst
4.6. Описание набора команд 187
ADDСX.A, ADDСX[.W], ADDСX.B
Сложение двух операндов с учётом переноса
Синтаксис |
ADDCX.A |
src,dst |
|
|
|
ADDCX |
src,dst или |
ADDCX.W |
src,dst |
|
ADDCX.B |
src,dst |
|
|
|
|
|
|
|
Операция |
src + dst + C dst |
|
|
|
|
|
|||
Описание |
Операнд источник и бит переноса (C) прибавляются к операнду приёмнику. Предыду |
|||
|
щее содержимое операнда приёмника теряется. Оба операнда могут находиться в любом |
|||
|
месте адресного пространства |
|
||
|
|
|||
Биты |
N: Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по |
|||
состояния |
ложительный (MSB = 0). |
|
|
|
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|||
|
C: Устанавливается, если произошёл перенос из старшего бита результата, иначе сбра |
|||
|
сывается. |
|
|
|
|
V: Устанавливается, если результат операции над двумя положительными операндами |
|||
|
отрицателен или если результат операции над двумя отрицательными операндами |
|||
|
положителен; иначе сбрасывается. |
|
||
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
||
режима |
|
|
|
|
|
|
|||
Пример 1 |
К 20 битному счётчику CNTR, расположенному в двух словах ОЗУ, прибавляется число |
|||
|
15 и бит переноса от предыдущей операции. |
|||
|
ADDCX.W |
#15,&CNTR |
; Прибавляем 15+C к 20$битному счётчику |
|
|
|
|||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), и бит переноса C скла |
|||
|
дываются с содержимым регистра R6. В случае переноса осуществляется переход к мет |
|||
|
ке TONI. |
|
|
|
|
ADDCX.W |
@R5,R6 |
; Прибавляем слово и C к R6 |
|
|
JC |
TONI |
; Переходим в случае переноса |
|
|
... |
|
; Нет переноса |
|
|
|
|||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), складывается с содержи |
|||
|
мым регистра R6. При отсутствии переноса осуществляется переход к метке TONI. Ука |
|||
|
затель на таблицу автоматически инкрементируется. |
|||
|
ADDCX.B |
@R5+,R6 |
; Прибавляем байт и C к R6. R5 = R5 + 1. |
|
|
JNC |
TONI |
; Переходим, если нет переноса |
|
|
... |
|
; Был перенос |
|
|
|
|
|
|
188 Глава 4. 16#битное RISC ЦПУ MSP430X
ANDX.A, ANDX[.W], ANDX.B «Логическое И» двух операндов
Синтаксис |
ANDX.A |
src,dst |
|
|
|
ANDX |
src,dst или |
AND.W |
src,dst |
|
ANDX.B |
src,dst |
|
|
|
|
|
|
|
Операция |
src .and. dst dst |
|
|
|
|
|
|||
Описание |
Выполняется операция «Логическое И» между операндом источником и операндом |
|||
|
приёмником. Результат помещается в операнд приёмник. Операнд источник не изме |
|||
|
няется. Оба операнда могут находиться в любом месте адресного пространства |
|||
|
|
|||
Биты |
N: Устанавливается, если результат отрицателен (MSB = 1), сбрасывается — если поло |
|||
состояния |
жительный (MSB = 0). |
|
|
|
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|||
|
C: Устанавливается, если результат ненулевой, иначе сбрасывается. С = (.not. Z) |
|||
|
V: Сбрасывается. |
|
|
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
Содержимое регистра R5 (20 битное значение) используется в качестве битовой маски |
|||
|
(AAA55h) для 20 битного слова TOM, расположенного в двух словах ОЗУ. Если резуль |
|||
|
тат равен нулю, то выполняется переход к метке TONI. |
|||
|
MOVA |
#AAA55h,R5 |
; Загружаем 20$битную маску в R5 |
|
|
ANDX.A |
R5,TOM |
; TOM .and. R5 $> TOM |
|
|
JZ |
TONI |
; Переходим, если результат нулевой |
|
|
... |
|
; Результат не равен нулю |
|
|
или короче |
|
|
|
|
ANDX.A |
#AAA55h,TOM |
; TOM .and. AAA55h $> TOM |
|
|
JZ |
TONI |
; Переходим, если результат нулевой |
|
|
|
|||
Пример 2 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), логически перемножает |
|||
|
ся с содержимым регистра R6. После выборки байта R5 инкрементируется. Биты |
|||
|
R6.19:8 = 0. |
|
|
|
|
ANDX.B |
@R5+,R6 |
; «Логическое И» между байтом из таблицы |
|
|
|
|
; и R6. R5 + 1. |
|
|
|
|
|
|
4.6. Описание набора команд 189
BICX.A, BICX[.W], BICX.B Очистка битов операнда
Синтаксис |
BICX.A |
src,dst |
|
|
|
|
BICX |
src,dst или |
BICX.W |
src,dst |
|
|
BICX.B |
src,dst |
|
|
|
|
|
|
|
||
Операция |
(.not. src) .and. dst dst |
|
|
||
|
|
||||
Описание |
Выполняется операция «Логическое И» между инвертированным значением операнда |
||||
|
источника и операндом приёмником. Результат помещается в операнд приёмник. Опе |
||||
|
ранд источник не изменяется. Оба операнда могут находиться в любом месте адресного |
||||
|
пространства |
|
|
||
|
|
|
|
||
Биты |
N: Не изменяется. |
|
|
||
состояния |
Z: |
Не изменяется. |
|
|
|
|
C: |
Не изменяется . |
|
|
|
|
V: |
Не изменяется. |
|
|
|
|
|
||||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||||
режима |
|
|
|
|
|
|
|
||||
Пример 1 |
Сбрасываются биты 19:15 регистра R5 (20 битное значение). |
||||
|
BICX.A |
#0F8000h,R5 |
; Сбрасываем биты R5.19:15 |
||
|
|
||||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), используется для очист |
||||
|
ки битов регистра R7. Биты R7.19:16 = 0. |
||||
|
BIXC.W |
@R5,R7 |
; Сбрасываем биты в R7 |
||
|
|
||||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), используется для очист |
||||
|
ки битов порта Port1. |
|
|
||
|
BICX.B |
@R5,&P1OUT |
; Очищаем биты порта 1, |
||
|
|
|
|
; которые установлены в @R5 |
|
|
|
|
|
|
|
190 Глава 4. 16#битное RISC ЦПУ MSP430X
BISX.A, BISX[.W], BISX.B Установка битов операнда
Синтаксис |
BISX.A |
src,dst |
|
|
|
|
BISX |
src,dst или |
BISX.W |
src,dst |
|
|
BISX.B |
src,dst |
|
|
|
|
|
|
|
||
Операция |
src .or. dst dst |
|
|
||
|
|
||||
Описание |
Выполняется операция «Логическое ИЛИ» между операндом источником и операндом |
||||
|
приёмником. Результат помещается в операнд приёмник. Операнд источник не изме |
||||
|
няется. Оба операнда могут находиться в любом месте адресного пространства |
||||
|
|
|
|
||
Биты |
N: Не изменяется. |
|
|
||
состояния |
Z: |
Не изменяется. |
|
|
|
|
C: |
Не изменяется . |
|
|
|
|
V: |
Не изменяется. |
|
|
|
|
|
||||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||||
режима |
|
|
|
|
|
|
|
||||
Пример 1 |
Устанавливаются биты 15 и 16 регистра R5 (20 битное значение). |
||||
|
BISX.A |
#018000h,R5 |
; Устанавливаем биты R5.16:15 |
||
|
|
||||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), используется для уста |
||||
|
новки битов регистра R7. |
|
|
||
|
BISX.W |
@R5,R7 |
; Устанавливаем биты R7 |
||
|
|
||||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), используется для уста |
||||
|
новки битов порта Port1. |
|
|
||
|
BISX.B |
@R5,&P1OUT |
; Устанавливаем биты порта 1 |
||
|
|
|
|
|
|