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

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

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

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

BITX.A, BITX[.W], BITX.B Проверка битов операнда

Синтаксис

BITX.A

src,dst

 

 

 

BITX

src,dst или

BITX.W

src,dst

 

BITX.B

src,dst

 

 

 

 

 

 

Операция

src .and. dst

 

 

 

 

Описание

Выполняется операция «Логическое И» между операндом источником и операндом

 

приёмником. Результат операции влияет только на биты состояния регистра SR. Оба

 

операнда могут находиться в любом месте адресного пространства

 

 

Биты

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

состояния

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

 

 

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

 

C: Устанавливается, если результат ненулевой, иначе сбрасывается. С = (.not. Z)

 

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

 

 

 

 

Биты

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

режима

 

 

 

 

 

 

Пример 1

Если установлен бит 16 или 15 регистра R5 (20 битное значение) или оба этих бита, то

 

выполняется переход к метке TONI.

 

 

BITX.A

#018000h,R5

; Проверяем биты R5.16:15

 

JNZ

TONI

; Хотя бы один бит установлен

 

...

 

; Оба бита сброшены

 

 

Пример 2

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

 

верки битов регистра R7. Если установлен хотя бы один бит, то выполняется переход к

 

метке TONI.

 

 

 

BITX.W

@R5,R7

; Проверяем биты R7

 

JC

TONI

; Хотя бы один бит установлен

 

...

 

; Все биты сброшены

 

 

Пример 3

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

 

верки битов порта Port1. Если все биты сброшены, то выполняется переход к метке

 

TONI. Затем указатель устанавливается на следующий байт таблицы.

 

BITX.B

@R5+,&P1OUT

; Проверяем биты порта 1, R5 = R5 + 1

 

JNC

TONI

; Все требуемые биты сброшены

 

...

 

; Хотя бы один бит установлен

 

 

 

 

 

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

* CLRX.A, * CLRX[.W], * CLRX.B Очистка операнда

Синтаксис

CLRX.A

dst

 

 

 

CLRX

dst или

CLRX.W

dst

 

CLRX.B

dst

 

 

 

 

 

 

 

Операция

0 dst

 

 

 

 

 

 

 

 

Эмуляция

MOVX.A

#0,dst

 

 

 

MOVX

#0,dst

 

 

 

MOVX.B

#0,dst

 

 

 

 

 

Описание

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

 

 

 

 

Биты

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

 

состояния

 

 

 

 

 

 

Пример

Обнуляется 20 битное слово TONI в ОЗУ.

 

CLRX.A

TONI

; 0 $> TONI

 

 

 

 

 

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

CMPX.A, CMPX[.W], CMPX.B Сравнение двух операндов

Синтаксис

CMPX.A

src,dst

 

 

 

CMPX

src,dst или

CMPX.W

src,dst

 

CMPX.B

src,dst

 

 

 

 

 

Операция

.not.src + 1 + dst или (dst – src)

 

 

 

Описание

Операнд источник вычитается из операнда приёмника. Для выполнения этой операции

 

обратный код операнда источника плюс 1 складывается с операндом приёмником.

 

Операция влияет только на биты состояния регистра SR

 

 

Биты

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

состояния

ложительный (src dst).

 

 

 

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

 

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

 

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

 

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

 

жительного операнда источника из отрицательного операнда приёмника положи

 

телен, иначе сбрасывается.

 

 

 

Биты

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

режима

 

 

 

 

 

 

Пример 1

Слово EDE сравнивается с 20 битной константой 18000h. В случае равенства выполня

 

ется переход к метке TONI.

 

 

 

CMP

#18000h,EDE

; Сравниваем EDE с 18000h

 

JEQ

TONI

; EDE = 18000h

 

...

 

 

 

 

 

Пример 2

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

 

жимым регистра R7. Если число в R7 меньше табличного значения (сравниваются 16

 

битные числа со знаком), то выполняется переход к метке TONI.

 

CMPX.W

@R5,R7

; Сравниваем два числа со знаком

 

JL

TONI

; R7 < @R5

 

...

 

; R7 >= @R5

 

 

Пример 3

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

 

значением порта Port1. Если значения равны, то выполняется переход к метке TONI. За

 

тем указатель устанавливается на следующий байт таблицы.

 

CMPX.B

@R5+,&P1IN

; Сравниваем биты порта с таблицей,

 

 

 

; R5 = R5 + 1

 

JEQ

TONI

; Значения одинаковы

 

...

 

; Значения разные

 

 

 

 

 

Замечание. Для увеличения плотности кода и скорости выполнения программы используйте коман ду CMPA в следующих случаях:

CMPA Rsrc,Rdst или CMPA #imm20,Rdst

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

