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

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

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

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

* DADC[.W], * DADC.B

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

Синтаксис

DADC

dst или

DADC.W dst

 

DADC.B

dst

 

 

 

Операция

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

 

 

 

 

Эмуляция

DADD

#0,dst

 

 

DADD.B #0,dst

 

 

 

Описание

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

 

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

 

 

 

Биты

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

состояния

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

 

C: Устанавливается, если dst изменился с 9999h до 0000, иначе сбрасывается.

 

Устанавливается, если dst изменился с 99h до 00, иначе сбрасывается.

 

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

 

 

 

Биты

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

режима

 

 

 

 

 

Пример 1

4 разрядное двоично десятичное число, находящееся в R5, прибавляется к 8 разрядно

 

му числу, на которое указывает R8.

 

CLRC

 

; Сбрасываем бит переноса, задавая начальные

 

 

 

; условия для следующей команды

 

DADD

R5,0(R8)

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

 

DADC

2(R8)

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

 

 

Пример 2

2 разрядное двоично десятичное число, находящееся в R5, прибавляется к 4 разрядно

 

му числу, на которое указывает R8.

 

CLRC

 

; Сбрасываем бит переноса, задавая начальные

 

 

 

; условия для следующей команды

 

DADD.B

R5,0(R8) ; Складываем младшие разряды + C

 

DADC.B

1(R8)

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

 

 

 

 

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

DADD[.W], DADD.B

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

Синтаксис

DADD

src,dst

или

DADD.W

src,dst

 

DADD.B

src,dst

 

 

 

 

 

 

Операция

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

 

 

 

Описание

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

 

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

 

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

 

операции не определён

 

 

 

 

Биты

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

состояния

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

 

 

 

 

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

 

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

 

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

 

 

 

 

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

 

 

 

 

 

Биты

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

режима

 

 

 

 

 

 

 

 

Пример 1

Двоично десятичное число

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

 

DADD

#10h,&DECCNTR

; Прибавляем 10 к 4$разрядному BCD$счётчику

 

 

Пример 2

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

 

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

 

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

 

 

 

CLRC

 

 

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

 

DADD.W

&BCD,R4

 

; Складываем младшие разряды. R4.19:16 = 0

 

DADD.W

&BCD+2,R5

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

 

 

 

 

; переноса. R5.19:16 = 0

 

JC

OVERFLOW

 

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

 

 

 

 

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

 

...

 

 

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

 

 

Пример 3

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

 

разрядному числу, находящемуся в R4.

 

 

CLRC

 

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

 

DADD.B

&BCD,R4

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

 

 

 

 

 

 

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

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

Синтаксис

DEC

dst или DEC.W

dst

 

DEC.B

dst

 

 

 

 

Операция

dst – 1 dst

 

 

 

 

 

Эмуляция

SUB

#1,dst

 

 

SUB.B

#1,dst

 

 

 

Описание

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

 

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

 

 

 

Биты

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

состояния

ный.

 

 

 

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

 

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

V:Устанавливается, если произошло переполнение, иначе сбрасывается. Устанавливается, если исходное значение dst было 08000h, иначе сбрасывается. Устанавливается, если исходное значение dst было 080h, иначе сбрасывается.

Биты

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

режима

 

 

 

 

 

 

Пример

Содержимое регистра R10 уменьшается на 1.

 

 

DEC

R10

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

 

; Копируем 255$байтный блок с начальным адресом EDE в ОЗУ,

 

; начиная

с адреса TONI. Исходный и конечный блоки не должны

 

; перекрываться: адрес TONI должен находиться вне ; диапазона

 

; EDE...EDE + 0FEh

 

;

 

 

 

 

 

MOV

 

#EDE,R6

 

 

MOV

 

#255,R10

 

L$1

MOV.B

@R6+,TONI$EDE$1(R6)

 

 

DEC

 

R10

 

 

JNZ

 

L$1

Не используйте данную процедуру для копирования перекрывающихся блоков (Рис. 4.36).

EDE

TONI

EDE+254

TONI+254

Рис. 4.36. Перекрытие блоков.

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

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

Синтаксис

DECD

dst

или

DECD.W

dst

 

DECD.B

dst

 

 

 

 

 

 

 

 

Операция

dst – 2 dst

 

 

 

 

 

 

 

 

Эмуляция

SUB

#2,dst

 

 

 

SUB.B

#2,dst

 

 

 

 

Описание

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

 

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

 

 

 

 

Биты

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

состояния

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

 

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

 

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

 

Устанавливается, если начальное значение dst было 08001h или 08000h, иначе сбра

 

