Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_
.pdf4.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 |
|
|
|
|
|
|