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

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

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

3.4. Система команд 61

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, иначе сбрасывается

состояния

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

 

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

 

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

 

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

 

 

 

 

Биты

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

режима

 

 

 

 

 

 

Пример 1

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

 

рядному числу, находящемуся в R3 и R4 (старшие разряды — в R6 и R4).

 

CLRC

 

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

 

DADD

R5,R3

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

 

DADD

R6,R4

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

 

JC

OVERFLOW

; При переполнении переходим

 

 

 

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

 

 

Пример 2

2 разрядный двоично десятичный счётчик, расположенный в байте CNT, инкременти

 

руется на 1.

 

 

 

CLRC

 

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

 

DADD.B

#1,CNT

; Инкрементируем BCD$счётчик

 

или

 

 

 

 

SETC

 

 

 

 

DADD.B

#0,CNT

; DADC.B

CNT

 

 

 

 

 

62 Глава 3. 16#битное RISC ЦПУ MSP430

* 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

;Не используйте данную процедуру для копирования

;перекрывающихся блоков (Рис. 3.12)

EDE

TONI

EDE+254

TONI+254

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

3.4. Система команд 63

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

 

 

DEC

R10

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

 

; Копируем блок из 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

 

 

 

 

 

 

64 Глава 3. 16#битное RISC ЦПУ MSP430

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

3.4. Система команд 65

* 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), выполняется всегда, даже если на момент разрешения прерываний имеются отложенные запро сы прерываний.

66 Глава 3. 16#битное RISC ЦПУ MSP430

* 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

 

 

 

 

 

3.4. Система команд 67

* 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 не изменяются

режима

 

 

 

 

 

Пример

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

 

......

 

 

 

PUSH

R5

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

 

 

 

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

 

INCD

SP

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

 

 

 

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

 

 

 

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

 

 

 

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

 

RET

 

 

 

 

 

 

68 Глава 3. 16#битное RISC ЦПУ MSP430

* 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

 

 

 

 

 

 

* JC

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

* JHS

Переход[.W], если «выше или равно»

 

 

 

 

Синтаксис

JC

label

 

 

JHS

label

 

 

 

Операция

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

 

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

 

 

Описание

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

 

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

 

ся к счётчику команд. Если бит C сброшен, то выполняется команда, следующая за ко

 

мандой перехода. Команда JC (переход по «перенос»/«выше или равно») используется

 

при сравнении чисел без знака (от 0 до 65535)

 

 

Биты

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

состояния

 

 

 

 

 

Пример 1

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

 

BIT.B

#02h,&P1IN

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

 

JC

PROGA

; Если C = 1, выполняем блок A программы

 

......

 

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

 

 

Пример 2

Содержимое R5 сравнивается с числом 15. Если содержимое регистра больше или равно

 

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

 

CMP

#15,R5

 

 

JHS

LABEL

; Переходим, если R5 >= 15

 

......

 

; Остаёмся здесь, если R5 < 15

 

 

 

 

3.4. Система команд 69

JEQ

Переход[.W], если «равно»

JZ

Переход[.W], если ноль

 

 

 

 

Синтаксис

JEQ

label

 

 

JZ

label

 

 

 

Операция

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

 

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

 

 

Описание

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

 

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

 

счётчику команд. Если бит Z сброшен, то выполняется команда, следующая за коман

 

дой перехода

 

 

 

Биты

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

состояния

 

 

 

 

 

Пример 1

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

 

TST

R7

; Проверяем R7

 

JZ

TONI

; Если ноль, то переходим

 

 

Пример 2

Если содержимое R6 равно значению заданного элемента таблицы, то выполняется пе

 

реход к метке LEO.

 

 

CMP

R5,Table(R5)

; Сравниваем содержимое R6 с элементом

 

 

 

; таблицы по адресу

 

 

 

; (базовый адрес + содержимое R5)

 

JEQ

LEO

; Переходим, если значения равны

 

......

 

; Не равны, продолжаем выполнение программы

 

 

Пример 3

Если содержимое R5 равно нулю, то выполняется переход к метке LABEL.

 

TST

R5

 

 

JZ

LABEL

 

 

......

 

 

 

 

 

 

70 Глава 3. 16#битное RISC ЦПУ MSP430

JGE

Переход[.W], если «больше или равно»

 

 

 

 

Синтаксис

JGE

label

 

 

 

Операция

Если (N .XOR. V) = 0, то PC + 2 смещение PC.

 

Если (N .XOR. V) = 1, то выполняется следующая команда.

 

 

Описание

Проверяются биты переполнения (V) и отрицательного значения (N) регистра состоя

 

ния. Если установлены или сброшены оба бита, то смещение (10 битное число со зна

 

ком), находящееся в младших битах слова команды, прибавляется к счётчику команд.

 

Если установлен только один бит, то выполняется команда, следующая за командой пе

 

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

 

 

Биты

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

состояния

 

 

 

 

 

Пример

Если содержимое регистра R6 больше или равно значению, адресуемому регистром R7,

 

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

 

CMP

@R7,R6

; R6 (R7)? – сравниваем числа со знаком

 

JGE

EDE

; Да, R6 (R7)

 

......

 

; Нет, продолжаем выполнение программы

 

 

JL

Переход[.W], если «меньше»

 

 

 

 

Синтаксис

JL

label

 

 

 

Операция

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

 

Если (N .XOR. V) = 0, то выполняется следующая команда.

 

 

Описание

Проверяются биты переполнения (V) и отрицательного значения (N) регистра состоя

 

ния. Если установлен только один из битов, то смещение (10 битное число со знаком),

 

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

 

тановлены или сброшены оба бита, то выполняется команда, следующая за командой

 

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

 

 

Биты

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

состояния

 

 

 

 

 

Пример

Если содержимое регистра R6 меньше значения, адресуемого регистром R7, то выпол

 

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

 

CMP

@R7,R6

; R6 < (R7)? – сравниваем числа со знаком

 

JL

EDE

; Да, R6 < (R7)

 

......

 

; Нет, продолжаем выполнение программы