Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_

.pdf
Скачиваний:
94
Добавлен:
05.03.2016
Размер:
2.03 Mб
Скачать

4.6. Описание набора команд 171

* RET

Возврат из подпрограммы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Синтаксис

RET

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Операция

@SP PC.15:0; PC.19:16

0

 

 

 

 

 

 

SP + 2 SP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Эмуляция

MOV

@SP+,PC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание

16 битный адрес возврата (нижние 64 КБ), помещённый в стек при выполнении коман

 

ды CALL, загружается в счётчик команд. Выполнение программы продолжается с коман

 

ды, следующей за командой вызова подпрограммы. Четыре старших бита PC.19:16 сбра

 

сываются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Биты

Биты состояния не изменяются.

 

 

 

 

состояния

PC.19:16 сбрасываются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

 

 

 

 

режима

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример

Вызывается подпрограмма SUBR, расположенная в нижней 64 КБ области памяти.

 

 

CALL

#SUBR

; Вызываем подпрограмму по адресу SUBR

 

 

...

 

 

 

; Из подпрограммы возвращаемся сюда

 

SUBR

PUSH

R14

; Сохраняем R14 (16$битное значение)

 

 

...

 

 

 

; Тело подпрограммы

 

 

POP

R14

; Восстанавливаем R14

 

 

RET

 

 

 

; Возвращаемся в нижние 64 КБ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SP

 

Элемент n

 

SP

 

Элемент n

 

 

 

 

 

 

 

 

 

 

 

 

 

PCвозвр.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Стек до выполнения

Стек после выполнения

 

 

 

 

команды RET

 

команды RET

Рис. 4.37. Состояние стека после выполнения команды RET.

172 Глава 4. 16#битное RISC ЦПУ MSP430X

RETI

 

Возврат из прерывания

 

 

 

 

Синтаксис

RETI

 

 

 

 

Операция

@SP SR.15:0 Восстанавливаем регистр состояния SR и биты PC.19:16

 

SP + 2 SP

 

 

 

TOS PC.15:0 Восстанавливаем счётчик команд PC.15:0

 

SP + 2 SP

 

 

 

 

Описание

Содержимое регистра состояния восстанавливается таким, каким оно было при входе в

 

процедуру обработки прерывания. Одновременно восстанавливается содержимое стар

 

ших битов счётчика команд PC.19:16. Затем указатель стека увеличивается на 2.

 

20 битное содержимое счётчика команд восстанавливается таким, каким оно было на

 

момент принятия запроса прерывания (биты PC.19:16 — из того же элемента стека, что и

 

регистр состояния, биты PC.15:0 — из следующего элемента). Затем указатель стека уве

 

личивается на 2

 

 

 

 

 

Биты

N: Восстанавливается из стека.

 

состояния

Z:

Восстанавливается из стека.

 

 

C:

Восстанавливается из стека.

 

 

V:

Восстанавливается из стека.

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

 

Пример

Подпрограмма обработки прерывания располагается в нижней 64 КБ области. В стеке

 

сохраняется 20 битный адрес возврата.

 

INTRPT PUSHM.A

#2,R14

; Сохраняем R14 и R13

 

 

 

 

; (20$битные данные)

 

 

...

 

; Тело обработчика прерывания

 

 

POPM.A

#2,R14

; Восстанавливаем R14 и R13

 

 

 

 

; (20$битные данные)

 

 

RETI

 

; Возвращаемся к 20$битному адресу в

 

 

 

 

; любом месте адресного пространства

 

 

 

 

 

4.6. Описание набора команд 173

* RLA[.W], * RLA.B

Арифметический сдвиг влево операнда

Синтаксис

RLA

 

dst

или RLA.W

dst

 

RLA.B

 

dst

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Операция

C MSB MSB–1 … LSB+1

LSB 0

 

 

 

 

 

 

 

 

 

 

 

Эмуляция

ADD

dst,dst

 

 

 

 

 

ADD.B dst,dst

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание

Содержимое операнда приёмника сдвигается влево на один бит, как показано на

 

Рис. 4.38. Старший бит содержимого помещается в бит переноса (C), а младший бит об

 

нуляется. По сути, команда RLA выполняет операцию знакового умножения на 2.

 

Если перед выполнением операции значение операнда было 04000h dst < 0C000h

 

(040h dst < 0C0h), то возникает переполнение: знак результата отличается от знака опе

 

ранда.

 

 

 

 

 

 

 

 

 

 

 

 

Слово

15

 

0

 

 

 

 

 

C

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Байт

7

 

0

 

 

 

 

 

Рис. 4.38. Операнд приёмник — арифметический сдвиг влево.

 

 

 

 

 

 

 

 

 

Биты

N: Устанавливается, если результат отрицательный, сбрасывается — если положитель

