Дата последнего обновления файла 23.10.2009

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

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> - переход если бит установлен.

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

Пример: 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

Литература:

  1. Боборыкин А.В., Липовецкий Г.П., и др. Однокристальные микроЭВМ М.: Бином 1994
  2. В.В. Сташин, А.В. Урусов, О.Ф. Мологонцева Проектирование цифровых устройств на однокристальных микроконтроллерах М.: Энергоатомиздат 1990
  3. Карасев Однокристальный микропроцессор семейства MCS-51 М.: 1995
  4. Бродин В.Б., Калинин А.В. Системы на микроконтроллерах и БИС программируемой логики М.: ЭКОМ 2001
  5. Микушин А.В. Сединин В.И. Однокристальный микроконтроллер семейства MCS-51 фирмы INTEL 8xC51GB Новосибирск: СибГУТИ, 2001
  6. Микушин А.В. Занимательно о микроконтроллерах. СПб, БХВ-Петербург, 2006.
  7. Микушин А.В., Сажнев А.М., Сединин В.И. Цифровые устройства и микропроцессоры. СПб, БХВ-Петербург, 2010.

Вместе со статьей "Архитектура микроконтроллеров MCS-51" читают:

Состав семейства MCS-51
http://digteh.ru/MCS51/tablms.php

Архитектура микроконтроллеров MCS-51
http://digteh.ru/MCS51/MCS_51.php

Система команд микроконтроллеров MCS-51
http://digteh.ru/MCS51/SysInstr.php

Устройство параллельных портов микроконтроллеров MCS-51
http://digteh.ru/MCS51/port.php

Построение памяти микроконтроллеров семейства MCS-51
http://digteh.ru/MCS51/pam_cntr.php

Устройство таймеров микроконтроллеров MCS-51
http://digteh.ru/MCS51/timers.php

Последовательный порт микроконтроллера 8051
http://digteh.ru/MCS51/PoslPort.php


Автор Микушин А. В. All rights reserved. 2001 ... 2017

Предыдущие версии сайта:
http://neic.nsk.su/~mavr
http://digital.sibsutis.ru/

Поиск по сайту сервисом Яндекс

Поиск по сайту сервисом ГУГЛ

пЕИРХМЦ@Mail.ru


Яндекс.Метрика
Rambler's Top100