сывается.

 

 

 

 

Устанавливается, если начальное значение dst было 081h или 080h, иначе сбрасывается.

 

 

Биты

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

режима

 

 

 

 

 

 

 

Пример 1

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

 

DECD

R10

; R10 = R10 $ 2

 

; Копируем блок из 255 слов с начальным адресом EDE

 

; в другое место, начиная с адреса TONI.

 

; Исходный и конечный блоки не должны перекрываться:

 

: адрес TONI должен находиться вне диапазона EDE...EDE + 01FСh

 

;

 

 

 

 

 

 

MOV

#EDE,R6

 

 

 

MOV

#510,R10

 

 

L$1

MOV

@R6+,TONI$EDE$2(R6)

 

 

DECD

R10

 

 

 

JNZ

L$1

 

 

 

Пример 2

Содержимое ячейки памяти с адресом LEO уменьшается на 2.

 

DECD.B

LEO

 

; Декрементируем MEM(LEO)

 

Cодержимое байта STATUS уменьшается на 2.

 

DECD.B

STATUS

 

 

 

 

 

 

 

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

* DINT

Общее запрещение прерываний

Синтаксис

DINT

 

 

 

 

 

Операция

0 GIE

 

 

или

 

 

 

(0FFF7h .AND. SR SR / .NOT.src .AND. dst dst)

 

 

 

 

Эмуляция

BIC

#8,SR

 

 

 

Описание

Запрещаются все прерывания.

 

Константа 08h инвертируется и логически умножается (AND) с содержимым регистра

 

состояния SR. Результат сохраняется в регистре состояния

 

 

Биты

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

состояния

 

 

 

 

 

Биты

GIE сбрасывается, OSCOFF и CPUOFF не изменяются

режима

 

 

 

 

 

Пример

Бит общего разрешения прерываний регистра SR сбрасывается для осуществления ато

 

марного копирования 32 битного счётчика. Это гарантирует, что состояние счётчика не

 

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

 

DINT

 

; Запрещаем генерацию прерываний

 

NOP

 

 

 

MOV

COUNTHI,R5

; Копируем счётчик

 

MOV

COUNTLO,R6

 

 

EINT

 

; Разрешаем прерывания

 

 

 

 

Примечание. Запрещение прерываний

При необходимости исключить прерывание какой либо секции кода, между ко мандой DINT и началом этой секции должна располагаться как минимум одна ко манда. Обычно для этой цели после команды DINT ставят команду NOP.

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

* EINT

Общее разрешение прерываний

Синтаксис

EINT

 

 

 

 

 

 

 

 

Операция

1 GIE

 

 

 

 

или

 

 

 

 

(0008h .OR. SR SR / src .OR. dst dst)

 

 

 

 

 

Эмуляция

BIS

#8,SR

 

 

 

 

 

Описание

Разрешаются все прерывания.

 

 

Константа 08h логически складывается (OR) с содержимым регистра состояния SR.

 

Результат сохраняется в регистре SR

 

 

 

 

Биты

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

 

состояния

 

 

 

 

 

 

Биты

GIE устанавливается, OSCOFF и CPUOFF не изменяются

режима

 

 

 

 

 

 

Пример

Бит общего разрешения прерываний (GIE) регистра состояния устанавливается.

 

; Обработчик прерываний от линий порта ввода/вывода P1.2...P1.7

 

; P1IN – адрес регистра, из которого читается состояние битов порта.

 

; P1IFG – адрес регистра, в котором хранятся флаги прерываний по линиям порта.

 

 

PUSH.B

&P1IN

; Сбрасываем только взведённые флаги

 

 

BIC.B

@SP,&P1IFG

; Маску для флагов прерываний

 

 

 

 

; сохраняем в стеке

 

 

EINT

 

; Разрешаем прочие прерывания

 

 

BIT

#Mask,@SP

 

 

 

JEQ

MaskOK

; Установленные флаги совпадают

 

 

 

 

; с маской $ переходим

 

 

......

 

 

 

MaskOK

BIC

#Mask,@SP

 

 

 

......

 

 

 

 

INCD

SP

; Служебная операция, обратная

 

 

 

 

; команде PUSH, расположенной в

 

 

 

 

; начале обработчика. Корректирует

 

 

 

 

; значение указателя стека

 

 

RETI

 

 

 

 

 

 

 

Примечание. Разрешение прерываний

Команда, следующая за командой разрешения прерываний (EINT), всегда выпол няется, даже если на момент разрешения прерываний имеются отложенные за просы прерываний.

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

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

Синтаксис

INC

dst или INC.W

dst

 

INC.B

