- •Внутренняя архитектура и
- •Цель и содержание работы
- •Архитектура микроконтроллера
- •2.2.2 Регистры общего назначения.
- •2.2.3 Регистры специального назначения.
- •3. Адресация команд.
- •3.1 Относительная адресация.
- •3.2 Прямая адресация
- •3.3 Косвенная табличная адресация
- •3.4 Регистровая адресация
- •4. Адресация операндов.
- •4.1 Неявная адресация.
- •4.2 Регистровая адресация
- •4.3 Прямая адресация
- •4.4 Короткая прямая адресация
- •4.5 Адресация регистров специального назначения (sfr)
- •4.6 Косвенная регистровая адресация
- •4.7 Базовая адресация
- •4.8 Относительная индексная адресация
- •4.9 Стековая адресация
- •5 Система команд.
- •5.1 Операции
- •5.2 Соглашения при описании команды
- •5.3 Перечень команд процессора сгруппированный по видам адресации
- •5.4 Описание инструкций.
- •6. Контрольные вопросы
5.4 Описание инструкций.
В этой части описываются инструкции системы команд серии 78K0. Каждая инструкция описывается мнемоникой и операндами.
5.4.1 Команды передачи 8-разрядных данных.
MOV – передача байта данных.
Формат записи MOV dst,src (Перечень возможных операндов для данной команды указан в таблице 7.)
- Содержимое операнда источника (src) переносится в операнд получатель (dst).
- Запрос на прерывание не подтверждается между выполнением инструкции “MOV PSW, #byte” или “MOV PSW, А” и последующей инструкцией.
Пример: MOV A,#4DH; Байт 4DH копируется в регистр A.
XCH - Обмен байтами данных
Формат записи XCH dst,src
- Первый и второй операнд обмениваются содержимым друг с другом.
Пример: XCH A, 0FEBCH; Регистр A обменивается содержимым с ячейкой памяти, находящейся по адресу FEBCH.
5.4.2 Команды передачи 16-разрядных данных
MOVW- Передача слова данных
Формат записи MOVW dst, src
- Содержимое операнда источника (src) копируется в операнд получатель (dst).
Пример: MOVW AX,HL; Данные хранящиеся в регистровой паре HL копируются в регистровую пару AX.
В качестве операнда описываемого как saddrp можно использовать только четные адреса. Нечетные адреса нельзя использовать в данной команде.
XCHW- Обмен словами данных
Формат записи XCHW dst, src
- Первый и второй операнды обмениваются содержимым друг с другом.
Пример: XCHW AX, BC; Регистровая пара AX обменивается данными с регистровой парой BC.
5.4.3 Математические и логические операции над 8-разрядными данными
ADD - Байтовое арифметическое сложение
Формат записи ADD dst, src
- Содержимое операнда получателя (dst) складывается с содержимым операнда источника (src), сумма помещается в операнд получатель, информация о переносе записывается в регистр CY.
- Если в результате сложения получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате сложения произошло переполнение старшего (7-го) разряда данных, флаг CY устанавливается в 1, в противном случае в 0.
- Если в результате сложения произошел перенос из 3-го разряда в 4-й, флаг AC устанавливается в 1, в противном случае в 0.
Пример: ADD CR10, #56H; Байт 56H складывается с содержимым регистра CR10, сумма помещается в регистр CR10.
ADDC - Байтовое арифметическое сложение с учетом переноса
Формат записи ADDC dst, src
- Содержимое операнда получателя (dst) складывается с содержимым операнда источника (src) и со значением флага переноса (CY), при этом флаг CY складывается с младшими разрядами операндов. Полученная сумма помещается в операнд получатель. Данная команда обычно используется при сложении чисел состоящих из 2 и более байт.
- Если в результате сложения получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате сложения произошло переполнение старшего (7-го) разряда данных, флаг CY устанавливается в 1, в противном случае в 0.
- Если в результате сложения произошел перенос из 3-го разряда в 4-й, флаг AC устанавливается в 1, в противном случае в 0.
Пример: ADDС A, [HL]; Содержимое регистра А складывается с содержимым ячейки памяти, адрес ко-
торой хранится в регистровой паре HL, к полученной сумме прибавляется значение флага CY. Итоговый результат помещается в регистр A.
SUB - Байтовое арифметическое вычитание
Формат записи SUB dst, src
- Из содержимого операнда получателя (dst) вычитается содержимое операнда источника (src), разность помещается в операнд получатель, информация о заеме записывается в регистр CY.
- Если в результате вычитания получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем в старший разряд, флаг CY устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем из 4-го разряда в 3-й, флаг AC устанавливается в 1, в противном случае в 0.
Пример: SUB A, D; Регистр D вычитается из регистра A, разность помещается в регистр A.
SUBC - Байтовое арифметическое вычитание с учетом переноса
Формат записи SUBC dst, src
- Из содержимого операнда получателя (dst) вычитается содержимое операнда источника (src), из младшего разряда полученной разности вычитается значение флага CY. Полученное значение помещается в операнд получатель, информация о заеме записывается в регистр CY. Данная команда обычно используется при вычитании чисел состоящих из 2 и более байт.
- Если в результате вычитания получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем в старший разряд, флаг CY устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем из 4-го разряда в 3-й, флаг AC устанавливается в 1, в противном случае в 0.
Пример: SUBС A, [HL]; Содержимое ячейки памяти, адресуемой регистровой парой HL и значение флага CY вычитаются из регистра A. Полученная разность помещается в регистр A.
AND - Операция логическое И
Формат записи AND dst, src
- Между содержимым операнда получателя (dst) и содержимым операнда источника (src) выполняется операция поразрядное логическое И, результат помещается в операнд получатель.
- Если в результате логической операции получился 0, флаг Z устанавливается в 1, в противном случае в 0.
Пример: AND FEBAH, #11011100B; Между содержимым ячейки памяти с адресом FEBAH и байтом
11011100B выполняется операция поразрядное логическое И, результат помещается в ячейку памяти с адресом FEBAH.
OR - Операция логическое ИЛИ
Формат записи OR dst, src
- Между содержимым операнда получателя (dst) и содержимым операнда источника (src) выполняется операция поразрядное логическое ИЛИ, результат помещается в операнд получатель.
- Если в результате логической операции получился 0, флаг Z устанавливается в 1, в противном случае в 0.
Пример: OR A, FE98H; Между содержимым регистра А и содержимым ячейки памяти с адресом FE98H
выполняется операция поразрядное логическое ИЛИ, результат помещается регистр А.
XOR - Операция исключающее ИЛИ
Формат записи XOR dst, src
- Между содержимым операнда получателя (dst) и содержимым операнда источника (src) выполняется операция поразрядное исключающее ИЛИ, результат помещается в операнд получатель.
- Если в результате логической операции получился 0, флаг Z устанавливается в 1, в противном случае в 0.
Пример: XOR A, L; Между содержимым регистра А и содержимым регистра L выполняется операция поразрядное исключающее ИЛИ, результат помещается в регистр А.
CMP - Сравнение байтов
Формат записи CMP dst, src
- Из содержимого операнда получателя (dst), описываемого 1-м параметром вычитается содержимое операнда источника (src), описываемого 2-м параметром, информация о заеме записывается в регистр CY, после операции значения операндов не изменяются.
- Если в результате вычитания получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем в старший разряд, флаг CY устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем из 4-го разряда в 3-й, флаг AC устанавливается в 1, в противном случае в 0.
Пример: CMP FE38H, #38H; Байт 38H вычитается из содержимого ячейки с адресом FF38H, в соответствии с полученным результатом устанавливаются флаги (выполняется сравнение содержимого ячейки памяти с адресом FF38H и байта 38H, после операции содержимое ячейки памяти FF38H не изменяется).
5.4.4 Команды математических операций над 16-разрядными данными
ADDW - Арифметическое сложение слов
Формат записи ADDW dst, src
- Содержимое операнда получателя (dst) складывается с содержимым операнда источника (src), сумма помещается в операнд получатель, информация о переносе записывается в регистр CY.
- Если в результате сложения получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате сложения произошло переполнение старшего (15-го) разряда данных, флаг CY устанавливается в 1, в противном случае в 0.
- В результате сложения значение флага AC становится неопределенным.
Пример: ADDW AX, #ABCDH; Содержимое регистровой пары AX складывается со словом #ABCDH, сумма помещается в регистровую пару AX.
SUBW - Арифметическое вычитание слов
Формат записи SUBW dst, src
- Из содержимого операнда получателя (dst) вычитается содержимое операнда источника (src), разность помещается в операнд получатель, информация о заеме записывается в регистр CY.
- Если в результате вычитания получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем в старший (15-й) разряд данных, флаг CY устанавливается в 1, в противном случае в 0.
- В результате вычитания значение флага AC становится неопределенным.
Пример: SUBW AX, #ABCDH; Слово ABCDH вычитается из регистровой пары AX, разность омещается
в регистровую пару AX.
CMPW - Сравнение слов данных
Формат записи CMPW dst, src
- Из содержимого операнда получателя (dst) вычитается содержимое операнда источника (src), в соответствии с результатом устанавливаются флаги Z, AC, CY, значения операндов получателя и источника не изменяются.
- Если в результате вычитания получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате вычитания произошел заем в старший (15-й) разряд данных, флаг CY устанавливается в 1, в противном случае в 0.
- В результате вычитания значение флага AC становится неопределенным.
Пример: CMPW AX, #ABCDH; Слово ABCDH вычитается из регистровой пары AX, значения флагов устанавливаются в соответствие с результатом (регистровая пара AX сравнивается с непосредственными 16-разрядными данными, содержимое регистровой пары AX после операции не изменяется).
5.4.5 Команды инкремента/декремента
INC - Инкремент (увеличение на единицу) байта данных
Формат записи INC dst
- Содержимое операнда получателя (dst) увеличивается на 1, результат помещается в операнд получатель.
- Если в результате инкремента получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате инкремента произошел перенос из 3-го разряда в 4-й, флаг AC устанавливается в 1, в противном случае в 0.
- В связи с тем, что данная команда очень часто используется для организации счетчиков цикла, после данной операции состояние флага CY не изменяется.
Пример: INC B; Инкрементируется регистр B.
DEC - Декремент (уменьшение на единицу) байта данных
Формат записи DEC dst
- Содержимое операнда получателя (dst) уменьшается на 1, результат помещается в операнд получатель.
- Если в результате декремента получился 0, флаг Z устанавливается в 1, в противном случае в 0.
- Если в результате декремента произошел заем из 4-го разряда в 3-й, флаг AC устанавливается в 1, в противном случае в 0.
- В связи с тем, что данная команда очень часто используется для организации счетчиков цикла, после данной операции состояние флага CY не изменяется.
- Если при декременте в качестве операнда получателя используется регистры В, С или saddr и нежелательны изменения флагов АС или СY, то в качестве альтернативы может быть использована команда DBNZ.
Пример: DEC 0FE92H; Декрементируется содержимое ячейки памяти с адресом FE92H.
INCW - Инкремент (увеличение на единицу) слова данных
Формат записи INCW dst
- Содержимое операнда получателя (dst) увеличивается на 1, результат помещается в операнд получатель.
- В связи с тем, что данная команда обычно используется для модификации регистра указателя, используемого для адресации данных, после данной операции состояние флагов Z, CY, AC не изменяется.
Пример: INCW HL; Инкрементируется регистровая пара HL.
DECW - Декремент (уменьшение на единицу) слова данных
Формат записи DECW dst
- Содержимое операнда получателя (dst) уменьшается на 1, результат помещается в операнд получатель.
- В связи с тем, что данная команда обычно используется для модификации регистра указателя, используемого для адресации данных, после данной операции состояние флагов Z, CY, AC не изменяется.
Пример: DECW DE; Декрементируется регистровая пара DE.
5.4.6 Команды циклического сдвига
ROR - Циклический сдвиг байта данных вправо
Формат записи ROR dst, 1
- Содержимое операнда получателя (dst) циклически сдвигается вправо на 1 разряд.
- Значение младшего 0-го разряда (LSB) перемещается в старший 7-й разряд (MSB), и во
флаг CY.

