Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_
.pdf4.6. Описание набора команд 141
ADDС[.W], ADDС.B
Сложение двух операндов с учётом переноса
Синтаксис |
ADDC |
src,dst |
или |
ADDC.W |
src,dst |
|
ADDC.B |
src,dst |
|
|
|
|
|
|
|
|
|
Операция |
src + dst + C dst |
|
|
|
|
|
|
||||
Описание |
Операнд источник и бит переноса (C) прибавляются к операнду приёмнику. Предыду |
||||
|
щее содержимое операнда приёмника теряется |
||||
|
|
||||
Биты |
N: Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по |
||||
состояния |
ложительный (MSB = 0). |
|
|||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
||||
|
C: Устанавливается, если произошёл перенос из старшего бита результата, иначе сбра |
||||
|
сывается. |
|
|
|
|
|
V: Устанавливается, если результат операции над двумя положительными операндами |
||||
|
отрицателен или если результат операции над двумя отрицательными операндами |
||||
|
положителен; иначе сбрасывается. |
|
|||
|
|
||||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||||
режима |
|
|
|
|
|
|
|
||||
Пример 1 |
К 16 битному счётчику CNTR, расположенному в нижней 64 КБ области памяти, при |
||||
|
бавляется число 15 и бит переноса от предыдущей операции. |
||||
|
ADDC.W |
#15,&CNTR |
; Прибавляем 15+C к 16$битному счётчику |
||
|
|
||||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), и бит переноса C скла |
||||
|
дываются с содержимым регистра R6. В случае переноса осуществляется переход к мет |
||||
|
ке TONI. Биты R6.19:16 = 0. |
|
|
||
|
ADDC.W |
@R5,R6 |
; Прибавляем слово и C к R6 |
||
|
JC |
TONI |
; Переходим в случае переноса |
||
|
...... |
|
; Нет переноса |
||
|
|
||||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), складывается с содержи |
||||
|
мым регистра R6. При отсутствии переноса осуществляется переход к метке TONI. Ука |
||||
|
затель на таблицу автоматически инкрементируется. Биты R6.19:8 = 0. |
||||
|
ADDC.B |
@R5+,R6 |
; Прибавляем байт и C к R6. R5 = R5 + 1. |
||
|
JNC |
TONI |
; Переходим, если нет переноса |
||
|
...... |
|
; Был перенос |
||
|
|
|
|
|
|
142 Глава 4. 16#битное RISC ЦПУ MSP430X
AND[.W], AND.B
«Логическое И» двух операндов
Синтаксис |
AND |
src,dst или AND.W |
src,dst |
|
|
AND.B |
src,dst |
|
|
|
|
|
|
|
Операция |
src .and. dst dst |
|
|
|
|
|
|||
Описание |
Выполняется операция «Логическое И» между операндом источником и операндом |
|||
|
приёмником. Результат помещается в операнд приёмник. Операнд источник не изме |
|||
|
няется |
|
|
|
|
|
|||
Биты |
N: Устанавливается, если результат отрицателен (MSB = 1), сбрасывается — если поло |
|||
состояния |
жительный (MSB = 0). |
|
||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
|||
|
C: Устанавливается, если результат ненулевой, иначе сбрасывается. С = (.not. Z) |
|||
|
V: Сбрасывается. |
|
|
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
Содержимое регистра R5 используется в качестве битовой маски (#0AA55h) для слова |
|||
|
TOM, расположенного в нижней 64 КБ области памяти. Если результат равен нулю, |
|||
|
выполняется переход к метке TONI. Биты R5.19:16 = 0. |
|||
|
MOV |
#0AA55h,R5 |
; Загружаем маску в R5 |
|
|
AND |
R5,&TOM |
; TOM .and. R5 $> TOM |
|
|
JZ |
TONI |
; Переходим, если результат нулевой |
|
|
...... |
|
; Результат не равен нулю |
|
|
или короче |
|
|
|
|
AND |
#0AA55h,&TOM |
; TOM .and. AA55h $> TOM |
|
|
JZ |
TONI |
; Переходим, если результат нулевой |
|
|
|
|||
Пример 2 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), логически перемно |
|||
|
жается с содержимым регистра R6. После выборки байта R5 инкрементируется. |
|||
|
Биты R6.19:8 = 0. |
|
|
|
|
AND.B |
@R5+,R6 |
; «Логическое И» между байтом из таблицы и R6. |
|
|
|
|
; R5 = R5 + 1 |
|
|
|
|
|
|
4.6. Описание набора команд 143
BIC[.W], BIC.B
Очистка битов операнда
Синтаксис |
BIC |
src,dst или |
BIC.W src,dst |
|
|
BIC.B |
src,dst |
|
|
|
|
|
||
Операция |
(.not. src) .and. dst dst |
|
||
|
|
|||
Описание |
Выполняется операция «Логическое И» между инвертированным значением операнда |
|||
|
источника и операндом приёмником. Результат помещается в операнд приёмник. Опе |
|||
|
ранд источник не изменяется |
|||
|
|
|
||
Биты |
N: Не изменяется |
|
||
состояния |
Z: |
Не изменяется |
|
|
|
C: |
Не изменяется |
|
|
|
V: |
Не изменяется |
|
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример 1 |
Сбрасываются биты 15:14 регистра R5 (16 битное значение). Биты R5.19:16 = 0. |
|||
|
BIC |
#0C000h,R5 |
; Сбрасываем биты R5.19:14 |
|
|
|
|||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), используется для очист |
|||
|
ки битов регистра R7. Биты R7.19:16 = 0 |
|||
|
BIC.W |
@R5,R7 |
; Очищаем те биты в R7, |
|
|
|
|
|
; которые установлены в @R5 |
|
|
|||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), используется для очист |
|||
|
ки битов порта Port1. |
|
||
|
BIC.B |
@R5,&P1OUT |
; Очищаем биты порта 1, |
|
|
|
|
|
; которые установлены в @R5 |
|
|
|
|
|
144 Глава 4. 16#битное RISC ЦПУ MSP430X
BIS[.W], BIS.B
Установка битов операнда
Синтаксис |
BIS |
src,dst или |
BIS.W |
src,dst |
|
|
BIS.B |
src,dst |
|
|
|
|
|
|
|
||
Операция |
src .or. dst dst |
|
|
||
|
|
||||
Описание |
Выполняется операция «Логическое ИЛИ» между операндом источником и операндом |
||||
|
приёмником. Результат помещается в операнд приёмник. Операнд источник не изме |
||||
|
няется |
|
|
|
|
|
|
|
|
||
Биты |
N: Не изменяется |
|
|
||
состояния |
Z: |
Не изменяется |
|
|
|
|
C: |
Не изменяется |
|
|
|
|
V: |
Не изменяется |
|
|
|
|
|
||||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||||
режима |
|
|
|
|
|
|
|
||||
Пример 1 |
Устанавливаются биты 15 и 13 регистра R5 (16 битное значение). Биты R5.19:16 = 0. |
||||
|
BIS |
#0A000h,R5 |
; Устанавливаем биты R5 |
||
|
|
||||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), используется для уста |
||||
|
новки битов регистра R7. Биты R7.19:16 = 0 |
||||
|
BIS.W |
@R5,R7 |
; Устанавливаем биты R7 |
||
|
|
||||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), используется для уста |
||||
|
новки битов порта Port1. Затем R5 инкрементируется. |
||||
|
BIS.B |
@R5+,&P1OUT |
; Устанавливаем биты порта 1, R5 = R5 + 1 |
||
|
|
|
|
|
|
4.6. Описание набора команд 145
BIT[.W], BIT.B
Проверка битов операнда
Синтаксис |
BIT |
src,dst или |
BIT.W src,dst |
|
BIT.B |
src,dst |
|
|
|
|
|
Операция |
src .and. dst |
|
|
|
|
||
Описание |
Выполняется операция «Логическое И» между операндом источником и операндом |
||
|
приёмником. Результат операции влияет только на биты состояния регистра SR. |
||
|
Режим регистровой адресации: биты регистра Rdst.19:16 и Rdst.19:8 (.W и .B соответс |
||
|
твенно) не сбрасываются! |
|
|
|
|
||
Биты |
N: Устанавливается, если результат отрицательный (MSB = 1), сбрасывается — если по |
||
состояния |
ложительный (MSB = 0). |
||
|
Z: Устанавливается, если результат нулевой, иначе сбрасывается. |
||
|
C: Устанавливается, если результат ненулевой, иначе сбрасывается. С = (.not. Z) |
||
|
V: Сбрасывается. |
|
|
|
|
||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
||
режима |
|
|
|
|
|
||
Пример 1 |
Если установлен бит 15 или 14 регистра R5 (16 битное значение) или оба этих бита, то |
||
|
выполняется переход к метке TONI. Биты R5.19:16 не изменяются. |
||
|
BIT |
#C000h,R5 |
; Проверяем биты R5.15:14 |
|
JNZ |
TONI |
; Хотя бы один бит установлен |
|
...... |
|
; Оба бита сброшены |
|
|
||
Пример 2 |
Слово из таблицы, адресуемое регистром R5 (20 битный адрес), используется для про |
||
|
верки битов регистра R7. Если установлен хотя бы один бит, то выполняется переход к |
||
|
метке TONI. Биты R7.19:16 не изменяются. |
||
|
BIT.W |
@R5,R7 |
; Проверяем биты R7 |
|
JC |
TONI |
; Хотя бы один бит установлен |
|
...... |
|
; Все биты сброшены |
|
|
||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), используется для про |
||
|
верки битов порта Port1. Если все биты сброшены, то выполняется переход к метке |
||
|
TONI. Затем указатель устанавливается на следующий байт таблицы. |
||
|
BIT.B |
@R5+,&P1OUT |
; Проверяем биты порта 1, R5 = R5 + 1 |
|
JNC |
TONI |
; Все требуемые биты сброшены |
|
...... |
|
; Хотя бы один бит установлен |
|
|
|
|
146 Глава 4. 16#битное RISC ЦПУ MSP430X
* BR[.W], BRANCH
Переход в пределах нижней 64CКБ области памяти
Синтаксис |
BR |
dst |
|
|
|
|
|
|
|
|
|
Операция |
dst PC |
|
|
|
|
|
|
|
|
|
|
Эмуляция |
MOV |
dst,PC |
|
|
|
|
|
||||
Описание |
Выполняется безусловный переход по любому адресу в пределах нижней 64 КБ области |
||||
|
памяти. Для операнда могут использоваться любые режимы адресации. В команде ис |
||||
|
пользуются 2 байтные операнды |
|
|||
|
|
|
|||
Биты |
Биты состояния не изменяются |
|
|||
состояния |
|
|
|
|
|
|
|
||||
Пример |
Приведены примеры для всех режимов адресации. |
||||
|
BR |
#EXEC |
; Переход |
к метке EXEC или заданному адресу |
|
|
|
|
; (например, #0A4h) |
|
|
|
|
|
; Команда |
ядра – MOV |
@PC+,PC |
|
BR |
EXEC |
; Переход |
по адресу, |
находящемуся в EXEC |
|
|
|
; Команда |
ядра – MOV |
X(PC),PC |
|
|
|
; Косвенная адресация |
|
|
|
BR |
&EXEC |
; Переход |
по адресу, находящемуся в ячейке памяти |
|
|
|
|
; с абсолютным адресом EXEC |
||
|
|
|
; Команда |
ядра – MOV |
X(0),PC |
|
|
|
; Косвенная адресация |
|
|
|
BR |
R5 |
; Переход |
по адресу, содержащемуся в регистре R5 |
|
|
|
|
; Команда |
ядра – MOV |
R5,PC |
|
|
|
; Косвенная адресация по содержимому R5 |
||
|
BR |
@R5 |
; Переход |
по адресу, содержащемуся в слове памяти, |
|
|
|
|
; адресуемом регистром R5 |
||
|
|
|
; Команда |
ядра – MOV |
@R5,PC |
|
|
|
; Косвенная адресация по косвенному содержимому R5 |
||
|
BR |
@R5+ |
; Переход |
по адресу, содержащемуся в слове памяти, |
|
|
|
|
; адресуемом регистром R5, c последующим |
||
|
|
|
; инкрементированием содержимого R5 |
||
|
|
|
; Команда |
ядра – MOV |
@R5+,PC |
|
|
|
; Косвенная адресация по косвенному содержимому R5 |
||
|
|
|
; с автоинкрементом |
|
|
|
BR |
X(R5) |
; Переход |
по адресу, содержащемуся в слове памяти |
|
|
|
|
; с адресом R5 + X (например, обращение к таблице |
||
|
|
|
; адресов, расположенной начиная с адреса X). |
||
|
|
|
; X может |
быть адресом или меткой. |
|
|
|
|
; Команда |
ядра – MOV |
X(R5),PC |
;Косвенная адресация по косвенному
;содержимому R5 + X
4.6. Описание набора команд 147
CALL
Вызов подпрограммы из нижней 64CКБ области памяти
Синтаксис |
CALL |
|
dst |
|
|
|
|
|
|||
Операция |
Dst tmp |
16 битное dst вычисляется и запоминается |
|||
|
SP – 2 SP |
|
|
||
|
PC @SP |
PC сохраняется в стеке |
|
||
|
tmp PC |
dst загружается в PC |
|
||
|
|
||||
Описание |
Осуществляется вызов подпрограммы, расположенной по любому адресу в пределах |
||||
|
64 КБ. Могут использоваться все семь режимов адресации. В команде используется |
||||
|
2 байтный операнд. Возврат из подпрограммы осуществляется по команде RET. |
||||
|
|
|
|||
Биты |
Биты состояния не изменяются. |
|
|||
состояния |
Биты PC.19:16 — сбрасываются (адрес в пределах нижней 64 КБ области) |
||||
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
|||
режима |
|
|
|
|
|
|
|
||||
Пример |
Приведены примеры для всех режимов адресации. |
||||
|
Непосредственная адресация: вызов подпрограммы по метке (нижние 64 КБ) или по ад |
||||
|
ресу. |
|
|
|
|
|
CALL |
#EXEC |
; Стартовый адрес $ |
EXEC |
|
|
CALL |
#0AA04h |
; Стартовый адрес $ |
#0AA04h |
Относительная адресация: вызов подпрограммы по 16 битному адресу, находящемуся в EXEC. EXEC находится по адресу (PC + X), где X – в диапазоне PC ±32 КБ.
CALL |
EXEC |
; Стартовый адрес $ @EXEC. z16(PC) |
Абсолютная адресация: вызов подпрограммы по 16 битному адресу, находящемуся в ячейке с абсолютным адресом EXEC (нижние 64 КБ).
CALL |
&EXEC |
; Стартовый адрес $ @EXEC |
Регистровая адресация: вызов подпрограммы по 16 битному адресу, находящемуся в ре гистре R5 (R5.15:0).
CALL |
R5 |
; Стартовый адрес $ в регистре R5 |
Косвенная адресация: вызов подпрограммы по 16 битному адресу, находящемуся в сло ве памяти, адресуемом регистром R5 (20 битный адрес).
CALL |
@R5 |
; Стартовый адрес $ @R5 |
Косвенная адресация с автоинкрементом: вызов подпрограммы по 16 битному адресу, находящемуся в слове памяти, адресуемом регистром R5 (20 битный адрес), с последую щим увеличением содержимого R5 на 2.
CALL |
@R5+ |
; Стартовый адрес $ @R5, R5 = R5 + 2 |
Индексная адресация: вызов подпрограммы по 16 битному адресу, находящемуся в слове памяти с адресом (R5 + X), например обращение к таблице адресов, расположенной начи ная с адреса X. Адрес находится в пределах нижней 64 КБ области. X — в диапазоне
±32 КБ.
CALL |
X(R5) |
; Стартовый адрес $ @(R5 + X). z16(R5) |
148 Глава 4. 16#битное RISC ЦПУ MSP430X
* CLR[.W], * CLR.B Очистка операнда
Синтаксис |
CLR |
dst |
или CLR.W dst |
|
CLR.B |
dst |
|
|
|
|
|
Операция |
0 dst |
|
|
|
|
|
|
Эмуляция |
MOV |
#0,dst |
|
|
MOV.B #0,dst |
|
|
|
|
||
Описание |
Операнд приёмник обнуляется |
||
|
|
||
Биты |
Биты состояния не изменяются |
||
состояния |
|
|
|
|
|
||
Пример 1 |
Обнуляется слово TONI в ОЗУ. |
||
|
CLR |
TONI |
; 0 $> TONI |
|
|
||
Пример 2 |
Обнуляется регистр R5. |
||
|
CLR |
R5 |
|
|
|
||
Пример 3 |
Обнуляется байт TONI, расположенный в ОЗУ. |
||
|
CLR.B |
TONI |
; 0 $> TONI |
|
|
|
|
* CLRC
Очистка бита переноса
Синтаксис |
CLRC |
|
|
|
|
|
|
|
|
Операция |
0 C |
|
|
|
|
|
|
|
|
Эмуляция |
BIC |
#1,SR |
|
|
|
|
|||
Описание |
Бит переноса (C) сбрасывается. В команде используются 2 байтные операнды |
|||
|
|
|
||
Биты |
N: Не изменяется. |
|
||
состояния |
Z: |
Не изменяется. |
|
|
|
C: |
Сбрасывается. |
|
|
|
V: |
Не изменяется. |
|
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример |
16 битный счётчик, на который указывает R13, прибавляется к 32 битному счётчику, на |
|||
|
который указывает R12. |
|
||
|
CLRC |
|
; C=0: начальное значение |
|
|
DADD |
@R13,0(R12) ; Прибавляем 16$битный счётчик к младшему |
||
|
|
|
|
; слову 32$битного счётчика |
|
DADC |
2(R12) |
; Прибавляем перенос к старшему слову |
|
|
|
|
|
; 32$битного счётчика |
|
|
|
|
|
4.6. Описание набора команд 149
* CLRN
Очистка бита отрицательного значения
Синтаксис |
CLRN |
|
|
|
|
|
|||
Операция |
0 N или (.NOT. src .AND. dst dst) |
|||
|
|
|
|
|
Эмуляция |
BIC |
#4,SR |
|
|
|
|
|||
Описание |
Константа 04h инвертируется (0FFFBh) и логически перемножается (AND) с содержи |
|||
|
мым регистра состояния SR. Результат помещается в регистр состояния. В команде ис |
|||
|
пользуются 2 байтные операнды |
|||
|
|
|
||
Биты |
N: Сбрасывается. |
|
||
состояния |
Z: |
Не изменяется. |
|
|
|
C: |
Не изменяется. |
|
|
|
V: |
Не изменяется. |
|
|
|
|
|||
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|||
режима |
|
|
|
|
|
|
|||
Пример |
Сбрасывается флаг отрицательного значения в регистре состояния. Таким образом, ис |
|||
|
ключается обработка отрицательных чисел в вызываемой подпрограмме. |
|||
|
CLRN |
|
|
|
|
CALL |
SUBR |
|
|
|
...... |
|
|
|
|
SUBR |
JN SUBRET |
; Если входной результат отрицательный, |
|
|
...... |
|
; то ничего не делаем и выходим |
|
|
SUBRET |
RET |
|
|
|
|
|
|
|
* CLRZ
Очистка бита нуля
Синтаксис |
CLRZ |
|
|
|
|
Операция |
0 Z или (.NOT. src .AND. dst dst) |
|
|
|
|
Эмуляция |
BIC #2,SR |
|
|
|
|
Описание |
Константа 02h инвертируется (0FFFDh) и логически перемножается (AND) с содержи |
|
|
мым регистра состояния SR. Результат помещается в регистр состояния. В команде ис |
|
|
пользуются 2 байтные операнды |
|
|
|
|
Биты |
N: Не изменяется. |
|
состояния |
Z: |
Сбрасывается. |
|
C: |
Не изменяется. |
|
V: |
Не изменяется. |
|
|
|
Биты |
OSCOFF, CPUOFF и GIE не изменяются |
|
режима |
|
|
|
|
|
Пример |
Сбрасывается флаг нуля в регистре состояния. |
|
|
CLRZ |
|
|
|
|
150 Глава 4. 16#битное RISC ЦПУ MSP430X
CMP[.W], CMP.B Сравнение двух операндов
Синтаксис |
CMP |
src,dst или |
CMP.W |
src,dst |
|
CMP.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 сравнивается с 16 битной константой 1800h. В случае равенства выполняет |
|||
|
ся переход к метке TONI. Слово EDE расположено в диапазоне PC ±32 КБ. |
|||
|
CMP |
#01800h,EDE |
; Сравниваем EDE с 1800h |
|
|
JEQ |
TONI |
; EDE = 1800h |
|
|
... |
|
|
|
|
|
|||
Пример 2 |
Слово из таблицы с адресом (R5 + 10) сравнивается содержимым регистра R7 (20 бит |
|||
|
ный адрес). Если число в R7 меньше табличного значения (сравниваются 16 битные |
|||
|
числа со знаком), то выполняется переход к метке TONI. Биты R7.19:16 не изменяются. |
|||
|
Адрес операнда источника — 20 битный. |
|||
|
CMP.W |
10(R5),R7 |
; Сравниваем два числа со знаком |
|
|
JL |
TONI |
; R7 < 10(R5) |
|
|
... |
|
; R7 >= 10(R5) |
|
|
|
|||
Пример 3 |
Байт из таблицы, адресуемый регистром R5 (20 битный адрес), сравнивается с выход |
|||
|
ным состоянием порта Port1. Если значения равны, то выполняется переход к метке |
|||
|
TONI. Затем указатель устанавливается на следующий байт таблицы. |
|||
|
CMP.B |
@R5+,&P1OUT |
; Сравниваем биты порта с таблицей, |
|
|
|
|
; R5 = R5 + 1 |
|
|
JEQ |
TONI |
; Значения одинаковы |
|
|
... |
|
; Значения разные |
|
|
|
|
|
|