Курс лекций. - Микропроцессоры

вызывает подпрограмму, размещенную по указанному


Дата последнего обновления файла 07.06.2005 Описание машинных команд.
ACALL <addr 11> - абсолютный вызов подпрограммы.
Описание: вызывает подпрограмму, размещенную по указанному адресу <addr 11>. Команда увеличивает содержимое счетчика команд на 2 и затем помещает полученный результат в стек (младший байт первым). После это содержимое указателя стека SP увеличивается на 2. Т.к. в команде используется 11-разрядный адрес, полученный соединением пяти старших бит счетчика команд и второго байта команды, то подпрограмма должна начинаться в пределах той же 2K-байтной страницы. Команда не воздействует на флаги.
Количество байт: 2
Количество циклов: 2
Действие команды:
(PC) = (PC) + 2
(SP) = (SP) + 1
((SP)) = (PC7-0)
(SP) = (SP) + 1
((SP)) = (PC15-8)
(PC10-0) = адрес подпрограммы (метки)


Машинный код:
a10 a9 a8 1 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 Пример:
адрес команда исходный текст 1000 7111 ACALL 311h Действие команды:
до команды после команды PC=1000 PC=0311 *SP=35 *SP=1002 ADD A, <байт-источник> - сложение.
Описание: складывает содержимое аккумулятора А с содержимым байта- источника. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного.
Для команды сложения разрешены следующие режимы адресации:
1) Первый операнд - неявная, второй операнд - регистровая;
Количество байт: 1
Количество циклов: 1
Действие команды:
(PC) = (PC) + 1
(A) = (A) + (Rn) , n=0,1,2,3,4,5,6,7
Машинный код:
0 0 1 0 1 r r r Пример:
адрес команда исходный текст 0000 2F ADD A, R7 Действие команды:
до команды после команды PC=0000 PC=0001 A=35 A=7A R7=46 R7=46 C=0 C=0 2) Первый операнд - неявная, второй операнд - косвенно-регистровая;
Количество байт: 1
Количество циклов: 1


Дата последнего обновления файла 07.06.2005 Описание машинных команд (продолжение).
INC <байт> - производит прибавление 1 к указанному операнду.
Описание: ячейка памяти адрес, которой указан во втором байте команды увеличивается на 1. Если первоначально в ячейке было записано значение 0FFh, то в нее заносится значение 00h. Команда не воздействует на флаги.
Примечание: при выполнении команды INC над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!
Для команды INC разрешены следующие режимы адресации байта - источника:
  • непосредственная.
Пример: INC A
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = (A) + 1
Машинный код:
0 0 0 0 0 1 0 0
  • регистровая;
Пример: INC R3
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(Rn) = (Rn) + 1, n=0,1,2,3,4,5,6,7
Машинный код:
0 0 0 0 1 r r r
  • косвенно-регистровая;
Пример: INC @R0
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
((Ri)) = ((Ri)) + 1, i=0,1
Машинный код:
0 0 0 0 0 1 1 i
  • прямая;
Пример: INC 30h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(direct) = (direct) + 1
Машинный код:
0 0 0 0 0 1 0 1
d d d d d d d d
INC DPTR - увеличивает на 1 содержимое указателя данных.
Описание: увеличивает на 1 содержимое 16-разрядного указателя данных. Если первоначально в младшем байте DPTR (ячейка DPL) было записано значение 0FFh, то в него заносится значение 00h и увеличивается на 1 содержимое старшего байта DPTR (ячейка DPH). Команда не воздействует на флаги.
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
(DPTR) = (DPTR) + 1
Машинный код:
0 1 0 1 0 0 1 1
JB <bit>,<rel8> - переход если бит установлен.
Описание: Если указанный во втором байте команды бит равен единице, то производится переход к вычисляемому по третьему байту команды адресу.


Дата последнего обновления файла 07.06.2005 Описание машинных команд (продолжение).
MUL AB - умножение.
Описание: перемножает целые восьмибитовые беззнаковые числа, хранящиеся в аккумуляторе и регистре В. Старший байт 16-битового произведения помещается в регистр В, а младший байт - в регистр А.
Пример: MUL AB
Количество байт: 1
Количество циклов: 4
Действие команды: (PC) = (PC) + 1
(A) = Low((A)*(B))
(B) = High(A)*(B)
Машинный код:
1 0 1 0 0 1 0 0
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 1 1 i
  • прямая;
Пример: ORL A, 30h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (A) V (direct)
Машинный код:
0 1 0 0 0 1 0 1
d d d d d d d d
  • непосредственная.
Пример: ORL A, #100
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (A) V (date 8)
Машинный код:
0 1 0 0 0 1 0 0
i i i i i i i i
Для команды ORL с произвольным адресом ячейки внутренней памяти данных в качестве байта назначения разрешены следующие режимы адресации байта - источника:


