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

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. За счет этого ток потребления микроконтроллера становится сверхнизким и определяется только токами утечки.

Соседние файлы в папке методички к 78К0