Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_
.pdf4.6. Описание набора команд 201
POPM.A, POPM[.W]
Извлечение n регистров ЦПУ из стека
Синтаксис |
POPM.A |
#n,Rdst |
1 n 16 |
|
POPM.W |
#n,Rdst или POPM #n,Rdst 1 n 16 |
|
|
|
|
|
Операция |
POPM.A: |
|
|
|
Восстанавливает из стека 20 битные значения заданных регистров ЦПУ. Для каждого |
||
|
значения, извлечённого из стека, указатель стека SP увеличивается на 4 (2 слова на |
||
|
регистр). |
|
|
|
POPM.W: |
|
|
|
Восстанавливает из стека 16 битные значения заданных регистров ЦПУ. Для каждого |
||
|
значения, извлечённого из стека, указатель стека SP увеличивается на 2 (одно слово на |
||
|
регистр). |
|
|
|
|
|
|
Описание |
POPM.A: |
|
|
|
Содержимое стека (20 битные значения) пересылается в регистры ЦПУ, начиная с ре |
||
|
гистра (Rdst – n + 1). По окончании операции указатель стека увеличивается на (n 4). |
||
|
POPM.W: |
|
|
|
Содержимое стека (16 битные значения) пересылается в регистры ЦПУ, начиная с ре |
||
|
гистра (Rdst – n + 1). По окончании операции указатель стека увеличивается на (n 2). |
||
|
Старшие биты (Rdst.19:16) регистров сбрасываются. |
||
|
Примечание. Команда не использует слово расширения. |
||
|
|
||
Биты |
Биты состояния не изменяются, если регистр SR не является операндом |
||
состояния |
|
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются, если регистр SR не является операндом |
||
режима |
|
|
|
|
|
||
Пример 1 |
20 битное содержимое регистров R9…R13 восстанавливается из стека. |
||
|
POPM.A |
#5,R13 |
; Извлекаем R9, R10, R11, R12, R13 |
|
|
||
Пример 2 |
16 битное содержимое регистров R9…R13 восстанавливается из стека. |
||
|
POPM.W |
#5,R13 |
; Извлекаем R9, R10, R11, R12, R13 |
|
|
|
|
202 Глава 4. 16#битное RISC ЦПУ MSP430X
PUSHM.A, PUSHM[.W]
Сохранение n регистров ЦПУ в стеке
Синтаксис |
PUSHM.A |
#n,Rdst |
1 n 16 |
|
PUSHM.W |
#n,Rdst или PUSHM #n,Rdst 1 n 16 |
|
|
|
|
|
Операция |
PUSHM.A: |
|
|
|
Сохраняет 20 битные значения заданных регистров ЦПУ в стеке. Для каждого значения, |
||
|
сохранённого в стеке, указатель стека SP уменьшается на 4 (2 слова на регистр). Стар |
||
|
шие биты сохраняются первыми (по старшему адресу). |
||
|
POPM.W: |
|
|
|
Сохраняет 16 битные значения заданных регистров ЦПУ в стеке. Для каждого значения, |
||
|
сохранённого в стеке, указатель стека SP уменьшается на 2 (одно слово на регистр). |
||
|
|
|
|
Описание |
PUSHM.A: |
|
|
|
Содержимое n регистров ЦПУ, начиная с регистра (Rdst – n + 1), сохраняется в стеке. |
||
|
По окончании операции указатель стека уменьшается на (n 4). Содержимое сохраняе |
||
|
мых регистров (Rn.19:0) остаётся неизменным. |
||
|
PUSHM.W: |
|
|
|
Содержимое n регистров ЦПУ, начиная с регистра (Rdst – n + 1), сохраняется в стеке. |
||
|
По окончании операции указатель стека уменьшается на (n 2). Содержимое сохраняе |
||
|
мых регистров (Rn.19:0) остаётся неизменным. |
||
|
Примечание. Команда не использует слово расширения. |
||
|
|
||
Биты |
Биты состояния не изменяются |
||
состояния |
|
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример 1 |
20 битное содержимое регистров R9…R13 сохраняется в стеке. |
||
|
PUSHM.A |
#5,R13 |
; Сохраняем R9, R10, R11, R12, R13 |
|
|
||
Пример 2 |
16 битное содержимое регистров R9…R13 сохраняется в стеке. |
||
|
PUSHM.W |
#5,R13 |
; Сохраняем R9, R10, R11, R12, R13 |
|
|
|
|
4.6. Описание набора команд 203
* POPX.A, * POPX[.W], * POPX.B Извлечение операнда из стека
Синтаксис |
POPX.A |
dst |
|
|
POPX |
dst или |
POPX.W dst |
|
POPX.B |
dst |
|
|
|
||
Операция |
Извлекает 8/16/20 битное значение из стека в операнд приёмник. Используется 20 бит |
||
|
ная адресация. Указатель стека SP увеличивается на 2 (8 и 16 битные операнды) или 4 |
||
|
(20 битный операнд) |
|
|
|
|
|
|
Эмуляция |
MOVX.A |
@SP+,dst |
|
|
MOVX |
@SP+,dst |
|
|
MOVX.B |
@SP+,dst |
|
|
|
||
Описание |
Последний элемент стека (TOS) извлекается в операнд приёмник. Допускается исполь |
||
|
зование регистрового, индексного, относительного и абсолютного режимов адресации. |
||
|
После этого указатель стека увеличивается на 2 или 4 |
||
|
|
||
Биты |
Биты состояния не изменяются |
||
состояния |
|
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример 1 |
16 битное число извлекается из стека по адресу EDE. |
||
|
POPX.W |
&EDE |
; Пишем слово по адресу EDE |
|
|
||
Пример 2 |
20 битное число извлекается из стека в регистр R9. |
||
|
POPX.A |
R9 |
; Пишем 20$битное число в R9 |
|
|
|
|
PUSHX.A, PUSHX[.W], PUSHX.B Сохранение операнда в стеке
Синтаксис |
PUSHX.A |
src |
|
|
PUSHX |
src |
или PUSHX.W src |
|
PUSHX.B |
src |
|
|
|
||
Операция |
Сохраняет 8/16/20 битное значение операнда источника в стеке. Используется 20 бит |
||
|
ная адресация. Перед записью значения указатель стека SP уменьшается на 2 (8 и 16 |
||
|
битные операнды) или 4 (20 битный операнд) |
||
|
|
||
Описание |
20 битный указатель стека SP уменьшается на 2 (8 и 16 битные операнды) или 4 (20 бит |
||
|
ный операнд), после чего содержимое операнда источника помещается в ОЗУ по адресу, |
||
|
определяемому указателем. Для адресации операнда можно использовать любой из семи |
||
|
режимов |
|
|
|
|
||
Биты |
Биты состояния не изменяются |
||
состояния |
|
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример 1 |
Байт, находящийся по адресу EDE (20 битное значение), сохраняется в стеке. |
||
|
PUSHX.B |
&EDE |
; Сохраняем байт с адресом EDE |
|
|
||
Пример 2 |
Содержимое регистра R9 (20 битное значение) сохраняется в стеке. |
||
|
PUSHX.A |
R9 |
; Сохраняем 20$битное содержимое R9 |
|
|
|
|
204 Глава 4. 16#битное RISC ЦПУ MSP430X
RLAM.A, RLAM[.W]
Арифметический сдвиг влево содержимого регистра ЦПУ
Синтаксис |
RLAM.A |
#n,Rdst (1 n 4) |
|
|
|
|
|
|||||||||
|
RLAM.W |
#n,Rdst |
или |
RLAM |
|
#n,Rdst (1 n 4) |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операция |
C |
MSB |
|
MSB–1 … LSB+1 |
LSB 0 |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Описание |
Содержимое операнда приёмника сдвигается влево на один, два, три или четыре бита, |
|||||||||||||||
|
как показано на Рис. 4.44. По сути, команда RLAM выполняет операцию умножения |
|||||||||||||||
|
(знакового и беззнакового) на 2, 4, 8 или 16. Двухбайтная модификация команды |
|
||||||||||||||
|
(RLAM.W) сбрасывает биты Rdst.19:16. |
|
||||||||||||||
|
|
|
|
|
|
19 |
|
16 |
15 |
0 |
|
|
||||
|
|
|
C |
|
|
0000 |
|
MSB |
|
|
LSB |
|
0 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
19 |
|
|
|
|
0 |
|
|
|||
|
|
|
C |
|
|
MSB |
|
|
|
|
|
|
LSB |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.44. Арифметический сдвиг влево: команды RLAM[.W] и RLAM.A. |
|||||||||||||
|
Примечание. Команда не использует слово расширения. |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Биты |
N: Устанавливается, если результат отрицательный |
|
||||||||||||||
состояния |
|
.A: Rdst.19 = 1, сбрасывается, если Rdst.19 = 0; |
|
|||||||||||||
|
|
.W: Rdst.15 = 1, сбрасывается, если Rdst.15 = 0. |
|
|||||||||||||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|
||||||||||||||
|
C: Загружается из MSB (n = 1), MSB–1 (n = 2), MSB–2 (n = 3), MSB–3 (n = 4). |
|
||||||||||||||
|
V: |
Не определён. |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
||||||||||||||
режима |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Пример |
20 битное содержимое регистра R5 сдвигается влево на три бита. Эта операция эквива |
|||||||||||||||
|
лентна умножению на 8. |
|
|
|
|
|
|
|
||||||||
|
RLAM.A |
#3,R5 |
; R5 = R5 8 |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4.6. Описание набора команд 205
* RLAX.A, * RLAX[.W], * RLAX.B Арифметический сдвиг операнда влево
Синтаксис |
RLAX.A |
|
dst |
|
|
|
|
||
|
RLAX |
|
dst или RLAX.W |
dst |
|||||
|
RLAX.B |
|
dst |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Операция |
C MSB MSB–1 … LSB+1 |
LSB 0 |
|||||||
|
|
|
|
|
|
|
|
|
|
Эмуляция |
ADDX.W |
dst,dst |
|
|
|
|
|||
|
ADDX |
dst,dst |
|
|
|
|
|||
|
ADDX.B dst,dst |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
Описание |
Содержимое операнда приёмника сдвигается влево на один бит, как показано на |
||||||||
|
Рис. 4.45. Старший бит операнда помещается в бит переноса (C), а младший бит обнуля |
||||||||
|
ется. По сути, команда RLA выполняет операцию знакового умножения на 2. |
||||||||
|
|
|
|
MSB |
0 |
|
|
||
|
|
C |
|
|
|
|
|
|
0 |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.45. Операнд приёмник — арифметический сдвиг влево. |
|
|
|
|||
Биты |
N: Устанавливается, если результат отрицательный, сбрасывается — если положитель |
|||
состояния |
|
ный. |
|
|
|
Z: |
Устанавливается, если результат нулевой, иначе сбрасывается. |
||
|
C: |
Загружается из MSB. |
||
|
V: |
Устанавливается, если произошло переполнение: |
||
|
|
начальное значение 040000h dst < 0C0000h; иначе сбрасывается. |
||
|
|
Устанавливается, если произошло переполнение: |
||
|
|
начальное значение 04000h dst < 0C000h; иначе сбрасывается. |
||
|
|
Устанавливается, если произошло переполнение: |
||
|
|
начальное значение 040h dst < 0C0h; иначе сбрасывается. |
||
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример |
20 битное содержимое регистра R7 умножается на 2. |
|||
|
RLAX.A |
R7 |
; Сдвигаем R7 на 1 бит влево ( 2) |
206 Глава 4. 16#битное RISC ЦПУ MSP430X
* RLCX.A, * RLCX[.W], * RLCX.B Сдвиг операнда влево через перенос
Синтаксис |
RLCX.A |
dst |
|
|
RLCX |
dst или RLCX.W |
dst |
|
RLCX.B |
dst |
|
|
|
|
|
Операция |
C MSB |
MSB–1 … LSB+1 |
LSB C |
|
|
|
|
Эмуляция |
ADDCX.A |
dst,dst |
|
|
ADDCX |
dst,dst |
|
|
ADDCX.B |
dst,dst |
|
|
|
||
Описание |
Содержимое операнда приёмника сдвигается влево на один бит, как показано на |
||
|
Рис. 4.46. Бит переноса (C) вдвигается в младший бит (LSB) операнда, а старший бит |
||
|
операнда (MSB) выдвигается в бит переноса. |
MSB |
0 |
C |
|
Рис. 4.46. Операнд приёмник — сдвиг влево через перенос. |
Биты |
N: |
Устанавливается, если результат отрицательный, сбрасывается — если положитель |
состояния |
|
ный. |
|
Z: |
Устанавливается, если результат нулевой, иначе сбрасывается. |
|
C: |
Загружается из MSB. |
V:Устанавливается, если произошло переполнение:
начальное значение 040000h dst < 0C0000h; иначе сбрасывается.
Устанавливается, если произошло переполнение:
начальное значение 04000h dst < 0C000h; иначе сбрасывается.
Устанавливается, если произошло переполнение: начальное значение 040h dst < 0C0h; иначе сбрасывается.
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример 1 |
20 битное содержимое регистра R5 сдвигается на 1 бит влево. |
||
|
RLCX.A |
R5 |
; (R5 2) + C $> R5 |
|
|
||
Пример 2 |
Содержимое байта ОЗУ LEO сдвигается на 1 бит влево. |
||
|
RLCX.B |
LEO |
; MEM(LEO) 2 + C $> MEM(LEO) |
4.6. Описание набора команд 207
RRAM.A, RRAM[.W]
Арифметический сдвиг вправо содержимого регистра ЦПУ
Синтаксис |
RRAM.A |
#n,Rdst (1 n 4) |
|
|
|
|
||||||||
|
RRAM.W |
#n,Rdst |
или |
RRAM |
#n,Rdst (1 n 4) |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операция |
MSB MSB, MSB MSB–1, … LSB+1 LSB, LSB 0 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Описание |
Содержимое операнда приёмника сдвигается вправо на на один, два, три или четыре |
|||||||||||||
|
бита, как показано на Рис. 4.47. Состояние MSB (знак числа) остаётся неизменным. По |
|||||||||||||
|
сути, команда RLA выполняет операцию знакового деления на 2, 4, 8 и 16. Старший бит |
|||||||||||||
|
содержимого (MSB) выдвигается в бит MSB–1 (значение MSB остаётся неизменным). |
|||||||||||||
|
Бит LSB+1 выдвигается в младший бит (LSB), а бит LSB выдвигается в бит переноса C. |
|||||||||||||
|
Двухбайтная модификация команды (RRAM.W) сбрасывает биты Rdst.19:16. |
|||||||||||||
|
|
|
|
19 |
16 |
|
15 |
0 |
|
|
||||
|
|
|
C |
|
0000 |
|
|
|
MSB |
|
LSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
0 |
C |
MSB |
LSB |
Рис. 4.47. Арифметический сдвиг вправо: команды RRAM[.W] и RRAM.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, сдвигается вправо на два бита.
RRAM.A |
#2,R5 |
; R5/4 $> R5 |
Пример 2 20 битное число со знаком, находящееся в регистре R15, умножается на 0.75.
PUSHM.A |
R15 |
; Временно сохраняем R15 в стеке |
|
|||||
RRAM.A |
R15 |
; R15 |
|
0.5 |
$> R15 |
|
||
ADDX.A |
@SP+,R15 |
; |
R15 |
|
0.5 |
+ |
R15 = 1.5 R15 $> R15 |
|
RRAM.A |
R15 |
; |
(1.5 R15) |
0.5 = 0.75 R15 |
$>R15 |
208 Глава 4. 16#битное RISC ЦПУ MSP430X
* RRAX.A, * RRAX[.W], * RRAX.B Арифметический сдвиг операнда вправо
Синтаксис |
RRAX.A |
Rdst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
RRAX.W |
Rdst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
RRAX |
Rdst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
RRAX.B |
Rdst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
RRAX.A |
dst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
RRAX.W |
dst или |
RRAX |
dst |
|
|
|
|
|
|
||||||||||||
|
RRAX.B |
dst |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операция |
MSB MSB, MSB MSB–1, … LSB+1 LSB, LSB 0 |
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Описание |
Регистровый режим адресации: содержимое операнда приёмника сдвигается вправо на |
|||||||||||||||||||||
|
один бит, как показано на Рис. 4.48. Состояние MSB (знак числа) остаётся неизменным. |
|||||||||||||||||||||
|
Команда RRAX.W сбрасывает биты Rdst.19:16, команда RRAX.B сбрасывает биты |
|||||||||||||||||||||
|
Rdst.19:8. Старший бит остаётся неизменным, а младший бит (LSB) выдвигается в бит |
|||||||||||||||||||||
|
переноса C. По сути, команда RRAX выполняет операцию знакового деления на 2. |
|||||||||||||||||||||
|
|
|
|
19 |
|
|
|
|
8 |
|
|
7 |
|
0 |
|
|
||||||
|
|
|
C |
|
|
0 |
|
|
|
|
0 |
|
|
MSB |
|
LSB |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
16 |
|
15 |
|
|
|
|
|
|
0 |
|
|
|||||
|
|
|
C |
|
|
0000 |
|
|
MSB |
|
|
|
|
|
|
LSB |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
||||
|
|
|
C |
|
|
|
MSB |
|
|
|
|
|
|
|
|
|
|
|
LSB |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.48. Арифметический сдвиг вправо: команда RRAX(.B,.A). Регистровая адресация.
Прочие режимы адресации: содержимое операнда приёмника сдвигается вправо на один бит, как показано на Рис. 4.49. Состояние MSB (знак числа) остаётся неизменным, а младший бит (LSB) выдвигается в бит переноса C. По сути, команда RRAX выполняет операцию знакового деления на 2. Все режимы адресации, за исключением непосредс твенного режима, могут использоваться в пределах всего адресного пространства.
|
|
|
|
|
|
|
|
|
|
7 |
|
|
0 |
|
||
|
C |
|
|
|
|
|
|
|
|
|
MSB |
|
|
LSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
|
|
|
|
|
|
|
0 |
|
|||||
|
C |
|
|
|
|
MSB |
|
|
|
|
|
|
|
LSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
|
|
|
|
|
20 |
|
|
|
|
|||
|
|
|
0 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
0 |
C |
MSB |
LSB |
Рис. 4.49. Арифметический сдвиг вправо: команда RRAX(.B,.A). Не регистровая адресация.
4.6. Описание набора команд 209
Биты |
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 не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
20 битное число со знаком, находящееся в регистре R5, сдвигается вправо на четыре бита. |
|||
|
RPT |
#4 |
|
|
|
RRAX.A |
R5 |
; R5/16 $> R5 |
|
|
|
|||
Пример 2 |
Содержимое байта EDE умножается на 0.5. |
|||
|
RRAX.B |
&EDE |
; EDE/2 $> EDE |
|
|
|
|
|
|
RRCM.A, RRCM[.W]
Сдвиг вправо через перенос содержимого регистра ЦПУ
Синтаксис |
RRAM.A |
#n,Rdst (1 n 4) |
|
RRAM.W |
#n,Rdst или RRAM #n,Rdst (1 n 4) |
|
|
|
Операция |
MSB MSB, MSB MSB–1, … LSB+1 LSB, LSB 0 |
|
|
|
|
Описание |
Содержимое операнда приёмника сдвигается вправо на на один, два, три или четыре |
|
|
бита, как показано на Рис. 4.50. Бит переноса (C) вдвигается в старший бит (MSB) опе |
|
|
ранда, а младший бит операнда (LSB) выдвигается в бит переноса (C). Двухбайтная мо |
|
|
дификация команды (RRAM.W) сбрасывает биты Rdst.19:16. |
19 |
16 |
15 |
0 |
C |
0 |
MSB |
LSB |
|
|
|
19 |
|
0 |
|
|
C |
|
MSB |
|
LSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.50. Сдвиг вправо через перенос: команды RRCM[.W] и RRCM.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, сдвигается вправо на три бита. В бит MSB 2 загружается 1.
SETC |
|
; |
Инициализируем |
бит переноса |
RRCM.A |
#3,R5 |
; |
R5 = R5 >> 3 + |
20000h |
Пример 2 Двухбайтное содержимое регистра R6 сдвигается вправо на два бита. В MSB загружается LSB. В бит MSB–1 загружается значение бита переноса.
RRCM.W |
#2,R6 |
; R6 = R6 >> 2. R6.19:16 = 0 |
210 Глава 4. 16#битное RISC ЦПУ MSP430X
RRCX.A, RRCX[.W], RRCX.B
Сдвиг операнда вправо через перенос
Синтаксис |
RRCX.A |
Rdst |
|
|
RRCX.W |
Rdst |
|
|
RRCX |
Rdst |
|
|
RRCX.B |
Rdst |
|
|
RRCX.A |
dst |
|
|
RRCX.W |
dst или RRCX |
dst |
|
RRCX.B |
dst |
|
|
|
||
Операция |
C MSB MSB–1 … LSB+1 LSB C |
||
|
|
||
Описание |
Регистровый режим адресации: содержимое операнда приёмника сдвигается вправо на |
||
|
один бит, как показано на Рис. 4.51. Команда RRCX.W сбрасывает биты Rdst.19:16, ко |
||
|
манда RRCX.B сбрасывает биты Rdst.19:8. Бит переноса (C) вдвигается в MSB операнда, |
||
|
а LSB операнда выдвигается в бит переноса. |
||
|
Прочие режимы адресации: содержимое операнда приёмника сдвигается вправо на один |
||
|
бит, как показано на Рис. 4.52. Бит переноса (C) вдвигается в MSB операнда, а LSB операнда |
||
|
выдвигается в бит переноса. Все режимы адресации, за исключением непосредственного ре |
||
|
жима, могут использоваться в пределах всего адресного пространства. |
|
19 |
8 |
7 |
0 |
C |
0 ––––––––––––––––––––0 |
MSB |
LSB |
19 |
|
16 15 |
0 |
C |
0 0 0 0 |
MSB |
LSB |
|
19 |
0 |
C |
MSB |
LSB |
Рис. 4.51. Сдвиг вправо через перенос: команда RRCX(.B,.A). Регистровая адресация.
|
|
|
|
|
|
|
7 |
|
|
0 |
|
|
|
C |
|
|
|
|
|
|
MSB |
|
|
LSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
|
|
|
|
|
0 |
|
|||
|
C |
|
|
|
MSB |
|
|
|
|
|
LSB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
|
|
20 |
|
|
|
|
||
|
|
|
0 |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
0 |
C |
MSB |
LSB |
|
|
Рис. 4.52. Сдвиг вправо через перенос: команда RRCX(.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: |
Сбрасывается. |