Действие команды:
(PC) = (PC) + 1
(A) = (A) + ((Ri)) , i=0,1
Машинный код:
0 0 1 0 0 1 1 i Пример:
адрес команда исходный текст 0010 26 ADD A, @R0 Действие команды:
до команды после команды PC=0010 PC=0011 R0=15 R0=15 A=95 A=16 *15=81 *15=81 C=0 C=1 3) Первый операнд - неявная, второй операнд - прямая;
Количество байт: 2
Количество циклов: 1
Действие команды:
(PC) = (PC) + 2
(A) = (A) + (direct)
Машинный код:
0 0 1 0 0 1 0 1 d d d d d d d d Пример:
адрес команда исходный текст 0012 2564 ADD A, 100 Действие команды:
до команды после команды PC=0012 PC=0014 A=95 A=96 *100=01 *100=81 C=1 C=0 4) Первый операнд - неявная, второй операнд - непосредственная.
Пример: ADD A, #38h
Количество байт: 2
Количество циклов: 1
Действие команды:
(PC) = (PC) + 2
(A) = (A) + (date 8)
Машинный код:
0 0 1 0 0 1 0 0 i i i i i i i i Пример:
адрес команда исходный текст 0014 2564 ADD A, #38h Действие команды:
до команды после команды PC=0014 PC=0016 A=95 A=CD C=1 C=0 ADDC A, <байт-источник> - сложение с учетом переноса.
Описание: складывает содержимое аккумулятора А с содержимым байта-источника, к получившемуся результату прибавляется значение флага переноса. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. Для команды сложения разрешены следующие режимы адресации байта - источника:
  • регистровая;
Пример: ADDC A, R3
Количество байт: 1
Количество циклов: 1
Действие команды:
(PC) = (PC) + 1
(A) = (A) + (C) + (Rn) , n=0, : ,7
Машинный код: 0 0 1 1 1 r r r
  • косвенно-регистровая;
Пример: ADDC A, @R0
Количество байт: 1
Количество циклов: 1
Действие команды:
(PC) = (PC) + 1
(A) = (A) + (C) + ((Ri)) , i=0,1
Машинный код: 0 0 1 1 0 1 1 i


  • прямая;
Пример: ADDC A, 30h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (A) + (C) + (direct)
Машинный код:
0 0 1 1 0 1 0 1
d d d d d d d d
  • непосредственная.
Пример: ADDC A, #100
Количество байт: 2
Количество циклов: 1
Действие команды:
(PC) = (PC) + 2
(A) = (A) + (C) + (date 8)
Машинный код:
0 0 1 1 0 1 0 0
i i i i i i i i
AJMP <addr 11> - абсолютный переход в пределах 2K-байтной страницы.
Описание: передает управление команде, размещенной по указанному адресу <addr 11>. Команда увеличивает содержимое счетчика команд на 2 и затем заменяет младший байт счетчика команд на содержимое второго байта команды. Три младших бита старшего байта заменяются тремя старшими битами первого байта команды. Т.к. в команде используется 11- разрядный адрес, то адрес перехода должен начинаться в пределах той же 2K-байтной страницы памяти программ.
Пример: AJMP 1024
Количество байт: 2
Количество циклов: 2
Действие команды:
(PC) = (PC) + 2
(PC10-0) = адрес метки
Машинный код:
a10 a9 a8 0 0 0 0 1
a7 a6 a5 a4 a3 a2 a1 a0
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 1 1 i
  • прямая;
Пример: ANL A, 30h
Количество байт: 2
Количество циклов: 1
Действие команды:
(PC) = (PC) + 2


(A) = (A) & (direct)
Машинный код:
0 1 0 1 0 1 0 1
d d d d d d d d
  • непосредственная.
Пример: ANL A, #100
Количество байт: 2
Количество циклов: 1
Действие команды:
(PC) = (PC) + 2
(A) = (A) & (date 8)
Машинный код:
0 1 0 1 0 1 0 0
i i i i i i i i
Для команды ANL с произвольным адресом ячейки внутренней памяти данных в качестве байта назначения разрешены следующие режимы адресации байта - источника:
  • прямая;
Пример: ANL 30h,A
Количество байт: 2
Количество циклов: 1
Действие команды:
(PC) = (PC) + 2
(direct) = (A) & (direct)
Машинный код:
0 1 0 1 0 0 1 0
d d d d d d d d
  • непосредственная.
Пример: ANL direct, #100
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(direct) = (A) & (date 8)
Машинный код:
0 1 0 1 0 0 1 1
d d d d d d d d
i i i i i i i i
Примечание: при выполнении команды ANL над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!
ANL C,<бит источника> - "логическое И" битовой переменной и флага переноса C.
Описание: Если бит источника равен 0, то происходит сброс флага переноса, в противном случае флаг переноса не изменяет текущего значения. На остальные флаги команда не воздействует.
  • прямая;
