ОСНОВНЫЕ МЕТОДЫ ПРОЕКТИРОВАНИЯ МИКРОПРОЦЕССОРНЫХ УСТРОЙСТВ.

Таблица 2

Мнемоника Флаги
C AC F0 F1 TF BS DBF
ADD, ADDC + + - - - - -
DA + + - - - - -
CLR C - - - - - -
CPL C + - - - - - -
CLR F0 - - - - - -
CPL F0 - - + - - - -
CLR F1 - - - - - -
CPL F1 - - - + - - -
JTF - - - - - -
RRC + - - - - - -
RLC + - - - - - -
MOV A, PSW + + + - - + -
RETR + + + - - + -
SEL MB0, SEL MB1 - - - - - - +
SEL RB0, SEL RB1 - - - - - + -

 

Арифметические команды

В наборе команд микроконтроллера имеются следующие арифметические операции:

· сложение ADD,

· сложение с учетом флага переноса ADDC,

· инкрементирование (увеличение на 1) INC,

· декрементирование (уменьшение на 1) DEC,

· десятичная коррекция DA,

Действия производятся над целыми числами без знака. Команды сложения ADD позволяют сформировать перенос в следующий разряд. Команды сложения с учётом знака переноса позволяют выполнять многобайтное сложение. Вычитание может быть реализовано переводом одного из операндов в дополнительный код с последующим выполнением операции суммирования. Более сложные операции такие как умножение или деление могут быть реализованы только программным способом.

 

Логические команды.

Система команд микроконтроллера позволяет реализовать логические операции:

· И ( ANL ANLD),

· ИЛИ ( ORL ORLD),

· ИСКЛЮЧАЮЩЕЕ ИЛИ ( XRL).

· сброс и инвертирование всех восьми разрядов аккумулятора ( CPL A; CLR A);

· сброс и инвертирование флагов микроконтроллера ( CLR C; CLR F0; CLR F1; CPL C; CPL F0; CPL F1);

· циклический сдвиг влево и вправо с учетом переноса и без ( RR A; RRC A; RL A; RLC A);

· обмен местами старшей и младшей тетрад внутри аккумулятора ( SWAP A).

Команды пересылки данных.

Как было рассмотрено ранее, арифметические и логические команды могут быть выполнены только над содержимым регистра аккумулятора, поэтому исключительно важное значение в системе команд приобретают команды пересылки данных. С помощью этих команд можно скопировать содержимое любой ячейки памяти в регистр-аккумулятор или наоборот скопировать содержимое аккумулятора в любую ячейку памяти. Так как в микроконтроллере присутствует три независимых области памяти, то для обращения к ним введены различные команды:

· обмен данными во внутреннем ОЗУ: MOV, XCH

· обмен данными из внешней памяти данных: MOVX

· копирование данных из памяти программ: MOVP

· обмен данными параллельных портов IN, OUTL, MOVD

Примеры использования команд пересылки данных:

Любая ячейка 256- байтового блока внутреннего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 и R1 (выбранного банка рабочих регистров):

MOV A, @R0 ;Скопировать число из ячейки памяти с адресом, хранящемся в R0, в аккумулятор MOV @R1, A ;Скопировать число из аккумулятора, в ячейку памяти с адресом, хранящемся в R1

Таблицы символов (кодов), записанные в ПЗУ программы могут быть скопированы в аккумулятор с помощью команд передачи данных с косвенной адресацией:

MOVP A, @A ;Скопировать символ из текущей страницы памяти программ в аккумулятор MOVP3 A, @A ;Скопировать символ из третьей страницы памяти программ в аккумулятор

Ячейка адресного пространства 256 байт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистры R0 или R1:

MOVX A, @R0 ;Скопировать число из внешней ячейки памяти с адресом, ;хранящемся в R0, в аккумулятор MOVX @R1, A ;Скопировать число из аккумулятора, в ячейку памяти с адресом, хранящемся в R1

Содержимое аккумулятора может быть обменено с содержимым рабочих регистров выбранного банка:

XCH A, R0.

Для работы с параллельными портами используется отдельные команды пересылки данных IN и OUTL:

IN A, P0 ;Скопировать число из порта P0, в аккумулятор OUTL P1, A ;Скопировать число из аккумулятора, в порт P1

Команды ветвления и передачи управления.

Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-48 доступны следующие команды:

· безусловный переход: JMP

· Вызов и возврат из подпрограммы: CALL, RET, RETR

· проверка содержимого аккумулятора: JZ, JNZ, JMPP, JB0 ... JB7

· проверка флага переноса С: JC, JNC

· проверка сигнала на ножке T0: JT0, JNT0

· проверка сигнала на ножке T1: JT1, JNT1

· проверка сигнала на ножке INT: JNI

· Проверка состояния флагов пользователя JF0, JF1

Команды безусловных переходов и вызовов подпрограмм позволяют осуществить переход в любую точку адресного пространства памяти программ в пределах страницы 2 Кбайт. Примеры команд:

JMP Metka ;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’ CALL Podprogramma ;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

В системе команд имеются команды условных переходов. Эти команды позволяют осуществлять переход в пределах страницы 256 байт.

Примеры использования команд условного перехода:

JB5 TstNxtUsl ;Если в 6 бите аккумулятора нулевое значение,CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’JNZ A, #5, TstNxtUsl ;Если в аккумуляторе содержится нулевое значение,CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

Команды проверки содержимого аккумулятора и флага переноса C могут быть использованы для реализации проверки различных условий:

MOV A, 34 ;Если в переменной, хранящейся в ячейке внутренней памяти 34 JB7 TstNxtUsl ;число меньше нуля,CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’;---------------------------------------------------------------------------------MOV A, 34 ;Если в переменной, ADD A, -5 ;хранящейся в ячейке внутренней памяти 34JZ TstNxtUsl ;занесено число 5,CALL Podpr5 ;то вызвать подпрограмму, обозначенную меткой ‘Podpr5’;---------------------------------------------------------------------------------MOV A, 34 ;Если в переменной, ADD A, -5 ;хранящейся в ячейке внутренней памяти 34JNС TstNxtUsl ;занесено число, меньшее 5,CALL PodprLT5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprLT5’;---------------------------------------------------------------------------------MOV A, 34 ;Если в переменной, ADD A, -6 ;хранящейся в ячейке внутренней памяти 34JC TstNxtUsl ;занесено число, большее 5,CALL PodprGT5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprGT5’;---------------------------------------------------------------------------------MOV A, 34 ;Если в переменной, ADD A, -5 ;хранящейся в ячейке внутренней памяти 34JC TstNxtUsl ;занесено число, большее или равное 5,CALL PodprGE5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprGE5’;---------------------------------------------------------------------------------MOV A, 34 ;Если в переменной, ADD A, -6 ;хранящейся в ячейке внутренней памяти 34 JNC TstNxtUsl ;занесено число, меньшее или равное 5,CALL PodprLE5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprLE5’

Косвенный переход JMPP @A в системе команд микроконтроллера обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентное оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла). Пример реализации команды выбора варианта:

ORG 256 ;Разместить команды переходов по границе страницыJMP Case0 ;Перейти к выполнению кода по числу 0 JMP Case1 ;Перейти к выполнению кода по числу 1 JMP EndCase ;Это число в ячейке 33 в список разрешённых не входит JMP EndCase ;Это число в ячейке 33 в список разрешённых не входит JMP Case4 ;Перейти к выполнению кода по числу 4 BeginOpCase: ;Сюда нужно перейти командой JMP BeginOpCase MOV A, 33 ;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу CLR C ;Осуществить арифметический сдвиг аккумулятора вправо RLC A ;(умножить на 2) т.к. команды переходов занимают два байта JMPP @A ;Перейти к выполнению заданного в 25 ячейке кодаEndCase:

Команды управления режимами работы микроконтроллера.

Команды управления микроконтроллером позволяют:

· запускать и останавливать таймер/счётчик ( STRT CNT STRT T, STOP TCNT),

· разрешать и запрещать прерывания ( EN I, EN TCNTI, DIS I, DIS TCNTI),

· выбирать рабочий банк регистров ( SEL RB0, SEL RB1),