* DADCX.A, * DADCX[.W], * DADCX.B

Сложение переноса с операндом (BCDCарифметика)

Синтаксис

DADCX.B

dst

 

 

 

DADCX

dst или DADCX.W

dst

 

DADCX.B

dst

 

 

 

 

 

Операция

dst + C dst (BCD арифметика)

 

 

 

 

 

Эмуляция

DADDX.A #0,dst

 

 

 

DADDX

#0,dst

 

 

 

DADDX.B #0,dst

 

 

 

 

Описание

Бит переноса (C) прибавляется к операнду приёмнику по правилам двоично десяти

 

чной арифметики

 

 

 

 

Биты

N: Устанавливается, если MSB результата равен 1 (20 битное значение > 79999h,

состояния

16 битное значение > 7999h, 8 битное значение > 79h), иначе сбрасывается.

 

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

 

C: Устанавливается, если результат слишком велик (20 битное значение > 99999h,

 

16 битное значение > 9999h, 8 битное значение > 99h), иначе сбрасывается.

 

V: Не определён.

 

 

 

 

Биты

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

режима

 

 

 

 

 

 

Пример

40 битный BCD счётчик, находящийся в регистрах R12 и R13, инкрементируется.

 

DADDX.A

#1,0(R12)

; Инкрементируем младшие разряды

 

DADCX.A

0(R13)

; Прибавляем перенос к старшим разрядам

 

 

 

 

 

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

DADDX.A, DADDX[.W], DADDX.B

Сложение двух операндов с учётом переноса (BCDCарифметика)

Синтаксис

DADDX.A

src,dst

 

 

 

DADDX

src,dst

или DADD.W

src,dst

 

DADDX.B

src,dst

 

 

 

 

 

Операция

src + dst + C dst (BCD арифметика)

 

 

 

Описание

Операнды интерпретируются как 2 , 4 и 5 разрядные (суффиксы .B, .W и .A соответ

 

ственно) положительные BCD числа. Операнд источник и бит переноса (C) прибавля

 

ются к операнду приёмнику по правилам двоично десятичной арифметики. Содержи

 

мое операнда источника не изменяется. Предыдущее содержимое операнда приёмника

 

теряется. Для не BCD чисел результат операции не определён. Оба операнда могут нахо

 

диться в любом месте адресного пространства

 

 

Биты

N: Устанавливается, если MSB результата равен 1 (20 битное значение > 79999h,

состояния

16 битное значение > 7999h, 8 битное значение > 79h), иначе сбрасывается.

 

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

 

C: Устанавливается, если результат слишком велик (20 битное значение > 99999h,

 

16 битное значение > 9999h, 8 битное значение > 99h), иначе сбрасывается.

 

V: Не определён.

 

 

 

 

Биты

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

режима

 

 

 

 

 

 

Пример 1

Двоично десятичное число 10 прибавляется к 20 битному BCD счётчику DECCNTR.

 

DADDX.A

#10h,&DECCNTR ; Прибавляем 10 к 5$разрядному

 

 

 

; BCD$счётчику

 

 

Пример 2

8 разрядное двоично десятичное число, расположенное в ОЗУ по адресам BCD и

 

BCD+2, прибавляется к 8 разрядному числу, находящемуся в R4 и R5 (старшие

 

разряды — BCD+2 и R5).

 

 

CLRC

 

; Сбрасываем бит переноса

 

DADDX.W

BCD,R4

; Складываем младшие разряды

 

DADDX.W

BCD+2,R5

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

 

JC

OVERFLOW

; Результат > 9999’9999, переходим

 

 

 

; к обработчику ошибок

 

...

 

; Результат нормальный

 

 

Пример 3

2 разрядное двоично десятичное число, расположенное в слове BCD (20 битный ад

 

рес), прибавляется к 2 разрядному числу, находящемуся в R4.

 

CLRC

 

; Сбрасываем бит переноса

 

DADDX.B

BCD,R4

; Складываем BCD и R4. R4: 000ddh

 

 

 

 

 

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

* DECX.A, * DECX[.W], * DECX.B Декрементирование операнда

Синтаксис

DECX.A

dst

 

 

 

DECX

dst или

DECX.W

dst

 

DECX.B

dst

 

 

 

 

 

 

Операция

dst – 1 dst

 

 

 

 

 

 

 

Эмуляция

SUBX.A

#1,dst

 

 

 

SUBX

#1,dst

 

 

 

SUBX.B

#1,dst

 

 

 

 

Описание

Значение операнда приёмника уменьшается на 1. Предыдущее содержимое операнда

 

приёмника теряется

 

 

 

 