Пример: ANL С, 20h
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(C) = (C) & (bit)
Машинный код:
0 1 0 1 0 0 1 0
b b b b b b b b
Знак '/' перед операндом в языке ассемблера указывает на то, что в качестве значения используется логическое отрицание адресуемого бита, при этом сам бит источника не изменяется.
CJNE <байт назначения>,<байт источника>,<смещение> - сравнение и переход, если не равно.
Описание: сравнивает значения первых двух операндов и выполняет переход, если операнды не равны. Если значение байта назначения без учета знака меньше байта источника без учета знака, то флаг переноса C устанавливается в '1', иначе сбрасывается в '0'.


Ни один из операндов после выполнения команды не изменяется. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде.
Первые два операнда допускают четыре вида адресации:
  1. байт назначения - аккумулятор
  • прямая;
Пример: CJNE A, 30h, 15; direct=30h, rel=15
Количество байт: 3
Количество циклов: 2
Действие команды:
(PC) = (PC) + 3
IF (A) < > (direct) THEN
(PC) = (PC) + rel
IF (A) < (direct) THEN
(C) = 1
ELSE
(C) = 0
Машинный код:
1 0 1 1 0 1 0 1
d d d d d d d d
R e l A d r e s
  • непосредственная.
Пример: CJNE A, #100, -78; data=100, rel=-78
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
IF (A) < > data THEN
(PC) = (PC) + rel
IF (A) < data THEN
(C) = 1
ELSE
(C) = 0
Машинный код:
1 0 1 1 0 1 0 0
i i i i i i i i
R e l A d r e s
  1. байт назначения - ячейка ОЗУ с косвенно-регистровой или регистровой адресацией
  • непосредственная к регистровой
Пример: CJNE R5, #100, 78; Rn=R5 data=100, rel=78
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
IF (Rn) < > data THEN
(PC) = (PC) + rel
IF (Rn) < data THEN
(C) = 1
ELSE
(C) = 0
Машинный код:
1 0 1 1 1 r r r
i i i i i i i i
R e l A d r e s
  • непосредственная к косвенно - регистровой
Пример: CJNE @R0, #100, 78; Ri=R0 data=100, rel=78
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
IF ((Ri)) < > data, i=0,1 THEN
(PC) = (PC) + rel
IF ((Ri)) < data, i=0,1 THEN
(C) = 1
ELSE
(C) = 0
Машинный код:
1 0 1 1 0 1 1 i
i i i i i i i i
R e l A d r e s
CLR A - сброс аккумулятора
Описание: сбрасывает (записывает '0' во все биты аккумулятора).


Команда не изменяет содержимое флагов.
Пример: CLR A      ;Записывает в аккумулятор число 00h
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = 0
Машинный код:
1 1 1 0 0 1 0 0
CLR <bit> - сбрасывает указанный бит в нуль.
Описание: сбрасывает (записывает '0') в указанный во втором байте команды бит. Команда не изменяет содержимое флагов.
Пример: CLR C ;Записывает во флаг переноса '0'
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(C) = 0
Машинный код:
1 1 0 0 0 0 1 1
  • прямая битовая адресация;
Пример: CLR P1.2       ;Записывает во второй бит порта 1 '0'
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(bit) = 0
Машинный код:
1 1 0 0 0 0 1 0
b b b b b b b b
CPL A - каждый бит аккумулятора инвертируется.
Описание: каждый бит аккумулятора инвертируется, т.е. если в каком-либо из восьми бит аккумулятора записана '1', то в этот бит записывается '0' и наоборот.
Пример: CPL A
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = not(A)
Машинный код: 1 1 1 1 0 1 0 0
CPL <bit> - инвертируется указанный бит.
Описание: бит адрес, которого указан во втором байте команды инвертируется, т.е. если бит содержит '1', то в этот бит записывается '0' и наоборот.
  • прямая битовая адресация;
Пример: CPL 27
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(bit) = not(bit)
Машинный код:
1 0 1 1 0 0 1 0
b b b b b b b b
CPL C - инвертируется флаг переноса 'C'.
Описание: флаг переноса 'C' инвертируется, т.е. если флаг переноса 'C' содержит '1', то в него записывается '0' и наоборот.
Пример: CPL C
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(C) = not(C)
Машинный код: 1 0 1 1 0 0 1 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
Машинный код:
1 1 0 1 0 1 0 0
DEC <байт> - производит вычитание 1 из указанного операнда.
Описание: ячейка памяти адрес, которой указан во втором байте команды уменьшается на 1. Если первоначально в ячейке было записано значение 00h, то в нее заносится значение 0FFh. Команда не воздействует на флаги.
Примечание: при выполнении команды DEC над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!
Для команды DEC разрешены следующие режимы адресации байта - источника:
  • непосредственная.
Пример: DEC A
Количество байт: 1


Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = (A) - 1
Машинный код:
0 0 0 1 0 1 0 0
  • регистровая;
Пример: DEC 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
  • косвенно-регистровая;
Пример: DEC @R0
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
((Ri)) = ((Ri)) - 1, i=0,1
Машинный код:
0 0 0 1 0 1 1 i
  • прямая;