· выбирать страницы памяти программ ( SEL MB0, SEL MB1),

· разрешать выдачу синхросигнала на ножке T0 ( ENT0 CLC).

Способы адресации операндов.

Наибольшее количество видов адресации используется в командах пересылки данных. При определении способа адресации операндов в команде необходимо учитывать, что адресация для каждого операнда команды своя. В общем случае адресация определяется для каждого операнда отдельно.

Неявная адресация При неявной адресации регистр источник или регистр приёмник подразумевается в самом коде операции. Например:

RR A ;сдвиг содержимого аккумулятора вправо DA A ;десятичная коррекция аккумулятора

Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров. Номер регистра записывается в трех младших битах команды. Например:

MOV A, R7 ;Во втором операнде использована регистровая адресация (в первом операнде неявная адресация)

Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей используются регистры R0, R1 выбранного банка регистров. Примеры использования косвенно-регистровой адресации:

MOV A, @R0 ;Косвенно-регистровая адресация использована во втором операнде MOV @R1, A ;Косвенно-регистровая адресация использована в первом операнде

Косвенно - регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров- указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. Например:

MOVX A, @R0 ;Косвенно-регистровая адресация использована во втором операнде MOVX @R1, A ;Косвенно-регистровая адресация использована в первом операнде

Косвенно- регистровая адресация по содержимому аккумулятора А упрощает просмотр таблиц, записанных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому содержимым аккумулятора А, например:

MOVP3 A, @A

Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде, например:

MOV A, #11h ;помещает в аккумулятор число 11h MOV R5, #48 ;помещает в регистр R5 число 48

Описание машинных команд.

ADD A, <байт-источник> - сложение.

Описание: складывает содержимое аккумулятора А с содержимым байта- источника. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. Для команды сложения разрешены следующие режимы адресации байта - источника:

· регистровая;

Пример:ADD A, R7

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 1 0 1 r r r

· косвенно-регистровая;

Пример:ADD A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + ((Ri)) , i=0,1

Машинный код:

0 1 1 0 0 0 0 i

· непосредственная.

Пример:ADD A, #38h

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (A) + (date 8)

Машинный код:

0 0 0 0 0 0 1 1i i i i i i i i

ADDC A, <байт-источник> - сложение с учетом переноса.

Описание: складывает содержимое аккумулятора А с содержимым байта-источника, к получившемуся результату прибавляется значение флага переноса. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. Для команды сложения разрешены следующие режимы адресации байта - источника:

· регистровая;

Пример:ADDC A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + (C) + (Rn) , n=0, : ,7

Машинный код:

0 1 1 1 1 r r r

· косвенно-регистровая;

Пример:ADDC A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + (C) + ((Ri)) , i=0,1

Машинный код:

0 1 1 1 0 0 0 i

· непосредственная.

Пример:ADDC A, #100

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (A) + (C) + (date 8)

Машинный код:

0 0 0 1 0 0 1 1i i i i i i i i

ANL <байт приемник>,<байт источник> - команда "логическое И" для байтовых переменных.

Описание: выполняет операцию побитового "логического И" над указанными переменными и помещает результат в байт приемник. Команда не воздействует на флаги.

Для команды ANL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:

· регистровая;

Пример:ANL A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) & (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 0 1 1 r r r

· косвенно-регистровая;

Пример:ANL A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) & ((Ri)) , i=0,1

Машинный код:

0 1 0 1 0 0 0 i

· непосредственная.

Пример:ANL A, #100

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (A) & (date 8)

Машинный код:

0 1 0 1 0 0 1 1i i i i i i i i

Для команды ANL возможна работа с портами и шиной данный в качестве приёмника информации. При этом источник информации использует непосредственную адресацию:

Пример:ANL BUS, #00010010B

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(BUS) = (BUS) & (direct)

Машинный код:

1 0 0 1 1 0 0 0d d d d d d d d

Пример:P1, #10000000b

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Pp) = (Pp) & (date 8), pp=1,2

Машинный код:

1 0 0 1 1 0 p pd d d d d d d d

Примечание:при выполнении команды ANL над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!

ANLD P, A - "логическое И" порта внешней микросхемы расширителя портов и аккумулятора A.