Пример: ROR A, 1; Регистр А циклически сдвигается вправо на 1 разряд.
ROL - Циклический сдвиг байта данных влево
Формат записи ROL dst, 1
- Содержимое операнда получателя (dst) циклически сдвигается влево на 1 разряд.
- Значение старшего 7-го разряда (MSB) перемещается в младший 0-й разряд (LSB), и во флаг CY.

Пример: ROL A, 1; Регистр А циклически сдвигается влево на 1 разряд.
RORC - Циклический сдвиг байта данных вправо через флаг CY
Формат записи RORC dst, 1
- Содержимое операнда получателя (dst) циклически сдвигается вправо на 1 разряд через флаг CY.

Пример: RORC A, 1; Регистр А циклически сдвигается вправо на 1 разряд через флаг CY.
ROLC - Циклический сдвиг байта данных влево через флаг CY
Формат записи ROLC dst, 1
- Содержимое операнда получателя (dst) циклически сдвигается влево на 1 разряд через флаг CY.

Пример: ROLС A, 1; Регистр А циклически сдвигается влево на 1 разряд через флаг CY.
5.4.7 Команды манипуляции с битами
SET1 - Установка одного разряда в 1
Формат записи SET1 dst
- Значение операнда получателя (dst) устанавливается в 1.
- Если операндом получателя является флаг переноса (CY) или биты регистра PSW, то в 1
устанавливается соответствующий флаг.
Пример: SET1 0FE55H.2; Разряд 2 ячейки памяти с адресом FE55H устанавливается в 1.
CLR1 - Сброс одного разряда в 0
Формат записи CLR1 dst
- Значение операнда получателя (dst) устанавливается в 0.
- Если операндом получателя является флаг переноса (CY) или биты регистра PSW, то в 0
устанавливается соответствующий флаг.
Пример: CLR1 P3.7; Разряд 7 порта 3 устанавливается в 0.
NOT1 - Инвертирование одного разряд (Флага переноса)
Формат записи NOT1 dst
- Флаг CY инвертируется.
Пример: NOT1 CY; Флаг CY инвертируется.
5.4.8 Команды вызова подпрограмм и возвращения из подпрограмм
CALL - Вызов подпрограммы (по 16-разрядному непосредственно заданному адресу)
Формат записи CALL target
- Команда вызова подпрограммы, адрес которой задан 16-разрядным абсолютным значением в теле команды.
- Адрес следующей за командой CALL инструкции (PC + 3) сохраняется в стеке, управление передается подпрограмме, адрес которой задан операндом (target).
Пример: CALL !3059; Вызов подпрограммы с абсолютным адресом 3059H.
CALLT - Вызов подпрограммы (по адресу заданному в таблице)
Формат записи CALLT [addr5]
- (SP – 1) ←(PC + 1)СТ,
(SP – 2) ← (PC + 1)МЛ,
SP ← SP – 2,
PCСТ ← (00000000,addr5 + 1),
PCМЛ ←(00000000,addr5)
- Команда вызова подпрограммы, адрес которой задан в таблице.
- Адрес следующей за командой CALLT инструкции (PC + 1) сохраняется в стеке, управление передается подпрограмме, адрес которой считывается из таблицы адресов подпрограмм, находящейся в области памяти 40Н – 7FH. На основе 5-разрядного смещения, заданного в теле команды формируется адрес, по которому будет считан вектор вызова подпрограммы. При этом, старший байт адреса устанавливается равным 00000000B, младший байт соответствует значению смещения addr5.
Пример: CALLT [40H]; Вызов подпрограммы c адресом находящимся в ячейках памяти 0040H и 0041H.
RET - Возврат из подпрограммы
Формат записи RET
- Возврат из подпрограмм, вызванных командами CALL или CALLT.
- В программный счетчик (PC) загружается адрес, сохраненный в стеке перед вызовом подпрограммы.
RETI - Возврат из программы обработки прерывания
Формат записи RETI
- Возврат из подпрограммы, вызванной прерыванием.
- В программный счетчик (PC) загружается адрес, сохраненный в стеке перед вызовом под-
программы обработки прерывания.
- Слово состояния (PSW) восстанавливается значением, сохраненным в стеке перед вызовом подпрограммы обработки прерывания.
- Все прерывания запрещены в промежутке между данной и следующей за ней выполняемой инструкцией.
- Флаг NMIS, установленный в 1 немаскируемыми прерываниями, посредством команды
RETI устанавливается в 0.
- Если возврат из программы обработки немаскируемого прерывания выполняется не командой
RETI, а какой либо иной, то флаг NMIS не сбрасывается в 0, и в этом случае становится невозможным выполнение подтверждение прерываний (в том числе немаскируемых) .
5.4.9 Команды работы со стеком
PUSH - Поместить данные в стек
Формат записи PUSH src
- Данные, хранящиеся в регистре заданном операндом источника (src), помещаются в стек.
Пример: PUSH AX; Значение регистровой пары AX помещается в стек.
POP- Извлечение данных из стека
Формат записи POP dst
- Данные извлекаются из стека и помещаются в операнд получатель (dst).
- Если в качестве операнда задан PSW, то из стека извлекаются соответствующие флаги.
- Между выполнением команды POP PSW и следующей за ней инструкцией запрещены все прерывания.
Пример: POP AX; Из стека извлекается слово данных и помещается в регистровую пару AX.
MOVW SP, AX
MOVW AX, SP - Операции обмена данными с регистром указателя стека
Формат записи MOVW dst, src
- Операции манипулирования с содержимым регистра указателя стека.
- Содержимое операнда источника (src) копируется в операнд получатель (dst).
Пример: MOVW SP, AX; Содержимое регистра AX копируется в регистр указателя стека (SP).
5.4.10 Команда безусловного перехода
BR - Команда безусловного перехода
Формат записи BR target
- Команда безусловного перехода.
- Адрес, заданный операндом (target), помещается в регистр программного счетчика, вследствие чего управление передается команде находящейся по вышеуказанному адресу.
Пример: BR AX; Передача управления команде, адрес которой находится в регистровой паре AX.
5.4.11 Команды условного перехода
BC - Команда условного перехода (CY = 1)
Формат записи BC $addr16
- Если CY = 1, управление передается команде с адресом задаваемым операндом $addr16.
- Если CY = 0, управление передается инструкции следующей за командой BC $addr16.
Пример: BС $300H; Если CY = 1, происходит переход на команду с адресом 0300H (в данном случае команда BС $300H должна находиться в диапазоне адресов 027FH – 037EH).
BNC - Команда условного перехода (CY = 0)
Формат записи BNC $addr16
- Если CY = 0, управление передается команде с адресом задаваемым операндом $addr16.
- Если CY = 1, управление передается инструкции следующей за командой BNC $addr16.
Пример: BNС $300H; Если CY = 0, происходит переход на команду с адресом 0300H (в данном случае команда BNС $300H должна находиться в диапазоне адресов 027FH – 037EH).
BZ - Команда условного перехода (Z = 1)
Формат записи BZ $addr16
- Если Z = 1, управление передается команде с адресом задаваемым операндом $addr16.
- Если Z = 0, управление передается инструкции следующей за командой BZ $addr16.
Пример: DEC B
BZ $3С5H; Если после декремента значение регистра B станет равным 0, то произойдет переход на команду с адресом 03С5H (в данном случае команда BZ $3C5H должна находиться в диапазоне адресов 0344H – 0443H).
BNZ - Команда условного перехода (Z = 0)
Формат записи BNZ $addr16
- Если Z = 0, управление передается команде с адресом задаваемым операндом $addr16.
- Если Z = 1, управление передается команде следующей за командой BNZ $addr16.
Пример: CMP A, #55H
BNZ $0A39H; Если значение регистра А не равно 055H, то происходит переход на команду с адресом 0A39H (в данном случае команда BNZ $0A39H должна находиться в диапазоне адресов 09B8H – 0AB7H).
BT - Команда условного перехода в зависимости от значения разряда (разряд = 1)
Формат записи BT bit, $addr16
- Если значение операнда bit равно 1, управление передается команде с адресом задаваемым операндом $addr16.
- Если значение операнда bit равно 0, управление передается инструкции следующей за командой BT bit, $addr16.
Пример: BT 0FE47H.3, $55CH; Если 3-й разряд ячейки, находящейся по адресу FE47H, станет равен 1, то произойдет переход на команду с адресом 55СH (в данном случае команда BT 0FE47H.3, $55CH должна находиться в диапазоне адресов
04DAH – 05D9H).
BF - Команда условного перехода в зависимости от значения разряда (разряд = 0)
Формат записи BF bit, $addr16
- Если значение операнда bit равно 0, управление передается команде с адресом задаваемым операндом $addr16.
- Если значение операнда bit равно 1, управление передается инструкции следующей за командой BF bit, $addr16.
Пример: BF P2.2, $1549H; Если 2-й разряд порта P2 станет равен 0, то произойдет переход на команду с адресом 1549H (в данном случае команда BF P2.2, $1549H должна находиться в диапазоне адресов 14C6H – 15C5H).
DBNZ - Команда организации цикла
Формат записи DBNZ dst, $addr16
- Содержимое операнда dst уменьшается на 1 и сохраняется в операнде dst.
- Если в результате уменьшения операнда dst получился 0, то управление передается инструкции следующей за командой DBNZ dst, $addr16, в противном случае продолжается выполнение цикла и управление передается команде, адрес которой задан операндом $addr16.
- Данная инструкция не изменяет значения флагов.
Пример: DBNZ B, $1215H; Значение регистра B декрементируется. Если в результате декремента не
произошло обнуление регистра B, то происходит переход на команду с адресом 1215H (в данном случае команда DBNZ B, $1215H должна находиться в диапазоне адресов 1194H – 1293H).
5.4.12 Дополнительные команды управления
NOP - Нет операции (пустая операция)
Формат записи NOP
- На выполнение данной операции тратится процессорное время, однако процессор не выполняет никаких действий. Обычно данная операция используется для формирования временных задержек.
EI - Разрешение прерывания
Формат записи EI
- Данная команда устанавливает в 1 значение флага IE, при этом разрешается выполнение маскируемых прерываний.
- Прерывания разрешены сразу после выполнения данной команды.
- Даже после выполнения команды EI некоторые прерывания могут быть запрещены, более подробную информацию о прерываниях вы можете найти в документации на конкретный микроконтроллер в главе “Прерывания” (“INTERRUPT FUNCTION”).
DI - Запрещение прерывания
Формат записи DI
- Данная команда устанавливает в 0 значение флага IE, при этом запрещается выполнение всех маскируемых прерываний.
- Запрещается выполнение прерываний между данной и последующей командами.
- Более подробную информацию о прерываниях вы можете найти в документации на конкретный микроконтроллер в главе “Прерывания” (“INTERRUPT FUNCTION”).
HALT - Включение режима HALT
Формат записи HALT
- Команда используется для остановки тактирования микропроцессорного ядра и перевода его в режим HALT. За счет этого общее энергопотребление системы можно уменьшить по сравнению с типовым рабочим режимом.
STOP - Включение режима STOP
Формат записи STOP
- Команда используется для остановки тактирования большинства систем микроконтроллера и перевода его в режим STOP. За счет этого ток потребления микроконтроллера становится сверхнизким и определяется только токами утечки.