Пример: DEC 30h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(direct) = (direct) - 1
Машинный код:
0 0 0 1 0 1 0 1
d d d d d d d d
DIV AB - деление.
Описание: делит 8- битовое беззнаковое целое число из аккумулятора А на 8-битовое целое без знака в регистре В. В аккумулятор A заносится целая часть результата деления, а в регистр В - остаток. Флаги переноса C и переполнения OV будут очищены (записан '0'). Если в регистре B перед операцией деления содержится '0', то в аккумуляторы A и B будут занесены неопределенные значения, а флаг переполнения будет установлен (записана '1').
Количество байт: 1
Количество циклов: 4
Действие команды: (PC) = (PC) + 1
(A) = (A) div (B)
(A) = (A) mod (B)
Машинный код:
0 1 0 0 0 1 0 0
DJNZ <байт>,<смещение> - вычитание 1 из указанной ячейки и переход, если результат не равен 0.
Описание: вычитание 1 из указанной во втором байте команды ячейки памяти и переход к вычисляемому по третьему байту команды адресу, если результат вычитания не равен 0. Если первоначально в ячейке памяти содержится '0', то в результате выполнения операции туда будет записано число '0FFH'. Команда не воздействует на флаги. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде.


Примечание: при выполнении команды DJNZ над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!
Для команды DJNZ разрешены следующие режимы адресации байта - источника:
  • регистровая;
Пример: DJNZ R3 ,LABEL1;
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(Rn) = (Rn) - 1, n=0,1,2,3,4,5,6,7
IF (Rn) < > 0, THEN n=0,1,2,3,4,5,6,7
(PC) = (PC) + rel
Машинный код:
1 1 0 1 1 r r r
R e l A d r e s
  • прямая;
Пример: DJNZ 30h,LABEL1;
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(direct) = (direct) - 1
IF (direct) < > 0 THEN
(PC) = (PC) + rel
Машинный код:
1 1 0 1 0 1 0 1
d d d d d d d d
R e l A d r e s
[ Главная ]


В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.
  • прямая битовая адресация;
Пример: JB 30h, LABEL1
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
IF (bit) = 1
THEN
(PC) = (PC) + rel
Машинный код:
0 0 1 0 0 0 0 0
b b b b b b b b
R e l A d r e s
JBC <bit>,<rel8> - переход, если бит установлен и сброс этого бита.
Описание: Если указанный во втором байте команды бит равен единице, то производится переход к вычисляемому по третьему байту команды адресу. Бит не очищается, если он уже содержит ноль. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Команда не воздействует на флаги.
  • прямая битовая адресация;
Пример: JBС 78h, LABEL1
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
IF (bit) = 1 THEN
(bit) = 0
(PC) = (PC) + rel
Машинный код:
0 0 0 1 0 0 0 0
b b b b b b b b
R e l A d r e s
JC <rel8> - переход, если бит переноса установлен.
Описание: Если бит переноса равен единице, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды.


Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Команда не воздействует на флаги.
Пример: JС LABEL1
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
IF (С) = 1 THEN
(PC) = (PC) + rel
Машинный код: 0 1 0 0 0 0 0 0
R e l A d r e s
JMP @A+DPTR - косвенный переход.
Описание: складывает 8- битовое содержимое аккумулятора без учета знака с 16- битовым указателем данных (DPTR) и загружает полученный результат в счетчик команд. Это будет адрес следующей исполняемой команды. Команда не воздействует на флаги.
Пример:
MOV      DPTR, #JMP_TBL
JMP       @A+DPTR
JMP_TBL:   AJMP     LABEL0
AJMP     LABEL1
AJMP     LABEL2
AJMP     LABEL3
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (A) + (DPTR)
Машинный код:
0 1 1 1 0 0 1 1
JNB <bit>, <rel8> - переход если бит сброшен.
Описание: Если указанный во втором байте команды бит равен нолю, то производится переход к вычисляемому по третьему байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.
  • прямая битовая адресация;
Пример: JNB     P1.3,   LABEL1
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
IF (bit) = 0 THEN
(PC) = (PC) + rel