Описание: выполняет операцию побитового "логического И" над содержимым порта внешней микросхемы расширителя портов и аккумулятора. Результат помещается в порт. Команда не воздействует на флаги. При этом как источник, так и приемник информации использует неявную адресацию:

Пример:ANLD P6, A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Pp) = (Pp) & (A), pp=4,5,6,7

Машинный код:

1 0 0 1 1 1 p p

CALL <addr 11> - вызов подпрограммы.

Описание: вызывает подпрограмму, размещенную по указанному адресу <addr 11>. Команда увеличивает содержимое счетчика команд на 2 и затем помещает полученный результат в стек. Кроме программного счетчика в стеке сохраняется содержимое регистра флагов PSW. После это содержимое указателя стека SP увеличивается на 1. Команда не воздействует на флаги.

Пример:CALL 311h

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

((SP)) = (PC), (PSW4-7)

(SP) = (SP) + 1

(PC10-0) = адрес подпрограммы (метки)

Машинный код:

a10 a9 a8 1 0 1 0 0a7 a6 a5 a4 a3 a2 a1 a0

CLR A - сброс аккумулятора

Описание: сбрасывает (записывает '0' во все биты аккумулятора). Команда не изменяет содержимое флагов. Команда использует неявную адресацию:

Пример:CLR A ;Записывает в аккумулятор число 00h

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = 0

Машинный код:

0 0 1 0 0 1 1 1

CLR C- сбрасывает флаг переноса в нулевое значение.

Описание: сбрасывает (записывает '0') в флаг переноса. Команда использует неявную адресацию:

Пример:CLR C ;Записывает во флаг переноса '0'

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(C) = 0

Машинный код:

1 0 0 1 0 1 1 1

CLR F0- сбрасывает флаг пользователя F0 в нулевое значение.

Описание: сбрасывает (записывает '0') в флаг пользователя F0. Команда использует неявную адресацию:

Пример:CLR F0 ;Записывает во флаг пользователя F0 '0'

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F0) = 0

Машинный код:

1 0 0 0 0 1 0 1

CLR F1- сбрасывает флаг пользователя F1 в нулевое значение.

Описание: сбрасывает (записывает '0') в флаг пользователя F1. Команда использует неявную адресацию:

Пример:CLR F1 ;Записывает во флаг пользователя F0 '0'

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F1) = 0

Машинный код:

1 0 1 0 0 1 0 1

CPL A - каждый бит аккумулятора инвертируется.

Описание: каждый бит аккумулятора инвертируется, т.е. если в каком-либо из восьми бит аккумулятора записана '1', то в этот бит записывается '0' и наоборот.

Пример:CPL A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = not(A)

Машинный код:

0 0 1 1 0 1 1 1

CPL C - инвертируется флаг переноса 'C'.

Описание: флаг переноса 'C' инвертируется, т.е. если флаг переноса 'C' содержит '1', то в него записывается '0' и наоборот. Команда использует неявную адресацию:

Пример:CPL C

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(C) = not(C)

Машинный код:

1 0 1 0 0 1 1 1

CPL F0 - инвертируется флаг пользователя F0 в нулевое значение.

Описание: флаг пользователя 'F0' инвертируется, т.е. если флаг пользователя 'F0' содержит '1', то в него записывается '0' и наоборот. Команда использует неявную адресацию:

Пример: CLR F0 ;Инвертирует флаг пользователя F0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F0) = 0

Машинный код:

1 0 0 0 0 1 0 1

CPL F1 - инвертируется флаг пользователя F1 в нулевое значение.

Описание: флаг пользователя 'F1' инвертируется, т.е. если флаг пользователя 'F1' содержит '1', то в него записывается '0' и наоборот. Команда использует неявную адресацию:

Пример: CLR F1 ;Инвертирует флаг пользователя F0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F1) = 0

Машинный код:

1 0 1 0 0 1 0 1

DA A- десятичная коррекция аккумулятора при сложении двоично-десятичных чисел.