Биты

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

состояния

ный.

 

 

 

 

Z: Устанавливается, если dst содержал 1, иначе сбрасывается.

 

C: Сбрасывается, если dst содержал 0, иначе устанавливается.

 

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

 

 

Биты

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

режима

 

 

 

 

 

 

Пример

20 битное значение TONI уменьшается на 1.

 

DECX.A

TONI

; Декрементируем TONI

 

 

 

 

 

* DECDX.A, * DECDX[.W], * DECDX.B Уменьшение операнда на 2

Синтаксис

DECDX.A

dst

 

 

 

DECDX

dst или

DECDX.W

dst

 

DECDX.B

dst

 

 

 

 

 

 

Операция

dst – 2 dst

 

 

 

 

 

 

 

Эмуляция

SUBX.A

#2,dst

 

 

 

SUBX

#2,dst

 

 

 

SUBX.B

#2,dst

 

 

 

 

Описание

Значение операнда приёмника уменьшается на 2. Предыдущее содержимое операнда

 

приёмника теряется

 

 

 

 

Биты

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

состояния

ный.

 

 

 

 

Z: Устанавливается, если dst содержал 2, иначе сбрасывается.

 

C: Сбрасывается, если dst содержал 0 или 1, иначе устанавливается.

 

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

 

 

Биты

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

режима

 

 

 

 

 

 

Пример

20 битное значение TONI уменьшается на 2.

 

DECDX.A

TONI

; Уменьшаем TONI на 2

 

 

 

 

 

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

* INCX.A, * INCX[.W], * INCX.B Инкрементирование операнда

Синтаксис

INCX.A

dst

 

 

INCX

dst или

INCX.W dst

 

INCX.B

dst

 

 

 

 

Операция

dst + 1 dst

 

 

 

 

 

Эмуляция

ADDX.A

#1,dst

 

 

ADDX

#1,dst

 

 

ADDX.B

#1,dst

 

 

 

Описание

Значение операнда приёмника увеличивается на 1. Предыдущее содержимое операнда

 

приёмника теряется

 

 

 

Биты

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

состояния

 

ный.

 

 

 

Z:

Устанавливается, если dst содержал 0FFFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FFh, иначе сбрасывается.

 

C:

Устанавливается, если dst содержал 0FFFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FFh, иначе сбрасывается.

 

V:

Устанавливается, если dst содержал 07FFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 07FFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 07Fh, иначе сбрасывается.

 

 

Биты

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

режима

 

 

 

 

 

 

Пример

20 битное значение TONI увеличивается на 1.

 

INCX.A

TONI

; Инкрементируем TONI

 

 

 

 

 

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

* INCDX.A, * INCDX[.W], * INCDX.B Увеличение операнда на 2

Синтаксис

INCDX.A

dst

 

 

 

INCDX

dst или

INCDX.W

dst

 

INCDX.B

dst

 

 

 

 

 

 

Операция

dst + 2 dst

 

 

 

 

 

 

 

Эмуляция

ADDX.A

#2,dst

 

 

 

ADDX

#2,dst

 

 

 

ADDX.B

#2,dst

 

 

 

 

Описание

Значение операнда приёмника увеличивается на 2. Предыдущее содержимое операнда

 

приёмника теряется.

 

 

 

 

Биты

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

состояния

 

ный.

 

 

 

 

Z:

Устанавливается, если dst содержал 0FFFFEh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FFFEh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FEh, иначе сбрасывается.

 

C: Устанавливается, если dst содержал 0FFFFEh или 0FFFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FFFEh или 0FFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 0FEh или 0FFh, иначе сбрасывается.

 

V:

Устанавливается, если dst содержал 07FFFEh или 07FFFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 07FFEh или 07FFFh, иначе сбрасывается.

 

 

Устанавливается, если dst содержал 07FEh или 07Fh, иначе сбрасывается.

 

 

Биты

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

режима

 

 

 

 

 

 

 

Пример

Байт LEO в ОЗУ увеличивается на 2. Счётчик команд указывает на верхнюю область

 

памяти.

 

 

 

 

INCDX.B

LEO

; Увеличиваем LEO на 2

 

 

 

 

 

 

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

* INVX.A, * INVX[.W], * INVX.B Инвертирование операнда

Синтаксис

INVX.A

dst

 

 

INVX

dst или

INVX.W dst

 

INVX.B

dst

 

 

 

 

Операция

.NOT.dst dst

 

 

 

 

Эмуляция

XORX.A

#0FFFFFh,dst

 

XORX

#0FFFFh,dst

 

XORX.B

#0FFh,dst

 

 

Описание

Значение операнда приёмника инвертируется. Предыдущее содержимое теряется

 

 