Машинный код:
0 0 1 1 0 0 0 0
b b b b b b b b
R e l A d r e s
JNC <rel8> - переход, если бит переноса сброшен.
Описание: Если бит переноса равен нолю, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды. Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Команда не воздействует на флаги.
Пример: JNС     LABEL1
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
IF (С) = 0 THEN
(PC) = (PC) + rel
Машинный код:
0 1 0 1 0 0 0 0
R e l A d r e s
JNZ <rel8> - переход, если содержимое аккумулятора не равно нулю.
Описание: Если любой бит аккумулятора равен единице, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды. Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Содержимое аккумулятора не изменяется. Команда не воздействует на флаги.
Пример: JNZ     LABEL1
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
IF (A) <> 0 THEN
(PC) = (PC) + rel
Машинный код:
0 1 1 1 0 0 0 0
R e l A d r e s
JZ <rel8> - переход, если содержимое аккумулятора равно.
Описание: Если все биты аккумулятора равны нулю, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда.


Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды. Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Содержимое аккумулятора не изменяется. Команда не воздействует на флаги.
Пример: JZ     LABEL1
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
IF (A) = 0 THEN
(PC) = (PC) + rel
Машинный код:
0 1 1 0 0 0 0 0
R e l A d r e s
LCALL <addr 16> - дальний вызов подпрограммы.
Описание: вызывает подпрограмму, размещенную по указанному адресу <addr 16>. Команда увеличивает содержимое счетчика команд на 3 и помещает полученный результат в стек (младший байт первым). После этого содержимое указателя стека SP увеличивается на 2. Затем старший и младший байты счетчика команд PC загружаются вторым и третьим байтами команды LCALL соответственно. Выполнение программы продолжается с команды, расположенной с этого адреса. Команда не воздействует на флаги.
Пример: LCALL Podprogramma
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(SP) = (SP) + 1
((SP)) = (PC7-0)
(SP) = (SP) + 1
((SP)) = (PC15-8)
(PC15-0) = адрес подпрограммы (метки)
Машинный код:
0 0 0 1 0 0 1 0
а15 a14 a13 a12 a11 a10 a9 a8
a7 a6 a5 a4 a3 a2 a1 a0
LJMP <addr 16> - дальний переход.
Описание: передает управление команде, размещенной по указанному адресу <addr 16> загрузкой старшего и младшего байтов счетчика команд PC вторым и третьим байтами команды LJMP соответственно. Команда позволяет передавать управление в любую точку адресного пространства. Команда не воздействует на флаги.
Пример: LJMP     Label
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(PC15-0) = адрес метки
Машинный код:
0 0 0 0 0 0 1 0


а15 a14 a13 a12 a11 a10 a9 a8
a7 a6 a5 a4 a3 a2 a1 a0
MOV <байт приемник>,<байт-источник> - переслать байтовую переменную.
Описание: переменная, указанная во втором операнде, копируется в ячейку, указываемую первым операндом. Байт источник не изменяется. Другие регистры и флаги не изменяются.
Команда допускает 15 комбинаций адресации байта- источника и байта приемника:
  • регистровая;
Пример: MOV A, R3
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = (Rn) , n=0,1,2,3,4,5,6,7
Машинный код:
1 1 1 0 1 r r r
  • косвенно-регистровая;
Пример: MOV A, @R0
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = ((Ri)) , i=0,1
Машинный код:
1 1 1 0 0 1 1 i
  • прямая;
Пример: MOV A, 100
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (direct)
Машинный код:
1 1 1 0 0 1 0 1
d d d d d d d d
  • непосредственная.
Пример: MOV A, #38h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (data 8)
Машинный код: 0 1 1 1 0 1 0 0
i 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 1 1 1 1 r r r
  • прямая к регистровой;
Пример: MOV R3, 120
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(Rn) = (direct) , n=0,1,2,3,4,5,6,7
Машинный код:
1 0 1 0 1 r r r
d d d d d d d d
  • непосредственная к регистровой;
Пример: MOV R3, 120
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(Rn) = (data 8) , n=0,1,2,3,4,5,6,7
Машинный код:
0 1 1 1 1 r r r
i i i i i i i i
  • прямая;
Пример: MOV 20, A
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(direct) = (A)
Машинный код:
1 1 1 1 0 1 0 1
d d d d d d d d
  • регистровая к прямой;
Пример: MOV 59, R5
Количество байт: 2


Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(direct) = (Rn), n=0,1,2,3,4,5,6,7
Машинный код: 1 0 0 0 1 r r r
d d d d d d d d
  • прямая к прямой;
Пример: MOV 20, 80
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(direct) = (direct)
Машинный код: 1 0 0 0 0 1 0 1
d d d d d d d d (источник)
d d d d d d d d (приемник)
  • косвенно-регистровая к прямой;
Пример: MOV 35, @R0
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(direct) = ((Ri)), i=0,1
Машинный код:
1 0 0 0 0 1 1 i
d d d d d d d d
  • непосредственная к прямой;
Пример: MOV 31, #120
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(direct) = (data 8)
Машинный код:
0 1 1 1 0 1 0 1
d d d d d d d d
i i i i i i i i
  • косвенно-регистровая;
Пример: MOV @R0, A
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
((Ri)) = (A), i=0,1
Машинный код:
1 1 1 1 0 1 1 i
  • прямая к косвенно- регистровой;
Пример: MOV @R0, 80
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
((Ri)) = (direct), i=0,1
Машинный код:
1 0 1 0 0 1 1 i
d d d d d d d d
  • непосредственная к косвенно-регистровой;