Описание: команда десятичной коррекции позволяет вести сложение чисел, представленных в упакованном двоично-десятичном коде. Команда применяется после инструкций ADD или ADDC. Инструкции (команды) ADD или ADDCпозволяют суммировать сразу две тетрады, расположенные в одном байте.

Если биты аккумулятора с 0 по 3 содержат число большее 9 (xxxx1010:xxxx1111) или флаг вспомогательного переноса AC содержит '1', то к аккумулятору прибавляется число 6 для того, чтобы получить правильную двоично-десятичную цифру в младшей тетраде.

Если старшие биты аккумулятора (с 4 по 7) содержат число большее 9 (1010xxxx :1111xxxx) или флаг переноса C содержит '1', то к аккумулятору прибавляется число 60h для того, чтобы получить правильную двоично-десятичную цифру в старшей тетраде.

Если в результате операции DA A возникнет перенос, то флаг переноса C будет установлен в 1. Единичный флаг переноса после операции DA A означает, что результат суммирования больше 100 и этим можно воспользоваться для суммирования многоразрядных двоично-десятичных чисел. Команда десятичной коррекции не воздействует на флаг переполнения OV.

Примечание: команда DA A не может преобразовать двоичное число из аккумулятора в двоично-десятичный вид или правильно скорректировать двоично-десятичное вычитание.

Пример: DA A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

IF [[(A3-0) > 9] or [(AC) = 1]] THEN (A3-0) = (A3-0) + 6

AND

IF [[(A7-4) > 9] or[(C) = 1]] THEN (A7-4) = (A7-4) + 6

Машинный код:

0 1 0 1 0 1 1 1

DEC <байт> - производит вычитание 1 из указанного операнда.

Описание: операнд уменьшается на 1. Если первоначально в ячейке было записано значение 00h, то в нее заносится значение 0FFh. Команда не воздействует на флаги.

Для команды DEC разрешены следующие режимы адресации:

· неявная.

Пример:DEC A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) - 1

Машинный код:

0 0 0 0 0 1 1 1

· регистровая;

Пример:DEC R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(Rn) = (Rn) - 1, n=0,1,2,3,4,5,6,7

Машинный код:

1 1 0 0 1 r r r

DIS I - запрет внешнего прерывания.

Описание: запрещает прерывание выполнения программы по сигналу низкого уровня на внешней ножке INT.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Запретить прерывания от внешней ножки INT

Машинный код:

0 0 0 1 0 1 0 1

DIS TCNTI - запрет прерывания от таймера/счётчика.

Описание: запрещает прерывание выполнения программы по переполнению таймера/счётчика.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Запретить прерывания по переполнению таймера/счётчика

Машинный код:

0 0 1 1 0 1 0 1

DJNZ Rn,<адрес>- вычитание 1 из указанной ячейки и переход, если результат не равен 0.

Описание: вычитание 1 из указанной во втором байте команды ячейки памяти и переход к вычисляемому по второму байту команды адресу, если результат вычитания не равен 0. Если первоначально в ячейке памяти содержится '0', то в результате выполнения операции туда будет записано число '0FFH'. Команда не воздействует на флаги. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Для команды DJNZ используется регистровая адресация:

Пример: LABEL1: DJNZ R3 ,LABEL1;

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Rn) = (Rn) - 1, n=0,1,2,3,4,5,6,7

IF (Rn) < > 0, THEN (PC0..7) = Address

Машинный код:

1 1 1 0 1 r r rA d d r e s s

EN I - разрешение внешнего прерывания.

Описание: разрешает прерывание выполнения программы по сигналу низкого уровня на внешней ножке INT.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Разрешить прерывания от внешней ножки INT

Машинный код:

0 0 0 0 0 1 0 1

EN TCNTI - разрешение прерываний от таймера/счётчика.

Описание:разрешает прерывание выполнения программы по переполнению таймера/счётчика.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Разрешить прерывания от таймера/счётчика

Машинный код:

0 0 1 0 0 1 0 1

ENT0 CLK - разрешение выдачи синхросигнала на вывод T0.

Описание:разрешает выдачу синхросигнала на вывод микросхемы T0.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Разрешить выдачу синхросигнала на вывод T0

Машинный код:

0 1 1 1 0 1 0 1