Биты

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

состояния

ный.

 

 

 

Z: Устанавливается, если dst содержал 0FFFFFh, иначе сбрасывается.

 

Устанавливается, если dst содержал 0FFFFh, иначе сбрасывается.

 

Устанавливается, если dst содержал 0FFh, иначе сбрасывается.

 

C: Устанавливается, если результат не равен нулю, иначе сбрасывается (C = .NOT. Z).

 

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

 

 

Биты

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

режима

 

 

 

 

 

Пример 1

Вычисляется дополнительный код 20 битного содержимого регистра R5.

 

INVX.A

R5

; Инвертируем R5

 

INCX.A

R5

; В R5 – дополнительный код

 

 

Пример 2

Вычисляется дополнительный код байта LEO в ОЗУ. Счётчик команд указывает на верх

 

нюю область памяти.

 

 

INVX.B

LEO

; Инвертируем LEO

 

INCX.B

LEO

; В LEO – дополнительный код

 

 

 

 

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

MOVX.A, MOVX[.W], MOVX.B Пересылка операнда

Синтаксис

MOVX.A

src,dst

 

 

 

MOVX

src,dst или MOVX.W

src,dst

 

MOVX.B

src,dst

 

 

 

 

 

 

 

Операция

src dst

 

 

 

 

 

Описание

Операнд источник пересылается в операнд приёмник. Содержимое операнда источни

 

ка не изменяется

 

 

 

 

 

 

 

Биты

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

 

 

состояния

 

 

 

 

 

 

 

 

Биты

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

 

режима

 

 

 

 

 

 

 

Пример 1

20 битная константа 18000h загружается в слово EDE.

 

MOVX.A #018000h,&EDE

 

; 18000h $> EDE

 

 

Пример 2

Содержимое таблицы EDE (2 байтные элементы, 20 битная адресация) копируется

 

в таблицу TOM. Размер таблиц — 030h слов.

 

 

 

MOVA

#EDE,R10

 

; Инициализируем указатель

 

Loop

MOVX.W

@R10+,TOM$EDE$2(R10)

; Используем указатель в R10

 

 

 

 

 

; для обеих таблиц. R10 + 2

 

 

CMPA

#EDE+60h,R10

 

; Достигли конца таблицы?

 

 

JLO

Loop

 

; Ещё нет

 

 

...

 

 

; Копирование завершено

 

 

Пример 3

Содержимое таблицы EDE (1 байтные элементы, 20 битная адресация) копируется

 

в таблицу TOM. Размер таблиц — 020h байтов.

 

 

 

MOVA

#EDE,R10

 

; Инициализируем указатель

 

 

MOV

#020h,R9

 

; Инициализируем счетчик

 

Loop

MOVX.B

@R10+,TOM$EDE$1(R10)

; Используем указатель в R10

 

 

 

 

 

; для обеих таблиц. R10 + 1

 

 

DEC

R9

 

; Декрементируем счетчик

 

 

JNZ

Loop

 

; Счётчик 0, продолжаем

 

 

 

 

 

; копирование

 

 

...

 

 

; Копирование завершено

 

 

 

 

 

 

Из 28 возможных сочетаний режимов адресации операндов в десяти случаях вместо команды MOVX.A можно использовать команду MOVA. При этом экономит ся два слова памяти и несколько тактов. Речь идёт о сочетаниях:

MOVX.A Rsrc,Rdst

MOVA Rsrc,Rdst

; Регистровый/Регистровый

MOVX.A #imm20,Rdst

MOVA #imm20,Rdst

; Непосредственный/Регистровый

MOVX.A &abs20,Rdst

MOVA &abs20,Rdst

; Абсолютный/Регистровый

MOVX.A @Rsrc,Rdst

MOVA @Rsrc,Rdst

; Косвенный/Регистровый

MOVX.A @Rsrc+,Rdst

MOVA @Rsrc+,Rdst

; Косвенный с автоинкр./Регистровый

MOVX.A Rsrc,&abs20

MOVA Rsrc,&abs20

; Регистровый/Абсолютный

Следующие четыре замены применимы только в том случае, если для адреса ции операндов можно использовать 16 битные смещения.

MOVX.A z20(Rsrc),Rdst

MOVA z16(Rsrc),Rdst

; Индексный/Регистровый

MOVX.A Rsrc,z20(Rdst)

MOVA Rsrc,z16(Rdst)

; Регистровый/Индексный

MOVX.A

symb20,Rdst

MOVA

symb16,Rdst

;

Относительный/Регистровый

MOVX.A

Rsrc,symb20

MOVA

Rsrc,symb16

;

Регистровый/Относительный