Пример: MOV @R0, #80
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
((Ri)) = (direct), i=0,1
Машинный код:
0 1 1 1 0 1 1 i
i i i i i i i i
MOV <бит приемник>,<бит- источник> - переслать битовую переменную.
Описание: переменная, указанная во втором операнде, копируется по адресу, указываемом первым операндом. Бит источник не изменяется. Одним битом обязательно должен быть флаг переноса C, другим битом может быть любой прямо адресуемый бит. Другие регистры и флаги не изменяются.
  • прямая битовая адресация;
Пример: MOV C, 87
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(C) = (bit)
Машинный код:
0 1 0 1 0 0 1 0
b b b b b b b b
Пример: MOV 87, C


Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(bit) = (C)
Машинный код:
1 0 0 1 0 0 1 0
b b b b b b b b
MOV DPTR, #data16 - загрузить указатель данных DPTR 16-битной константой.
Описание: загружает указатель данных DPTR 16- битной константой. Команда не воздействует на флаги.
  • непосредственная.
Пример: MOV DPTR, #Label
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(DPTR) = (data16)
Машинный код:
1 0 0 1 0 0 0 0
i15 i14 i13 i12 i11 i10 i9 i8
i7 i6 i5 i4 i3 i2 i1 i0
MOVC A, @A+(<R16>) - переслать байт из памяти программ.
Описание: загружает аккумулятор константой из памяти программ. Адрес считываемого байта вычисляется как сумма 8-битного исходного содержимого аккумулятора без знака и содержимого 16-битного регистра. В качестве 16- битового регистра может быть использован либо указатель данных DPTR, либо счетчик команд РС При использовании программного счетчика его содержимое перед суммированием увеличивается на 1. Команда не воздействует на флаги.
  • косвенно-регистровая;
Пример: MOVC A, @A+DPTR
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
(A) = ((A)+(DPTR))
Машинный код:
1 0 0 1 0 0 1 1
  • косвенно-регистровая;
Пример: MOVC A, @A+PC
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
(A) = ((A)+(PC))
Машинный код:
1 0 0 0 0 0 1 1
MOVX <байт приемник>,<байт источник> - переслать байтовую переменную во внешнюю память (из внешней памяти)
Описание: пересылает данные между аккумулятором и байтом внешней памяти. Имеется два типа команд, которые отличаются тем, что обеспечивают 8-битный или 16-битный доступ к внешней памяти данных.
В первом случае регистр R0 или R1 текущего банка регистров обеспечивает 8- битный адрес, который мультиплексируется с данными на выводах порта P0.
Во втором случае, при выполнении команды 16- битный адрес, берется из указателя данных DPTR. При этом через порт P2 выводятся старшие 8 бит адреса, а через порт P0 младшие 8 бит адреса, мультиплексируемые с байтом данных.


Команда не воздействует на флаги.
  • косвенно-регистровая;
Пример: MOVX A, @Ri
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
(A) = ((Ri)), i=0,1
Машинный код:
1 1 1 0 0 0 1 i
  • косвенно-регистровая;
Пример: MOVX A, @DPTR
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
(A) = ((DPTR))
Машинный код:
1 1 1 0 0 0 0 0
  • косвенно-регистровая;
Пример: MOVX @Ri, A
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
((Ri)) = (A), i=0,1
Машинный код:
1 1 1 1 0 0 1 i
  • косвенно-регистровая;
Пример: MOVX @DPTR, A
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
((DPTR)) = (A)
Машинный код:
1 1 1 1 0 0 0 0
[ Главная ]


  • прямая;
Пример: ORL 30h,A
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(direct) = (A) V (direct)
Машинный код: 0 1 0 0 0 0 1 0
d d d d d d d d
  • непосредственная.
Пример: ORL direct, #100
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(direct) = (A) V (date 8)
Машинный код:
0 1 0 0 0 0 1 1
d d d d d d d d
i i i i i i i i
Примечание: при выполнении команды ORL над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!
ORL C,<бит источника> - логическое ИЛИ битовых переменных.
Описание: Если бит источника равен 1, то происходит запись во флаг переноса единицы, в противном случае флаг переноса не изменяет текущего значения. На остальные флаги команда не воздействует.
  • прямая битовая адресация;
Пример: ORL С, 20h
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(C) = (C) V (bit)
Машинный код:
0 1 1 1 0 0 1 0
b b b b b b b b
Знак '/' перед операндом в языке ассемблера указывает на то, что в качестве значения используется логическое отрицание адресуемого бита, при этом сам бит источника не изменяется.
  • прямая битовая адресация;
Пример: ORL С, /20h
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(C) = (C) V not(bit)
Машинный код:
1 0 1 0 0 0 0 0
b b b b b b b b
РОР <direct> - чтение из стека.
Описание: Считывает содержимое ячейки внутренней памяти, на которую указывает регистр указателя стека, после этого содержимое указателя стека уменьшается на 1. Считанная величина помещается во внутреннюю память по адресу, указанному во втором байте команды.
  • прямая;
Пример: POP 30h
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(direct) = ((SP))
(SP) = (SP) - 1
Машинный код:
1 1 0 1 0 0 0 0
d d d d d d d d
PUSH <direct> - запись в стек.
Описание: Содержимое указателя стека увеличивается на 1.