IN Pp- пересылка данных из порта в аккумулятор.

Описание:копирует данные на выводах микросхемы в аккумулятор. Команда не воздействует на флаги и использует неявную адресацию.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (Pp), p=1,2

Машинный код:

0 0 0 0 1 0 p p

INC <байт> - производит прибавление 1 к указанному операнду.

Описание: ячейка памяти адрес, которой указан во втором байте команды увеличивается на 1. Если первоначально в ячейке было записано значение 0FFh, то в нее заносится значение 00h. Команда не воздействует на флаги.

Для команды INC разрешены следующие режимы адресации байта - источника:

· неявная.

Пример:INC A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + 1

Машинный код:

0 0 0 1 0 1 1 1

· регистровая;

Пример:INC R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(Rn) = (Rn) + 1, n=0,1,2,3,4,5,6,7

Машинный код:

0 0 0 1 1 r r r

· косвенно-регистровая;

Пример:INC @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

((Ri)) = ((Ri)) + 1, i=0,1

Машинный код:

0 0 0 1 0 0 0 i

JB0 <адрес> - переход если нулевой бит аккумулятора установлен.

Описание: Если нулевой бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример:JB0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.0) = 1 THEN (PC0..7) = Address

Машинный код:

0 0 0 1 0 0 1 0A d d r e s s

JB1 <адрес>- переход если первый бит аккумулятора установлен.

Описание: Если первый бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример:JB1 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.1) = 1 THEN (PC0..7) = Address

Машинный код:

0 0 1 1 0 0 1 0A d d r e s s

JB2 <адрес> - переход если второй бит аккумулятора установлен.

Описание:Если второй бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JB2 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.2) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 0 1 0 0 1 0A d d r e s s

JB3 <адрес> - переход если третий бит аккумулятора установлен.

Описание:Если третий бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JB3 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.3) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 1 1 0 0 1 0A d d r e s s

JB4 <адрес> - переход если четвёртый бит аккумулятора установлен.

Описание:Если четвёртый бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример:JB4 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.4) = 1 THEN (PC0..7) = Address

Машинный код:

1 0 0 1 0 0 1 0A d d r e s s

JB5 <адрес>- переход если пятый бит аккумулятора установлен.

Описание:Если пятый бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JB5 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.5) = 1 THEN (PC0..7) = Address

Машинный код:

1 0 1 1 0 0 1 0A d d r e s s

JB6 <адрес> - переход если шестой бит аккумулятора установлен.

Описание:Если шестой бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JB6 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.6) = 1 THEN (PC0..7) = Address

Машинный код:

1 1 0 1 0 0 1 0A d d r e s s

JB7 <адрес> - переход если седьмой бит аккумулятора установлен.

Описание:Если седьмой бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JB7 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.7) = 1 THEN (PC0..7) = Address

Машинный код:

1 1 1 1 0 0 1 0A d d r e s s

JC <адрес> - переход, если бит переноса установлен.

Описание: Если бит переноса равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример:JС LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (С) = 1 THEN (PC0..7) = Address

Машинный код:

1 1 1 1 0 1 1 0A d d r e s s

JF0 <адрес>- переход, если бит переноса установлен.

Описание:Если флаг пользователя F0 равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JF0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (F0) = 1 THEN (PC0..7) = Address

Машинный код:

1 0 1 1 0 1 1 0A d d r e s s

JF1 <адрес>- переход, если бит переноса установлен.

Описание:Если флаг пользователя F1 равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JF0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (F1) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 1 1 0 1 1 0A d d r e s s

JMP<addr 11> - переход на метку.

Описание:осуществляет переход на метку, размещенную по указанному адресу <addr 11>. Команда не воздействует на флаги.

Пример:JMP 311h

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC10-0) = адрес метки

Машинный код:

a10 a9 a8 0 0 1 0 0a7 a6 a5 a4 a3 a2 a1 a0

JMPP @A - косвенный переход в текущей странице.

Описание:осуществляет переход на адрес, содержащийся в ячейке памяти программ на которую указывает содержимое аккумулятора. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с содержимым аккумулятора. Таким образом осуществляется переход в пределах страницы размером в 256 байт. Команда не воздействует на флаги и не изменяет содержимое аккумулятора.