состояния

ный.

 

 

 

 

 

 

 

 

Z: Устанавливается, если результат нулевой, иначе сбрасывается.

 

C: Загружается из MSB.

 

 

 

 

 

V: Устанавливается, если произошло переполнение:

 

начальное значение 04000h dst < 0C000h; иначе сбрасывается.

 

Устанавливается, если произошло переполнение:

 

начальное значение 040h dst < 0C0h; иначе сбрасывается.

 

 

 

 

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример 1

Содержимое регистра R7 умножается на 2.

 

RLA

 

R7

 

; Сдвигаем R7 на 1 бит влево ( 2)

 

 

 

 

 

 

 

 

 

Пример 2

Младший байт регистра R7 умножается на 4.

 

RLA.B

 

R7

 

; Сдвигаем влево младший байт R7 ( 2)

 

RLA.B

 

R7

 

; Сдвигаем влево младший байт R7 ( 4)

 

 

 

 

 

 

 

 

 

 

 

 

 

Примечание. Замена команды RLA

Ассемблер не распознаёт команды:

 

RLA

@R5+, RLA.B

@R5+ или RLA(.B) @R5

 

Они должны быть заменены командами:

 

ADD

@R5+,–2(R5)

ADD.B @R5+,–1(R5) или ADD(.B) @R5,0(R5)

174 Глава 4. 16#битное RISC ЦПУ MSP430X

* RLC[.W], * RLC.B

Сдвиг операнда влево через перенос

Синтаксис

RLC

dst или RLC.W

dst

 

RLC.B

dst

 

 

 

 

Операция

C MSB MSB–1 … LSB+1

LSB C

 

 

 

 

Эмуляция

ADDC

dst,dst

 

 

ADDC.B dst,dst

 

 

 

Описание

Содержимое операнда приёмника сдвигается влево на один бит, как показано на

 

Рис. 4.39. Бит переноса (C) вдвигается в младший бит (LSB) операнда, а старший бит

 

операнда (MSB) выдвигается в бит переноса.

Слово

15

0

C

 

 

Байт

7

0

Рис. 4.39. Операнд приёмник — сдвиг влево через перенос.

Биты

N:

Устанавливается, если результат отрицательный, сбрасывается — если положитель

состояния

 

ный.

 

Z:

Устанавливается, если результат нулевой, иначе сбрасывается.

 

C:

Загружается из MSB.

V:Устанавливается, если произошло переполнение:

начальное значение 04000h dst < 0C000h; иначе сбрасывается.

Устанавливается, если произошло переполнение: начальное значение 040h dst < 0C0h; иначе сбрасывается.

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

Пример 1 Содержимое регистра R5 сдвигается на 1 бит влево.

 

RLC

R5

; (R5 2) + C $> R5

Пример 2 Значение бита порта P1IN.1 вдвигается в младший бит регистра R5.

 

BIT.B

#2,&P1IN

; Информация $> бит переноса

 

RLC

 

R5

; C=P1IN.1 $> младший бит R5

 

Пример 3 Содержимое байта ОЗУ LEO сдвигается на 1 бит влево.

 

RLC.B

LEO

; MEM(LEO) 2 + C $> MEM(LEO)

 

 

 

 

Примечание. Замена команды RLC

 

Ассемблер не распознаёт команды:

 

RLC

@R5+, RLC.B

@R5+ или

RLC(.B) @R5

 

Они должны быть заменены командами:

 

ADDC

@R5+,–2(R5),

ADDC.B

@R5+,–1(R5)

 

или ADDC(.B) @R5,0(R5)

 

 

 

 

 

 

 

 

 

 

4.6. Описание набора команд 175

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RRA[.W], RRA.B

 

 

 

 

 

 

 

 

 

 

 

 

Арифметический сдвиг операнда вправо

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Синтаксис

RRA

dst или

RRA.W

dst

 

 

 

 

RRA.B

dst

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Операция

MSB MSB, MSB MSB–1, … LSB+1 LSB, LSB 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание

Содержимое операнда приёмника сдвигается вправо на один бит, как показано на

 

Рис. 4.40. Старший бит содержимого (MSB) вдвигается в бит MSB–1 (значение MSB ос

 

таётся неизменным), а бит LSB+1 вдвигается в младший бит (LSB). По сути, команда

 

RLA выполняет операцию знакового деления на 2.

 

 

 

 

 

 

 

19

15

7

 

0

 

 

 

 

 

C

 

0 0

0 0

0

0 0 0 0 0 0 0

 

MSB

 

LSB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

19

 

15

0

C

0

0 0 0

MSB

LSB

Рис. 4.40. Арифметический сдвиг вправо: команды RRA.B и RRA.W.

Биты

N:

Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по

состояния

 

ложительный (MSB = 0).

 

Z:

Устанавливается, если результат нулевой, иначе сбрасывается.

 

C:

Загружается из LSB.

 

V:

Сбрасывается.

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1 16 битное число со знаком, находящееся в регистре R5, сдвигается вправо на один бит.

 

RRA

R5

; R5/2 $> R5

 

Пример 2 Содержимое байта EDE сдвигается вправо на один бит.

 

RRA.B

EDE

; EDE/2 $> EDE

176 Глава 4. 16#битное RISC ЦПУ MSP430X

RRC[.W], RRC.B

Сдвиг вправо через перенос операнда

Синтаксис

RRC

dst или RRC.W

dst

 

RRC.B

dst

 

 

 

Операция

C MSB MSB–1 … LSB+1 LSB C

 

 

Описание

Содержимое операнда приёмника сдвигается вправо на один бит, как показано на

 

Рис. 4.41. Бит переноса (C) вдвигается в старший бит (MSB) операнда, а младший бит

 

операнда (LSB) выдвигается в бит переноса (C).

 

19

 

 

 

15

 

 

 

 

 

 

 

7

0

C

0

0

0

0

0

0

0

0

0

0

0

0

MSB

LSB

 

19

 

 

 

15

0

C

0

0

0

0

MSB

LSB

 

Рис. 4.41. Сдвиг вправо через перенос: команды RRC.B и RRC.W.

Биты

N:

Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по

состояния

 

ложительный (MSB = 0).

 

Z:

Устанавливается, если результат нулевой, иначе сбрасывается.

 

C:

Загружается из LSB.

 

V:

Сбрасывается.

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример

Содержимое слова EDE сдвигается на 1 бит вправо. В MSB загружается 1.

 

SETC

; Инициализируем бит переноса

 

RRC

EDE ; EDE = EDE >> 1 + 8000h

4.6. Описание набора команд 177

* SBC[.W], * SBC.B Вычитание заёма из операнда

Синтаксис

SBC

dst или SBC.W

dst

 

SBC.B

dst

 

 

 

 

Операция

dst + 0FFFFh + C dst

 

 

dst + 0FFh + C dst

 

 

 

 

 

Эмуляция

SUBC

#0,dst

 

 

SUBC.B #0,dst

 

 

 

Описание

Бит переноса (C), уменьшенный на 1, прибавляется к операнду приёмнику. Предыду

 

щее содержимое операнда теряется

 

 

Биты

N: Устанавливается, если результат отрицательный, сбрасывается — если положитель

состояния

ный.

 

 

 

Z: Устанавливается, если результат нулевой, иначе сбрасывается.

 

C: Устанавливается, если произошёл перенос из MSB результата, иначе сбрасывается.

 

Устанавливается, если не было заёма, иначе сбрасывается.

 

V: Устанавливается, если произошло переполнение, иначе сбрасывается.

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

16 битный счётчик, на который указывает R13, вычитается из 32 битного счётчика,

 

на который указывает R12.

 

 

SUB

@R13,0(R12)

; Вычитаем младшие слова

 

SBC

2(R12)

; Вычитаем заём из старшего слова

 

 

Пример 2

8 битный счётчик, на который указывает R13, вычитается из 16 битного счётчика,

 

на который указывает R12.

 

 

SUB.B

@R13,0(R12)

; Вычитаем младшие байты

 

SBC.B

1(R12)

; Вычитаем заём из старшего байта

 

 

 

 

Примечание. Признак заёма

В качестве признака заёма используется инверсное значение бита переноса:

Заём Бит C Есть 0 Нет 1

178 Глава 4. 16#битное RISC ЦПУ MSP430X

* SETC

 

Установка бита переноса

 

 

 

 

 

Синтаксис

SETC

 

 

 

 

 

 

 

 

Операция

1 C

 

 

 

 

 

 

 

 

Эмуляция

BIS

#1,SR

 

 

 

 

 

Описание

Устанавливается бит переноса C

 

 

 

 

Биты

N: Не изменяется.

 

состояния

Z:

Не изменяется.

 

 

C:

Устанавливается.

 

 

V:

Не изменяется.

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

 

 

 

Пример

Эмуляция BCD вычитания:

 

 

Регистр R5 вычитается из R6 по правилам BCD арифметики. Полагаем, что

 

R5 = #03987h, а R6 = #04137h.

 

 

DSUB

ADD

#06666h,R5

; Преобразуем значения разрядов R5

 

 

 

 

 

; от 0$9 к 6$0Fh.

 

 

 

 

 

; R5 = 03987h + 06666h = 09FEDh

 

 

 

INV

R5

; Инвертируем промежуточный результат

 

 

 

 

 

; R5 = .NOT. R5 = 06012h

 

 

 

SETC

 

; Инициализируем бит переноса

 

 

 

DADD