Содержимое ячейки внутренней памяти по адресу, указанному во втором байте команды копируется в ячейку внутренней памяти, на которую указывает регистр указателя стека.
  • прямая;
Пример: PUSH 30h
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
((SP)) = (direct)
(SP) = (SP) + 1
Машинный код:
1 1 0 0 0 0 0 0
d d d d d d d d
RET - возврат из подпрограммы.
Описание: последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая содержимое указателя стека на 2. Выполнение программы продолжается с нового, только что загруженного в счетчик команд адреса. Команда не воздействует на флаги.
Пример: RET
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(PC15-8) = ((SP))
(SP) = (SP) - 1
(PC7-0) = ((SP))
SP) = (SP) - 1
Машинный код: 0 0 1 0 0 0 1 0=
RETI - возврат из подпрограммы обслуживания прерывания.
Описание: последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая содержимое указателя стека на 2. Кроме того, команда восстанавливает состояние логики прерываний, разрешая обработку следующего прерывания того же уровня приоритета. Выполнение программы продолжается с того же адреса, что был в программном счетчике (PC) до начала обработки прерывания (следующий за командой, во время выполнения которой был обнаружен запрос на прерывание). Команда не воздействует на флаги и не восстанавливает состояние PSW, бывшее до обработки прерывания. Если к этому моменту обнаруживается новый запрос на прерывание, то до нового вызова подпрограммы обслуживания прерывания выполняется одна команда из основной программы.
Пример: RETI
Количество байт: 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(PC15-8) = ((SP))
(SP) = (SP) - 1
(PC7-0) = ((SP))
(SP) = (SP) - 1
Машинный код:
0 0 1 1 0 0 1 0
RL A - сдвиг содержимого аккумулятора влево.
Описание: сдвигает восемь бит аккумулятора на один бит влево, бит 7 засылается на место бита 0. Команда не воздействует на флаги.


Пример: RL A
Количество байт: 1
Количество циклов: 1
Действие команды: (An+1) = (An) n=0..6
(A0) = (A7)
Машинный код:
0 0 1 0 0 0 1 1
RLC A - сдвиг содержимого аккумулятора влево через флаг переноса.
Описание: сдвигает восемь бит аккумулятора и флаг переноса на один бит влево. Содержимое флага переноса помещается на место бита 0 аккумулятора, а содержимое бита 7 аккумулятора переписывается во флаг переноса. На остальные флаги команда не воздействует.
Пример: RLC A
Количество байт: 1
Количество циклов: 1
Действие команды: (An+1) = (An) n=0..6
(A0) = (C)
(C) = (A7)
Машинный код:
0 0 1 1 0 0 1 1
RR A - сдвиг содержимого аккумулятора вправо.
Описание: сдвигает восемь бит аккумулятора на один бит вправо, бит 0 засылается на место бита 7. Команда не воздействует на флаги.
Пример: RR A
Количество байт: 1
Количество циклов: 1
Действие команды: (An) = (An+1) n=0..6
(A7) = (A0)
Машинный код: 0 0 0 0 0 0 1 1
RRC A - сдвиг содержимого аккумулятора через флаг переноса.
Описание: сдвигает восемь бит аккумулятора и флаг переноса на один бит вправо. Содержимое флага переноса помещается на место бита 7 аккумулятора, а содержимое бита 0 аккумулятора переписывается во флаг переноса. На остальные флаги команда не воздействует.
Пример: RRC A
Количество байт: 1
Количество циклов: 1
Действие команды: (An) = (An+1) n=0..6
(A7) = (C)
(C) = (A0)
Машинный код:
0 0 0 1 0 0 1 1
SETB <bit> - установить бит.
Описание: устанавливает указанный бит в 1. Команда может воздействовать на флаг переноса или любой другой прямо адресуемый бит. На остальные флаги команда не воздействует.
Пример: SETB C
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(C) = 1
Машинный код:
1 1 0 1 0 0 1 1
Пример: SETB 27
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(bit) = 1
Машинный код:
1 1 0 1 0 0 1 0
b b b b b b b b
SJMP <rel8> - короткий переход
Описание: команда выполняет безусловный относительный короткий переход по указанному адресу.


Адрес назначения вычисляется суммированием второго байта команды и программного счетчика предварительно увеличенного на два. Т.е. переход может осуществляться на метку, стоящую на 128 байт выше команды, следующей за SJMP и 127 байт ниже.
Пример: SJMP Label
Количество байт: 2
Количество циклов: 2
Действие команды: (PC) = + 2
(PC) = (PC) + rel8
Машинный код:
1 0 0 0 0 0 0 0
R e l A d r e s
SUBB A,<байт источник> - вычитание с заемом.
Описание: команда вычитает указанную переменную вместе с флагом переноса из содержимого аккумулятора, результат помещается в аккумулятор. SUBB устанавливает флаг переноса C, если требуется заем для 7 бита, и обнуляет его в противном случае. (Если флаг переноса C перед выполнением команды содержал 1, то перенос вычитается из аккумулятора, содержащего операнд источник). Флаг переноса C устанавливается, если требуется заем для 3 бита, и очищается в противном случае. Флаг переполнения OV устанавливается, если требуется заем для 7 бита, но не требуется для 6 или нужен заем для 6 бита, но не требуется для 7. Операнд источника допускает четыре режима адресации:
  • регистровая;