Пример:JMPP @A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC7-0) = ((A))

Машинный код:

a10 a9 a8 0 0 1 0 0a7 a6 a5 a4 a3 a2 a1 a0

JNC <адрес> - переход, если бит переноса сброшен.

Описание: Если бит переноса равен нулю, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JNС LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (С) = 0 THEN (PC0..7) = Address

Машинный код:

1 1 1 0 0 1 1 0A d d r e s s

Описание машинных команд (продолжение).

JNI <адрес> - переход, если сигнал на ножке запроса прерывания равен нулю.

Описание: Если на ножке запроса прерывания сигнал равен нулю, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JNI LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (INT) = 0 THEN (PC0..7) = Address

Машинный код:

1 0 0 0 0 1 1 0A d d r e s s

JNT0 <адрес> - переход, если сигнал ножке микроконтроллера T0 равен нулю.

Описание: Если на ножке микроконтроллера T0 сигнал равен нулю, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JNT0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T0) = 0 THEN (PC0..7) = Address

Машинный код:

0 0 1 0 0 1 1 0A d d r e s s

JNT1 <адрес> - переход, если бит переноса сброшен.

Описание: Если на ножке микроконтроллера T1 сигнал равен нулю, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги.

Пример: JNT1 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T1) = 0 THEN (PC0..7) = Address

Машинный код:

0 1 0 0 0 1 1 0A d d r e s s

JNZ <адрес> - переход, если содержимое аккумулятора не равно нулю.

Описание: Если любой бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое аккумулятора.

Пример:JNZ LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (A) <> 0 THEN (PC0..7) = Address

Машинный код:

1 0 0 1 0 1 1 0A d d r e s s

JTF <адрес> - переход, если содержимое аккумулятора не равно нулю.

Описание: Если флаг переполнения таймера установлен, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги.

Пример: JTF LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (A) <> 0 THEN (PC0..7) = Address

Машинный код:

0 0 0 1 0 1 1 0A d d r e s s

JT0 <адрес> - переход, если бит переноса сброшен.

Описание: Если на ножке микроконтроллера T0 сигнал равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JT0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T0) = 1 THEN (PC0..7) = Address

Машинный код:

0 0 1 1 0 1 1 0A d d r e s s

JT1 <адрес> - переход, если бит переноса сброшен.

Описание: Если на ножке микроконтроллера T1 сигнал равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JT1 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T1) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 0 1 0 1 1 0A d d r e s s

JZ <адрес> - переход, если содержимое аккумулятора не равно нулю.

Описание: Если все биты аккумулятора равны нулю, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое аккумулятора.

Пример:JZ LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (A) = 0 THEN (PC0..7) = Address

Машинный код:

1 1 0 0 0 1 1 0A d d r e s s

MOV <приемник>,<источник> - скопировать байтовую переменную.

Описание: переменная, указанная во втором операнде, копируется в ячейку, указываемую первым операндом. Байт источник не изменяется. Другие регистры и флаги не изменяются. Для каждого операнда используется свой вид адресации.

Команда допускает следующие виды адресации:

первый операнд - неявная, второй операнд - неявная адресация;

Пример: MOV A, PSW

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (PSW)

Машинный код:

1 1 0 0 0 1 1 1

Пример: MOV A, T

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (T)

Машинный код:

0 1 0 0 0 0 1 0

Пример: MOV PSW, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(PSW) = (A)

Машинный код:

1 1 0 1 0 1 1 1

Пример: MOV T, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(T) = (A)

Машинный код:

0 1 1 0 0 0 1 0

первый операнд - неявная, второй операнд - регистровая адресация;

Пример: MOV A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

1 1 1 1 1 r r r

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример: MOV A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = ((Ri)) , i=0,1

Машинный код:

1 1 1 1 0 0 0 i

первый операнд - неявная, второй операнд - непосредственная адресация;

Пример: MOV A, #38h

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (data 8)

Машинный код:

0 0 1 0 0 0 1 1i i i i i i i i

первый операнд - регистровая, второй операнд - неявная адресация;

