Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_
.pdf
|
|
|
4.6. Описание набора команд 211 |
|
|
||
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример 1 |
20 битное значение по адресу EDE сдвигается на 1 бит вправо. В MSB загружается 1. |
||
|
SETC |
|
; Инициализируем бит переноса |
|
RRCX.A |
EDE |
; EDE = EDE >> 1 + 80000h |
|
|
||
Пример 2 |
Слово, находящееся в регистре R6, сдвигается на 12 битов вправо. |
||
|
RPT |
#12 |
|
|
RRCX.W |
R6 |
; R6 = R6 >> 12. Биты R6.19:16 = 0 |
|
|
|
|
RRUM.A, RRUM[.W]
Сдвиг вправо беззнакового содержимого регистра ЦПУ
Синтаксис |
RRUM.A |
#n,Rdst (1 n 4) |
|
|
|
|
||||||||
|
RRUM.W |
#n,Rdst |
или |
RRUM |
#n,Rdst (1 n 4) |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Операция |
0 MSB MSB MSB–1 … LSB+1 LSB, LSB C |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Описание |
Содержимое операнда приёмника сдвигается вправо на на один, два, три или четыре |
|||||||||||||
|
бита, как показано на Рис. 4.53. В MSB операнда вдвигается 0, а младший бит операнда |
|||||||||||||
|
(LSB) выдвигается в бит переноса C. По сути, команда RRUM выполняет операцию без |
|||||||||||||
|
знакового деления на 2, 4, 6 или 16. Двухбайтная модификация команды (RRUM.W) сбра |
|||||||||||||
|
сывает биты Rdst.19:16. |
|
|
|
|
|
|
|||||||
|
|
|
|
|
19 |
|
16 |
|
15 |
0 |
|
|
||
|
|
|
C |
|
0000 |
|
|
MSB |
|
LSB |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
19 |
|
|
|
|
|
0 |
|
|
|
|
|
|
C |
0 |
MSB |
|
|
|
|
|
|
LSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.53. Сдвиг вправо беззнакового операнда: команды RRUM[.W] и RRUM.A. |
||
|
Примечание. Команда не использует слово расширения. |
||
|
|
||
Биты |
N: Устанавливается, если результат отрицательный |
||
состояния |
.A: Rdst.19 = 1, сбрасывается, если Rdst.19 = 0; |
||
|
.W: Rdst.15 = 1, сбрасывается, если Rdst.15 = 0. |
||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
||
|
C: Загружается из LSB (n = 1), LSB+1 (n = 2), LSB+2 (n = 3), LSB+3 (n = 4). |
||
|
V: Сбрасывается. |
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|||
Пример 1 Беззнаковое 20 битное число, находящееся в регистре R5, делится на 16. |
|||
|
RRUM.A |
#4,R5 |
; R5 = R5 >> 4, R5/16 |
|
|||
Пример 2 Двухбайтное содержимое регистра R6 сдвигается вправо на один бит. Старший бит зна |
|||
|
чения (R6.15) обнуляется. |
||
|
RRUM.W |
#1,R6 |
; R6 = R6/2, R6.19:15 = 0 |
212 Глава 4. 16#битное RISC ЦПУ MSP430X
* RRUX.A, * RRUX[.W], * RRUX.B Сдвиг вправо беззнакового операнда
Синтаксис RRUX.A Rdst RRUX.W Rdst RRUX Rdst RRUX.B Rdst
Операция |
C = 0 MSB MSB–1 … LSB+1 LSB 0 |
|
|
Описание |
С командой RRUX может использоваться только регистровый режим адресации: содер |
|
жимое операнда приёмника сдвигается вправо на один бит, как показано на Рис. 4.54. |
|
Команда RRUX.W сбрасывает биты Rdst.19:16, команда RRUX.B сбрасывает биты |
|
Rdst.19:8. В старший бит загружается 0, а младший бит (LSB) выдвигается в бит переноса |
|
C. |
|
19 |
8 |
7 |
0 |
C |
0 –––––––––––––––––––– 0 |
MSB |
LSB |
|
|
|
|
0 |
|
|
19 |
16 15 |
0 |
C |
0 0 0 0 |
MSB |
LSB |
|
|
0 |
|
|
19 |
0 |
C 0 |
MSB |
LSB |
Рис. 4.54. Сдвиг вправо беззнакового операнда: команда RRUX(.B,.A). Регистровая адресация.
Биты |
N: |
Устанавливается, если результат отрицательный |
||
состояния |
|
.A: dst.19 = 1, сбрасывается, если dst.19 = 0; |
||
|
|
.W: dst.15 = 1, сбрасывается, если dst.15 = 0; |
||
|
|
.B: dst.7 = 1, сбрасывается, если dst.7 = 0. |
||
|
Z: |
Устанавливается, если результат нулевой, иначе сбрасывается. |
||
|
C: |
Загружается из LSB. |
||
|
V: |
Сбрасывается. |
|
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример |
Слово, находящееся в регистре R6, сдвигается на 12 битов вправо. |
|||
|
RPT |
#12 |
|
|
|
RRГX.W |
R6 |
; R6 = R6 >> 12. Биты R6.19:16 = 0 |
4.6. Описание набора команд 213
* SBCX.A, * SBCX[.W], * SBCX.B Вычитание заёма из операнда
Синтаксис |
SBCX.A |
dst |
|
|
SBCX |
dst или SBCX.W dst |
|
|
SBCX.B |
dst |
|
|
|
|
|
Операция |
dst + 0FFFFFh + C dst |
|
|
|
dst + 0FFFFh + C dst |
|
|
|
dst + 0FFh + C dst |
|
|
|
|
|
|
Эмуляция |
SUBCX.B #0,dst |
|
|
|
SUBCX |
#0,dst |
|
|
SUBCX.B #0,dst |
|
|
|
|
||
Описание |
Бит переноса (C), уменьшенный на 1, прибавляется к операнду приёмнику. Предыду |
||
|
щее содержимое операнда теряется |
||
|
|
||
Биты |
N: Устанавливается, если результат отрицательный, сбрасывается — если положитель |
||
состояния |
ный. |
|
|
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
||
|
C: Устанавливается, если произошёл перенос из MSB результата, иначе сбрасывается. |
||
|
Устанавливается, если не было заёма, иначе сбрасывается. |
||
|
V: Устанавливается, если произошло переполнение, иначе сбрасывается. |
||
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример |
8 битный счётчик, на который указывает R13, вычитается из 16 битного счётчика, на |
||
|
который указывает R12. |
|
|
|
SUBX.B |
@R13,0(R12) |
; Вычитаем младшие байты |
|
SBCX.B |
1(R12) |
; Вычитаем заём из старшего байта |
|
|
|
|
Примечание. Признак заёма
В качестве признака заёма используется инверсное значение бита переноса:
Заём |
Бит C |
Есть |
0 |
Нет |
1 |
214 Глава 4. 16#битное RISC ЦПУ MSP430X
SUBX.A, SUBX[.W], SUBX.B Вычитание двух операндов
Синтаксис |
SUBX.A |
src,dst |
|
|
|
SUBX |
src,dst или |
SUBX.W |
src,dst |
|
SUBX.B |
src,dst |
|
|
|
|
|
|
|
Операция |
(.not.src) + 1 + dst dst |
|
|
|
|
или |
|
|
|
|
dst – src dst |
|
|
|
|
|
|||
Описание |
Операнд источник вычитается из операнда приёмника путём прибавления к последне |
|||
|
му обратного кода операнда источника плюс единица. Содержимое операнда источни |
|||
|
ка не изменяется. Результат сохраняется в операнде приёмнике. Оба операнда могут |
|||
|
располагаться в пределах всего адресного пространства |
|||
|
|
|||
Биты |
N: Устанавливается, если результат отрицательный (src > dst), сбрасывается — если по |
|||
состояния |
ложительный (src dst). |
|
|
|
|
Z: Устанавливается, если результат нулевой (src = dst), иначе сбрасывается (src dst). |
|||
|
C: Устанавливается, если произошёл перенос из MSB результата, иначе сбрасывается. |
|||
|
Устанавливается, если не было заёма, иначе сбрасывается. |
|||
|
V: Устанавливается, если результат вычитания отрицательного операнда из положи |
|||
|
тельного отрицателен или если результат вычитания положительного операнда из |
|||
|
отрицательного положителен; иначе сбрасывается (нет переполнения). |
|||
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
20 битная константа 87654h вычитается из слова EDE (младшие биты) и EDE+2 (стар |
|||
|
шие биты). |
|
|
|
|
SUBX.A |
#87654h,EDE |
; Вычитаем 87654h из EDE+2:EDE |
|
|
|
|||
Пример 2 |
Элемент таблицы, адресуемый регистром R5 (20 битный адрес), вычитается из регистра |
|||
|
R7. Если результат равен нулю, то выполняется переход к метке TONI. Содержимое ре |
|||
|
гистра R5 увеличивается на 2. Биты R7.19:16 = 0. |
|||
|
SUBX.W |
@R5+,R7 |
; Вычитаем элемент таблицы из R7, R5 + 2 |
|
|
JZ |
TONI |
; R7 = @R5 перед вычитанием |
|
|
... |
|
; R7 <> @R5 перед вычитанием |
|
|
|
|||
Пример 3 |
Байт CNT вычитается из байта, на который указывает R12. Адрес CNT лежит в пределах |
|||
|
PC ±512 КБ. Регистр R12 может указывать на любую ячейку адресного пространства. |
|||
|
SUBX.B |
CNT,0(R12) |
; Вычитаем CNT из @R12 |
|
|
|
|
|
|
Замечание. Для увеличения плотности кода и скорости выполнения программы используйте коман ду SUBA в следующих случаях:
SUBX.A Rsrc,Rdst или SUBX.A #imm20,Rdst
4.6. Описание набора команд 215
SUBСX.A, SUBСX[.W], SUBСX.B
Вычитание двух операндов с учётом переноса
Синтаксис |
SUBCX.A |
src,dst |
|
|
|
SUBCX |
src,dst или |
SUBCX.W |
src,dst |
|
SUBCX.B |
src,dst |
|
|
|
|
|
|
|
Операция |
(.not.src) + C + dst dst |
|
|
|
|
или |
|
|
|
|
dst – (src – 1) + C dst |
|
|
|
|
|
|||
Описание |
Операнд источник вычитается из операнда приёмника путём прибавления к последне |
|||
|
му обратного кода операнда источника и значения бита переноса. Содержимое операн |
|||
|
да источника не изменяется. Результат сохраняется в операнде приёмнике. Оба операн |
|||
|
да могут располагаться в пределах всего адресного пространства |
|||
|
|
|||
Биты |
N: Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по |
|||
состояния |
ложительный (MSB = 0). |
|
|
|
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|||
|
C: Устанавливается, если произошёл перенос из MSB результата, иначе сбрасывается. |
|||
|
Устанавливается, если не было заёма, иначе сбрасывается. |
|||
|
V: Устанавливается, если результат вычитания отрицательного операнда из положи |
|||
|
тельного отрицателен или если результат вычитания положительного операнда из |
|||
|
отрицательного положителен; иначе сбрасывается (нет переполнения). |
|||
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
||
режима |
|
|
|
|
|
|
|||
Пример 1 |
20 битная константа 87654h вычитается из регистра R5 с учётом переноса от предыду |
|||
|
щей команды. |
|
|
|
|
SUBCX.A |
#87654h,R5 |
; R5 = R5 |
$ 87654h $ C |
|
|
|||
Пример 2 |
48 битное число (3 слова), адресуемое регистром R5 (20 битный адрес), вычитается из |
|||
|
48 битного счётчика, адресуемого регистром R7. После операции R5 указывает на следу |
|||
|
ющее 48 битное число. |
|
|
|
|
SUBX.W |
@R5+,0(R7) ; Вычитаем младшие слова. R5 + 2 |
||
|
SUBCX.W |
@R5+,2(R7) ; Вычитаем средние слова с учётом C. R5 + 2 |
||
|
SUBCX.W |
@R5+,4(R7) ; Вычитаем старшие слова с учётом C. R5 + 2 |
||
|
|
|||
Пример 3 |
Байт CNT вычитается из байта, на который указывает R12, с учётом переноса от преды |
|||
|
дущей операции. Используется 20 битная адресация. |
|||
|
SUBCX.B |
&CNT,0(R12) |
; Вычитаем CNT из @R12 |
|
|
|
|
|
|
216 Глава 4. 16#битное RISC ЦПУ MSP430X
SWPBX.A |
|
Перестановка байтов младшего слова |
||||||||||
SWPBX[.W] |
|
Перестановка байтов двухбайтного слова |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Синтаксис |
SWPBX.A |
dst |
|
|
|
|
|
|
|
|||
|
SWPBX.W |
dst |
или |
SWPBX dst |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||
Операция |
dst.15…8 dst.7…0 |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|||||
Описание |
Регистровый режим адресации: биты Rn.15:8 и Rn.7:0 меняются местами. При использо |
|||||||||||
|
вании команды с суффиксом .A состояние битов Rdst.19:16 не изменяется. При исполь |
|||||||||||
|
зовании команды с суффиксом .W биты Rdst.19:16 сбрасываются. |
|||||||||||
|
Прочие режимы адресации: при использовании команды с суффиксом .A биты 31:20 по |
|||||||||||
|
адресу операнда приёмника сбрасываются, биты 19:16 остаются неизменными, а биты |
|||||||||||
|
15:8 и биты 7:0 меняются местами. При использовании команды с суффиксом .W биты |
|||||||||||
|
15:8 и биты 7:0 адресованного слова меняются местами. |
|
|
|||||||||
|
|
До команды SWPBX.A |
|
|
|
|
||||||
|
|
19 |
16 |
15 |
|
|
8 |
7 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
Старший байт |
|
|
Младший байт |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
После команды SWPBX.A |
|
|
|
|
||||||
|
|
19 |
16 |
15 |
|
|
8 |
7 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
Младший байт |
|
|
Старший байт |
|
|
|
|
|
|
|
|
|
|
||||
|
|
Рис. 4.55. Перестановка байтов: команда SWPBX.A, регистровая адресация. |
||||||||||
|
|
|
До команды SWPBX.A |
|
|
|
|
|||||
|
|
31 |
20 19 |
16 |
|
15 |
8 |
7 |
0 |
|
||
|
|
|
X |
|
X |
|
|
Старший байт |
|
|
Младший байт |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
После команды SWPBX.A |
|
|
|
|
|||||
|
|
31 |
20 19 |
16 |
|
15 |
8 |
7 |
0 |
|
||
|
|
|
0 |
|
X |
|
|
Младший байт |
|
|
Старший байт |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.56. Перестановка байтов: команда SWPBX.A, операнд в ОЗУ.
|
|
|
|
|
|
|
|
4.6. Описание набора команд 217 |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
Описание |
До команды SWPBX |
|
|
|
|
||||
|
19 |
16 |
|
15 |
8 |
7 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
Старший байт |
|
Младший байт |
|
|
|
|
|
|
|
|
|||
|
После команды SWPBX |
|
|
|
|||||
|
19 |
16 |
|
15 |
8 |
7 |
0 |
|
|
|
|
|
0 |
|
|
Младший байт |
|
Старший байт |
|
|
|
|
|
|
|
||||
|
Рис. 4.57. Перестановка байтов: команда SWPBX[.W], регистровая адресация. |
||||||||
|
|
До команды SWPBX |
|
|
|
||||
|
|
|
|
|
15 |
8 |
7 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Старший байт |
|
Младший байт |
|
|
|
|
|
|
|
|
|||
|
|
После команды SWPBX |
|
|
|
||||
|
|
|
|
|
15 |
8 |
7 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Младший байт |
|
Старший байт |
|
|
|
|
|
|
|
||||
|
|
Рис. 4.58. Перестановка байтов: команда SWPBX[.W], операнд в ОЗУ. |
|||||||
Биты |
Биты состояния не изменяются |
|
|
|
|||||
состояния |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
|
|
|||||
режима |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Пример 1 |
Меняются местами байты 20 битного слова EDE в ОЗУ. |
||||||||
|
MOVX.A |
#23456h,&EDE ; 23456h $> EDE |
|
|
|||||
|
SWPBX.A |
EDE |
|
; 25634h $> EDE |
|
|
|||
|
|
|
|
|
|
||||
Пример 2 |
Старший и младший байты содержимого регистра R5 меняются местами. |
||||||||
|
MOVX.A |
#23456h,R5 |
; 23456h $> R5 |
|
|
||||
|
SWPBX.W |
R5 |
|
; 05634h $> R5 |
|
|
|||
|
|
|
|
|
|
|
|
|
|
218 Глава 4. 16#битное RISC ЦПУ MSP430X
SXTX.A |
|
Расширение знака до 20Cбитного значения |
|
|
|
|
||||||||||||||||
SXTX[.W] |
Расширение знака до 16Cбитного значения |
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Синтаксис |
SXTX.A |
dst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
SXTX.W |
dst |
или SXTX |
dst |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Операция |
dst.7 dst.15:8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
dst.7 dst.19:8 (при использовании регистрового режима адресации) |
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
Описание |
Регистровый режим адресации: знаковый бит младшего байта операнда (Rdst.7) в биты |
|||||||||||||||||||||
|
19:8 регистра. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
Прочие режимы: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
SXTX.A: знаковый бит младшего байта слова (dst.7) копируется в биты dst.19:8 операнда. |
|||||||||||||||||||||
|
Биты dst.32:20 сбрасываются. |
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
SXTX[.W]: знаковый бит младшего байта слова (dst.7) копируется в биты dst.15:8 опе |
|||||||||||||||||||||
|
ранда. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
SXTX.A Rdst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
19 |
16 15 |
|
8 |
7 |
6 |
0 |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SXTX.A dst |
|
|
|
|
|
|
|
|
|
|
S |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
31 |
|
|
20 19 |
16 15 |
|
8 |
7 |
6 |
0 |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
...... |
|
0 |
|
|
|
|
|
|
|
S |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
Рис. 4.59. Расширение знака: команда SXTX.A. |
|
|
|
||||||||||||
|
|
|
|
SXTX[.W] Rdst |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
19 |
|
16 |
15 |
|
|
8 |
7 |
6 |
|
|
|
|
0 |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
S |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
SXTX[.W] dst |
15 |
|
|
8 |
7 |
6 |
|
|
|
|
0 |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
S |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
Рис. 4.60. Расширение знака: команда SXTX[.W]. |
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
Биты |
N: Устанавливается, если результат отрицательный, сбрасывается — если положитель |
|||||||||||||||||||||
состояния |
|
ный. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|
|
|
||||||||||||||||||
|
C: Устанавливается, если результат ненулевой, иначе сбрасывается (C = .not.Z). |
|||||||||||||||||||||
|
V: |
Сбрасывается. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
|
|
|
|
|
|
|
|
||||||||||||
режима |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
Пример |
8 битное число со знаком, находящееся в битах EDE.7:0, расширяется до 20 бит. Биты 32:20, |
|||||||||||||||||||||
|
расположенные в EDE+2, сбрасываются. |
|
|
|
|
|
|
|
|
|
||||||||||||
|
SXTX.A |
&EDE |
|
; Расширяем знак EDE $> EDE+2:EDE |
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4.6. Описание набора команд 219
* TSTX.A, * TSTX[.W], * TSTX.B Проверка операнда (на ноль)
Синтаксис |
TSTX.A |
dst |
|
|
|
|
TSTX |
dst или |
TSTX.W |
dst |
|
|
TSTX.B |
dst |
|
|
|
|
|
|
|
||
Операция |
dst + 0FFFFFh + 1 |
|
|
||
|
dst + 0FFFFh + 1 |
|
|
||
|
dst + 0FFh + 1 |
|
|
||
|
|
|
|
||
Эмуляция |
CMPX.A #0,dst |
|
|
||
|
CMPX |
#0,dst |
|
|
|
|
CMPX.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 |
Проверяется байт LEO в ОЗУ; счётчик команд указывает на верхнюю область памяти. |
||||
|
Если значение байта отрицательно, то выполнение программы продолжается с метки |
||||
|
LEONEG, если положительно и не равно нулю — с метки LEOPOS. |
||||
|
|
|
TSTX.B |
LEO |
; Проверяем LEO |
|
|
|
JN |
LEONEG |
; LEO < 0 |
|
|
|
JZ |
LEOZERO |
; LEO = 0 |
|
LEOPOS |
...... |
|
; LEO > 0 |
|
|
LEONEG |
...... |
|
; LEO < 0 |
|
|
LEOZERO ...... |
|
; LEO = 0 |
||
|
|
|
|
|
|
220 Глава 4. 16#битное RISC ЦПУ MSP430X
XORX.A, XORX[.W], XORX.B «Исключающее ИЛИ» двух операндов
Синтаксис |
XORX.A |
src,dst |
|
|
|
XORX |
src,dst или |
XORX.W |
src,dst |
|
XORX.B |
src,dst |
|
|
|
|
|
|
|
Операция |
src .xor. dst dst |
|
|
|
|
|
|||
Описание |
Выполняется операция «Исключающее ИЛИ» между операндом источником и операн |
|||
|
дом приёмником. Результат помещается в операнд приёмник. Операнд источник не |
|||
|
изменяется. Предыдущее содержимое операнда приёмника теряется. Оба операнда мо |
|||
|
гут располагаться в пределах всего адресного пространства |
|||
|
|
|||
Биты |
N: Устанавливается, если результат отрицателен (MSB = 1), иначе сбрасывается. |
|||
состояния |
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|||
|
C: Устанавливается, если результат ненулевой, иначе сбрасывается (С = .not.Z). |
|||
|
V: Устанавливается, если оба операнда отрицательные. |
|||
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
Состояние битов 20 битного слова CNTR изменяется в соответствии со значением 20 |
|||
|
битного слова TONI (20 битный адрес). |
|
||
|
XORX.A |
TONI,&CNTR |
; Переключаем биты CNTR |
|
|
|
|||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), используется для изме |
|||
|
нения состояния битов регистра R6. Биты R6.19:6 = 0. |
|||
|
XORX.W |
@R5,R6 |
; Переключаем биты R6. R6.19:16 = 0 |
|
|
|
|||
Пример 3 |
Сбрасываются в 0 те биты младшего байта R7, которые отличаются от соответствующих |
|||
|
битов 1 байтовой переменной EDE (20 битный адрес). |
|||
|
XORX.B |
EDE,R7 |
; Устанавливаем отличающиеся биты в 1 |
|
|
INV.B |
R7 |
; Инвертируем младший байт. R7.19:8 = 0 |
|
|
|
|
|
|
4.6.4. Адресные команды
Адресные команды MSP430X — это такие команды, которые способны рабо тать с 20 битными операндами, однако ограничены в использовании ряда режи мов адресации. Все адресные команды, за исключением команды MOVA, могут за действовать только регистровый и непосредственный режимы адресации (см. Табл. 4.16). Данное ограничение избавляет от необходимости использовать дополнительное слово расширения, что увеличивает плотность кода и скорость выполнения программы. Далее в настоящем разделе приведены подробные опи сания всех адресных команд.