Пример: SUBB A, R7
Количество байт: 1
Количество циклов: 1
Действие команды: (PC)= (PC) + 1
(A) = (A) - (С) - (Rn) , n=0,1,2,3,4,5,6,7
Машинный код:
1 0 0 1 1 r r r
  • косвенно- регистровая;
Пример: SUBB A, @R0
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = (A) - (С) - ((Ri)) , i=0,1
Машинный код: 1 0 0 1 0 1 1 i
  • прямая;
Пример: SUBB A, 30h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (A) - (C) - (direct)
Машинный код:
1 0 0 1 0 1 0 1
d d d d d d d d
  • непосредственная.
Пример: SUBB A, #100
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (A) - (C) - (date 8)
Машинный код:
1 0 0 1 0 1 0 0
i i i i i i i i
SWAP A - обмен тетрадами внутри аккумулятора.
Описание: команда осуществляет обмен между младшей (биты 0..3) и старшей (биты 4..7) тетрадами аккумулятора. (Тетрада это четырехбитная переменная).


Команду можно интерпретировать как циклический сдвиг на четыре бита. Команда не воздействует на флаги.
Пример: SWAP A
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A3..A0) <=> (A7..A4)
Машинный код:
1 1 0 0 0 1 0 0
XCH A,<байт> - обмен содержимого аккумулятора с переменной байтом.
Описание: команда загружает аккумулятор содержимым указанной переменной, в то же самое время первоначальное содержимое аккумулятора заносится по указанному адресу. Команда не воздействует на флаги.
Допускается три режима адресации:
  • регистровая;
Пример: XCH A, R7
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) <=> (Rn) , n=0,1,2,3,4,5,6,7
Машинный код:
1 1 0 0 1 r r r
  • прямая;
Пример: XCH A, 30h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) <=> (direct)
Машинный код:
1 1 0 0 0 1 0 1
d d d d d d d d
  • косвенно-регистровая;
Пример: XCH A, @R0
Количество байт: 1
Количество циклов: 1
Действие команды: (PC)= (PC) + 1
(A) <=> ((Ri)) , i=0,1
Машинный код:
1 1 0 0 0 1 1 i
XCHD A, @Ri - обмен цифры.
Описание: команда осуществляет обмен между младшей (биты 0..3) тетрадой (тетрада это четырехбитная переменная) аккумулятора, где обычно хранится двоично-десятичная цифра с тетрадой ячейки внутреннего ОЗУ. Используется косвенно регистровая адресация. Старшие тетрады (биты 4..7) обоих операндов не изменяются. Команда не воздействует на флаги.
Пример: XCHD A, @R0
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A3..A0) <=> ((Ri3..Ri0)) , i=0,1
Машинный код: 1 1 0 1 0 1 1 i
XRL <байт приемник>,<байт источник> - исключающее ИЛИ для переменных байтов.
Описание: выполняет операцию побитового "исключающее логического ИЛИ" между указанными переменными. Результат сохраняется в приемнике. Команда не воздействует на флаги.
Для команды XRL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:


  • регистровая;
Пример: XRL A, R3
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = (A) xor (Rn) , n=0,1,2,3,4,5,6,7
Машинный код:
0 1 1 0 1 r r r
  • косвенно- регистровая;
Пример: XRL A, @R0
Количество байт: 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(A) = (A) xor ((Ri)) , i=0,1
Машинный код: 0 1 1 0 0 1 1 i
  • прямая;
Пример: XRL A, 30h
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(A) = (A) xor (direct)
Машинный код:
0 1 1 0 0 1 0 1
d d d d d d d d
  • непосредственная.
Пример: XRL A, #100
Количество байт: 2
Количество циклов: 1
Действие команды: (PC)= (PC) + 2
(A) = (A) xor (date 8)
Машинный код:
0 1 1 0 0 1 0 0
i i i i i i i i
Для команды XRL с произвольным адресом ячейки внутренней памяти данных в качестве байта назначения разрешены следующие режимы адресации байта - источника:
  • прямая;
Пример: XRL 30h,A
Количество байт: 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
(direct) = (A) xor (direct)
Машинный код:
0 1 1 0 0 0 1 0
d d d d d d d d
  • непосредственная.
Пример: XRL direct, #100
Количество байт: 3
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(direct) = (A) xor (date 8)
Машинный код:
0 1 1 0 0 0 1 1
d d d d d d d d
i i i i i i i i
Примечание: при выполнении команды XRL над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!
[ Главная ]

Содержание раздела