Пример: MOV R3, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(Rn) = (A) , n=0,1,2,3,4,5,6,7

Машинный код:

1 0 1 0 1 r r r

первый операнд - неявная, второй операнд - непосредственная адресация;

Пример: MOV R3, #38h

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(Rn) = (data 8) , n=0,1,2,3,4,5,6,7

Машинный код:

1 0 1 1 1 r r ri i i i i i i i

первый операнд - косвенно-регистровая, второй операнд - неявная адресация;

Пример: MOV @R0, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

((Ri)) = (A), i=0,1

Машинный код:

1 0 1 0 0 0 0 i

первый операнд - косвенно-регистровая, второй операнд - непосредственная адресация;

Пример: MOV @R0, #80

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

((Rn)) = (data 8) , n=0,1,2,3,4,5,6,7

Машинный код:

1 0 1 1 0 0 0 ii i i i i i i i

MOVD A,<источник> - считать порт микросхемы расширителя портов.

Описание: содержимое порта расширителя портов копируется в младшую тетраду аккумулятора. Старшая тетрада обнуляется. Команда не воздействует на флаги. В обоих операндах используется неявная адресация.

Пример: MOVD A, P4

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (Pp), p=4,5,6,7

Машинный код:

0 0 0 0 1 1 p p

MOVP A, @A - переслать байт из текущей страницы памяти программ в аккумулятор.

Описание: загружает аккумулятор константой из памяти программ. Адрес считываемого байта задаётся исходным содержимым аккумулятора. Команда не воздействует на флаги.

Пример: MOVP A, @A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC0..PC7) = (A)

(A) = ((PC))

Машинный код:

1 0 1 0 0 0 1 1

MOVP3 A, @A - переслать байт из третьей страницы памяти программ в аккумулятор.

Описание: загружает аккумулятор константой из памяти программ. Адрес считываемого байта задаётся исходным содержимым аккумулятора. Команда не воздействует на флаги.

Пример: MOVP3 A, @A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC0..PC7) = (A)

(PC8..PC11) = 0011

(A) = ((PC))

Машинный код:

1 1 1 0 0 0 1 1

MOVX <приемник>,<источник> - переслать байтовую переменную во внешнюю память (из внешней памяти)

Описание: пересылает данные между аккумулятором и байтом внешней памяти.

В первом случае регистр R0 или R1 текущего банка регистров обеспечивает 8- битный адрес, который мультиплексируется с данными на выводах порта P0.

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример: MOVX A, @R1 ;Скопировать данные из внешней памяти данных в аккумулятор

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 1

(A) = ((Ri)), i=0,1

Машинный код:

1 0 0 0 0 0 0 i

первый операнд - косвенно-регистровая, второй операнд - неявная адресация;

Пример: MOVX @R0, A ;Скопировать данные из аккумулятора во внешнюю память

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 1

((Ri)) = (A), i=0,1

Машинный код:

1 0 0 1 0 0 0 i

NOP - нет операции

Описание: Кроме программного счетчика не изменяет ни одного регистра, на флаги не воздействует.

Пример: NOP

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Машинный код:

0 0 0 0 0 0 0 0

ORL <приемник>,<источник> - "логическое ИЛИ" для байтовых переменных

Описание: выполняет операцию побитового "логического ИЛИ" между указанными переменными. Результат сохраняется в приемнике. Команда не воздействует на флаги.

Для команды ORL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:

первый операнд - неявная, второй операнд - регистровая адресация;

Пример:ORL A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) V (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 0 0 1 r r r

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример:ORL A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) V ((Ri)), i=0,1

Машинный код:

0 1 0 0 0 0 0 i

первый операнд - неявная, второй операнд - непосредственная адресация;

Пример:ORL A, #100

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(A) = (A) V (date 8)

Машинный код:

0 1 0 0 0 0 1 1i i i i i i i i

Пример:ORL BUS, #100

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(BUS) = (BUS) V (date 8)

Машинный код:

1 0 0 1 1 0 0 0i i i i i i i i

Пример:ORL P1, #10010000b

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Pp) = (Pp) V (date 8), p=1,2

Машинный код