dst

 

 

 

 

Операция

dst + 1 dst

 

 

 

 

 

Эмуляция

ADD

#1,dst

 

 

ADD.B

#1,dst

 

 

 

Описание

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

 

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

 

 

 

Биты

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

состояния

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

 

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

 

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

 

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

 

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

 

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

 

 

Биты

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

режима

 

 

 

 

 

Пример

Байт состояния процесса STATUS инкрементируется. Когда он становится равным 11,

 

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

 

INC.B

STATUS

 

 

CMP.B

#11,STATUS

 

 

JEQ

OVFL

 

 

 

 

 

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

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

Синтаксис

INCD

dst

или

INCD.W

dst

 

INCD.B

dst

 

 

 

 

 

 

 

 

Операция

dst + 2 dst

 

 

 

 

 

 

 

 

Эмуляция

ADD

#2,dst

 

 

 

ADD.B

#2,dst

 

 

 

 

Описание

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

 

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

 

 

 

 

Биты

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

состояния

ный.

 

 

 

 

 

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

 

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

 

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

 

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

 

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

 

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

 

 

Биты

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

режима

 

 

 

 

 

 

 

Пример 1

Удаление значения с вершины стека без использования регистров.

 

......

 

 

 

 

 

PUSH

R5

; В R5 результат вычислений, сохранённый в

 

 

 

; системном стеке

 

INCD

SP

; Удаляем значение с вершины стека, модифицируя

 

 

 

; указатель стека

 

 

 

; Не используйте INCD.B, так как содержимое SP

 

 

 

; всегда выровнено по границе слова

 

RET

 

 

 

 

 

 

Пример 2

Байт, расположенный на вершине стека, увеличиваем на 2.

 

INCD.B

0(SP)

; Увеличиваем на 2 верхний байт в стеке

 

 

 

 

 

 

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

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

Синтаксис

INV

dst или INV.W

dst

 

 

INV.B

dst

 

 

 

 

 

 

 

 

Операция

.NOT.dst dst

 

 

 

 

 

 

 

 

 

Эмуляция

XOR

#0FFFFh,dst

 

 

 

 

XOR.B

#0FFh,dst

 

 

 

 

 

Описание

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

 

 

Биты

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

состояния

ный.

 

 

 

 

 

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

 

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

 

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

 

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

 

 

 

Биты

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

 

режима

 

 

 

 

 

 

 

Пример 1

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

 

MOV

#00AEh,R5

;

 

R5 = 000AEh

 

INV

R5

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

R5 = 0FF51h

 

INC

R5

; В R5 – доп. код

R5 = 0FF52h

 

 

 

Пример 2

Вычисляется дополнительный код байта LEO в ОЗУ.

 

 

MOV.B

#00AEh,LEO

;

 

MEM(LEO) = 0AEh

 

INV.B

LEO

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

MEM(LEO) = 051h

 

INC.B

LEO

; В LEO – доп. код

MEM(LEO) = 052h

 

 

 

 

 

 

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

* JC

Переход[.W], если бит переноса установлен

* JHS

Переход, если «выше или равно» (беззнаковое сравнение)

 

 

 

 

Синтаксис

JC

label

 

 

JHS

label

 

 

 

Операция

Если C = 1, то PC + (2 смещение) PC.

 

Если C = 0, то выполняется следующая команда.

 

 

Описание

Проверяется бит переноса (C) регистра состояния. Если он установлен, то смещение

 

(10 битное число со знаком), содержащееся в слове команды, умножается на 2, расши

 

ряется до 20 битного значения и прибавляется к счётчику команд. Это позволяет осу

 

ществлять переход в диапазоне от –511 до +512 слов относительно текущего значения

 

счётчика команд в пределах всего адресного пространства. Если бит C сброшен, то вы

 

полняется команда, следующая за командой перехода.

 

Команда JC используется для проверки бита переноса C.

 

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

 

 

Биты

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

состояния

 

 

 

 

 

Биты

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

режима

 

 

 

 

 

Пример 1

Сигнал P1IN.1 используется для управления ходом выполнения программы.

 

BIT.B

#02h,&P1IN

; Состояние бита порта $> бит переноса C

 

JC

Label1

; Если C = 1, переходим к Label1

 

...

 

; C = 0, продолжаем выполнение

 

 

Пример 2

Если R5 R6 (беззнаковое содержимое), то выполнение программы продолжается

 

с метки Label2.

 

 

CMP

R6,R5

; R5 >= R6? Признак – бит C

 

JHS

Label2

; Да, C = 1

 

...

 

; Нет, R5 < R6. Продолжаем