R5,R6

; Эмулируем вычитание сложением:

 

 

 

 

 

; (010000h – R5 – 1)

 

 

 

 

 

; R6 = R6 + R5 + 1

 

 

 

 

 

; R6 = 0150h

 

 

 

 

 

 

* SETN

 

Установка бита отрицательного значения

 

 

Синтаксис

SETN

 

 

Операция

1 N

 

 

Эмуляция

BIS #4,SR

 

 

Описание

Устанавливается бит отрицательного значения N

 

 

Биты

N: Устанавливается.

состояния

Z:

Не изменяется.

 

C:

Не изменяется.

 

V:

Не изменяется.

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

4.6. Описание набора команд 179

* SETZ

 

Установка бита нуля

 

 

 

 

Синтаксис

SETZ

 

 

 

 

 

 

Операция

1 Z

 

 

 

 

 

 

Эмуляция

BIS

#2,SR

 

 

 

Описание

Устанавливается бит нуля Z

 

 

 

Биты

N: Не изменяется.

 

состояния

Z:

 

Устанавливается.

 

 

C:

 

Не изменяется.

 

 

V:

 

Не изменяется.

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

 

 

 

SUB[.W], SUB.B

 

Вычитание двух операндов

 

 

 

 

 

Синтаксис

SUB

src,dst или

SUB.W src,dst

 

SUB.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

16 битная константа 7654h вычитается из слова EDE.

 

SUB

#7654h,&EDE

; EDE = EDE – 7654h

 

 

Пример 2

Элемент таблицы, адресуемый регистром R5 (20 битный адрес), вычитается из регистра

 

R7. Если результат равен нулю, то выполняется переход к метке TONI. Содержимое ре

 

гистра R5 увеличивается на 2. Биты R7.19:16 = 0.

 

SUB

@R5+,R7

; Вычитаем элемент таблицы из R7, R5 + 2

 

JZ

 

 

TONI

; R7 = @R5 перед вычитанием

 

...

 

; R7 <> @R5 перед вычитанием

 

 

Пример 3

Байт CNT вычитается из байта, на который указывает R12. Адрес CNT лежит в пределах

 

PC ±32 КБ. Регистр R12 может указывать на любую ячейку адресного пространства.

 

SUB.B

CNT,0(R12)

; Вычитаем CNT из @R12

 

 

 

 

 

 

180 Глава 4. 16#битное RISC ЦПУ MSP430X

SUBС[.W], SUBС.B

Вычитание двух операндов с учётом заёма

Синтаксис

SUBC

src,dst или

SUBC.W

src,dst

 

SUBC.B

src,dst

 

 

 

 

 

 

Операция

(.not.src) + C + dst dst

 

 

 

или

 

 

 

 

dst – (src – 1) + C dst

 

 

 

 

Описание

Операнд источник вычитается из операнда приёмника путём прибавления к последне

 

му обратного кода операнда источника и значения бита переноса. Содержимое операн

 

да источника не изменяется. Результат сохраняется в операнде приёмнике. Команда

 

используется для обработки 32 , 48 и 64 битных значений

 

 

Биты

N: Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по

состояния

ложительный (MSB = 0).

 

 

Z: Устанавливается, если результат нулевой, иначе сбрасывается.

 

C: Устанавливается, если произошёл перенос из MSB результата, иначе сбрасывается.

 

Устанавливается, если не было заёма, иначе сбрасывается.

 

V: Устанавливается, если результат вычитания отрицательного операнда из положи

 

тельного отрицателен или если результат вычитания положительного операнда из

 

отрицательного положителен; иначе сбрасывается (нет переполнения).

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

 

Пример 1

16 битная константа 7654h вычитается из регистра R5 с учётом переноса от предыдущей

 

команды. Биты R5.19:16 = 0.

 

 

SUBC.W

#7654h,R5

; R5 = R5

$ 7654h $ C

 

 

Пример 2

48 битное число (3 слова), адресуемое регистром R5 (20 битный адрес), вычитается из

 

48 битного счётчика, адресуемого регистром R7. После завершения операции R5 указы

 

вает на следующее 48 битное число. Регистр R7 может адресовать любую ячейку в пре

 

делах адресного пространства.

 

 

SUB

@R5+,0(R7) ; Вычитаем младшие слова. R5 + 2

 

SUBC

@R5+,2(R7) ; Вычитаем средние слова с учётом C. R5 + 2

 

SUBC

@R5+,4(R7) ; Вычитаем старшие слова с учётом C. R5 + 2

 

 

Пример 3

Байт CNT вычитается из байта, на который указывает R12, с учётом переноса от преды

 

дущей операции. Адрес CNT лежит в нижней 64 КБ области памяти.

 

SUBC.B

&CNT,0(R12)

; Вычитаем CNT из @R12