Главная       Продать работу       Заказать работу       Блог       Контакты       Оплата       О нас       Как мы работаем       Регистрация       Вход в кабинет
Тех. дипломные работы
   автомобили
   спец. техника
   станки
   тех. маш.
   строительство
   электроснабжение
   пищевая промышленность
   водоснабжение
   газоснабжение
   автоматизация
   теплоснабжение
   холодильники
   машиностроение
   др. тех. специальности

Тех. курсовые работы
   автомобили
   спец. техника
   станки
   тех. маш.
   строительство
   детали машин
   электроснабжение
   газоснабжение
   водоснабжение
   пищевая промышленность
   автоматизация
   теплоснабжение
   ТММ
   ВСТИ
   гидравлика и пневматика
   машиностроение
   др. тех. специальности

Тех. дополнения
   Отчеты
   Расчетно-графические работы
   Лекции
   Задачи
   Лабораторные работы
   Литература
   Контрольные работы
   Чертежи и 3D моделирование
   Тех. soft
   Рефераты
   Общий раздел
   Технологический раздел
   Конструкторский раздел
   Эксплуатационный раздел
   БЖД раздел
   Экономический раздел
   Экологический раздел
   Автоматизация раздел
   Расчетные работы

Гум. дипломные работы
   педагогика и психология
   астрономия и космонавтика
   банковское, биржевое дело
   БЖД и экология
   биология и естествознание
   бухгалтерский счет и аудит
   военное дело
   география
   геология
   государство и право
   журналистика и СМИ
   иностранные языки
   история
   коммуникации
   краеведение
   кулинария
   культура и искусство
   литература
   экономика и торговля
   математика
   медицина
   международное отношение
   менеджмент
   политология
   музыка
   религия
   социология
   спорт и туризм
   таможенная система
   физика
   химия
   философия
   финансы
   этика и эстетика
   правознавство

Гум. курсовые работы
   педагогика и психология
   астрономия и космонавтика
   банковское, биржевое дело
   БЖД и экология
   биология и естествознание
   бухгалтерский счет и аудит
   военное дело
   география
   геология
   государство и право
   журналистика и СМИ
   иностранные языки
   история
   коммуникации
   краеведение
   кулинария
   культура и искусство
   литература
   экономика и торговля
   математика
   медицина
   международное отношение
   менеджмент
   политология
   музыка
   религия
   социология
   спорт и туризм
   таможенная система
   физика
   химия
   философия
   финансы
   этика и эстетика
   правознавство

Гум. дополнения
   Отчеты
   Расчетные работы
   Лекции
   Задачи
   Лабораторные работы
   Литература
   Контрольные работы
   Сочинения
   Гум. soft
   Рефераты

Рефераты
   Авиация и космонавтика
   Административное право
   Арбитражный процесс
   Архитектура
   Астрология
   Астрономия
   Банковское дело
   Безопасность жизнедеятельнос
   Биографии
   Биология
   Биология и химия
   Биржевое дело
   Ботаника и сельское хоз-во
   Бухгалтерский учет и аудит
   Валютные отношения
   Ветеринария
   Военная кафедра
   ГДЗ
   География
   Геодезия
   Геология
   Геополитика
   Государство и право
   Гражданское право и процесс
   Делопроизводство
   Деньги и кредит
   ЕГЭ
   Естествознание
   Журналистика
   ЗНО
   Зоология
   Издательское дело и полиграф
   Инвестиции
   Иностранный язык
   Информатика
   Информатика, программировани
   Исторические личности
   История
   История техники
   Кибернетика
   Коммуникации и связь
   Компьютерные науки
   Косметология
   Краеведение и этнография
   Краткое содержание произведе
   Криминалистика
   Криминология
   Криптология
   Кулинария
   Культура и искусство
   Культурология
   Литература : зарубежная
   Литература и русский язык
   Логика
   Логистика
   Маркетинг
   Математика
   Медицина, здоровье
   Медицинские науки
   Международное публичное прав
   Международное частное право
   Международные отношения
   Менеджмент
   Металлургия
   Москвоведение
   Музыка
   Муниципальное право
   Налоги, налогообложение
   Наука и техника
   Начертательная геометрия
   Оккультизм и уфология
   Остальные рефераты
   Педагогика
   Политология
   Право
   Право, юриспруденция
   Предпринимательство
   Прикладные науки
   Промышленность, производство
   Психология
   психология, педагогика
   Радиоэлектроника
   Реклама
   Религия и мифология
   Риторика
   Сексология
   Социология
   Статистика
   Страхование
   Строительные науки
   Строительство
   Схемотехника
   Таможенная система
   Теория государства и права
   Теория организации
   Теплотехника
   Технология
   Товароведение
   Транспорт
   Трудовое право
   Туризм
   Уголовное право и процесс
   Управление
   Управленческие науки
   Физика
   Физкультура и спорт
   Философия
   Финансовые науки
   Финансы
   Фотография
   Химия
   Хозяйственное право
   Цифровые устройства
   Экологическое право
   Экология
   Экономика
   Экономико-математическое мод
   Экономическая география
   Экономическая теория
   Этика
   Юриспруденция
   Языковедение
   Языкознание, филология

Главная > Блог


Ассемблерный язык микроконтроллера 8051

Для эффективной разработки прикладного программного обеспечения микропроцессоров и микроконтроллеров необходимо выбрать подходящий язык программирования. Если требуется не очень сложная и при этом быстрая и компактная программа, которая не содержит сложных вычислительных операций, то для ее написания лучше выбрать язык низкого уровня (язык ассемблера). Язык высокого уровня (ЯВУ) следует выбрать в том случае, если необходимо производить сложные вычисления: операции над 16-, 32-разрядными числами, числами с плавающей точкой и др. Очень часто наиболее подходящей является смешанная модель, где критичные к быстродействию части программы написаны на ассемблере, а вычислительные процедуры реализованы на ЯВУ, например, на Си.

Изучение языков программирования целесообразнее всего начинать с ассемблера, поскольку он дает наглядное представление о функционировании аппаратной части целевого микропроцессора (микропроцессора для которого разрабатывается прикладная программа), что в конечном счете обеспечивает получение оптимальных схемотехнических решений разрабатываемой микропроцессорной техники. Язык ассемблера относится к группе машинно-ориентированных языков. Иначе говоря, каждому типу микропроцессоров или микроконтроллеров соответствует свой ассемблерный язык.

Оператором языка ассемблера микроконтроллера 8051 (языка АСМ51) является строка исходного текста микроконтроллерной программы (МК-программы), имеющая следующий формат:

<метка>      

 

<  команда/ директива  >

;<комментарий>

 

 

<операция> <операнды>

 

Поле <команда/ директива> является главным полем строки и состоит из поля <операция> и поля <операнды>, разделенных пробелом.

Поле <операция> содержит мнемоническое обозначение команды или директивы ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Например: MOV - move - переслать, JMP - jump - перейти, DB - define byte - определить байт. Кроме того, поле <операция> может содержать символическое имя ассемблерной макрокоманды.

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

Операнды ассемблерных команд определяют тип используемых данных (бит, байт, 2-байтовое слово), способ адресации этих данных и адреса переходов в области памяти программ микроконтроллера. Различают следующие способы адресации данных: регистровый, прямой, косвенно-регистровый и непосредственный.

Регистровая адресация обеспечивает обращение к байтовому содержимому регистров A, B или регистров R0-R7 выбранного банка, к 2-байтовому содержимому регистра DPTR и к битовому содержимому флага переноса C, при этом в качестве операндов используются принятые имена перечисленных программно доступных элементов, а также символические имена (только для регистров R0-R7), определяемые пользователем.

Прямая адресация применяется для обращения к байтовому содержимому 128-ми ячеек резидентной памяти данных или 21-го регистра специальных функций, а также к битовому содержимому 16-ти ячеек РПД или 11-ти РСФ, допускающих побитовое обращение (рис.2). При прямой адресации данных в поле <операнды> указывается прямой адрес используемых ячейки РПД, регистра специальных функций или бита. Этот адрес может быть задан числом, символическим именем, выражением, именем (только для РСФ и битов РСФ). Имена регистров специальных функций приведены в табл.2.1, а имена битов РСФ - в табл.2.3, табл.2.5-2.8. Кроме того, имя бита РСФ может быть представлено структурой вида: <имя РСФ>.<номер бита>. Например, имя пятого бита регистра TCON можно записать как TCON.5, имя второго бита аккумулятора - как A.2 и т.д.

С помощью косвенно-регистровой адресации обеспечивается обращение к байтовому содержимому 128-ми ячеек РПД, при этом адрес используемой ячейки определяется содержимым указателя стека SP или одного из регистров R0, R1 выбранного банка. Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае регистром-указателем может быть 16-разрядный указатель данных DPTR или один из упомянутых выше регистров R0, R1. Для работы с данными, "зашитыми" в виде констант в память программ микроконтроллера, применяется косвенно-регистровая адресация по сумме: базовый регистр (содержимое DPTR или программного счетчика PC) плюс индексный регистр (содержимое аккумулятора A). Любая такая константа может быть выбрана по адресу, который вычисляется сложением содержимого DPTR (PC) с содержимым A. Операнд, определяющий косвенно-регистровую адресацию данных, задается именем регистра-указателя или символическим именем (только для R0 и R1) с обязательным префиксом @.

При непосредственной адресации данные, предназначенные для обработки, непосредственно указываются в поле <операнды> и могут быть представлены в нем числом, символическим именем или выражением с обязательным префиксом  #.

Аналогичным образом (за исключением префикса #) представляется операнд, определяющий адрес перехода в памяти программ микроконтроллера.

В качестве операндов ассемблерных директив и макрокоманд обычно используются числа, символические имена, выражения, имена программно доступных элементов микроконтроллера (только для директивы REG и макрокоманд), а в ряде случаев мнемоники языка АСМ51 (только для макрокоманд).

Символические имена, являющиеся операндами команд или директив, должны быть обязательно определены с помощью соответствующих директив (EQU, VAR или REG) языка АСМ51. Кроме того, символическое имя адреса в памяти программ может быть определено использованием этого имени в поле <метка> одной из строк исходного текста МК-программы. Отметим, что корректное символическое имя должно быть представлено комбинацией букв латинского алфавита и цифр и начинаться с буквы, при этом указанная комбинация допускает использование символа подчеркивания.

Применяемые в качестве операндов числа приводятся с указанием системы счисления (СС), для чего используется суффикс (латинская буква, стоящая после числа): B - для двоичной СС, Q - для восьмеричной СС, D -  и H -  соответственно для десятичной и шестнадцатеричной СС. Число без суффикса считается десятичным.

Выражение, используемое в поле <операнды>, вычисляется в процессе трансляции исходной МК-программы и представляет собой совокупность символических имен и (или) чисел (в формате 2-байтовых слов), содержащую следующие основные операторы:

"+" - сложение (третий уровень приоритета);

"-" - вычитание (третий уровень приоритета);

"*" - умножение (четвертый уровень приоритета);

"/" - деление (четвертый уровень приоритета);

"**" - возведение в степень (пятый уровень приоритета);

.OR. - ИЛИ (первый уровень приоритета);

.AND. - И (второй уровень приоритета);

.XOR. - исключающее ИЛИ (первый уровень приоритета);

.NOT. - отрицание (шестой уровень приоритета);

"<" (">") - выделение младшего (старшего) байта 2-байтового слова (шестой уровень приоритета).

Оператор с более высоким уровнем приоритета выполняется в первую очередь. Если в выражении присутствуют операторы с одинаковым уровнем приоритета, то вычисления производятся слева направо. Чтобы изменить указанный порядок выполнения расчетов допускается использовать скобки. В качестве примера приведем выражение <.NOT.13H+1, реализующее процедуру преобразования числа 13H в дополнительный код и эквивалентное числу 0EDH, которое будет получено при трансляции исходной МК-программы.

Поле <метка> не является обязательным, отделяется от поля <команда/ директива> пробелом и может содержать символическое имя непосредственных данных, одного из регистров R0-R7, прямого адреса, макрорасширения или адреса перехода в памяти программ. Если метка заканчивается двоеточием, то она может быть расположена в любом месте строки, в противном случае метка должна начинаться в начале строки.

Поле <комментарий> содержит пояснения различного характера - может объяснять применение той или иной команды или директивы, содержать описание алгоритма участка или МК-программы в целом и др. Это поле не является обязательным и при использовании должно начинаться символом ;.

Система команд языка АСМ51

Система команд языка АСМ51 содержит 111 команд, которые обеспечивают реализацию широкой номенклатуры арифметических и логических операций, а также операций пересылки данных и передачи управления. В табл.2.9 приведены обозначения, используемые в описании команд.

Таблица 2.9

Обозначение

Назначение

addr

Символическое имя вычисляемого адреса ячейки памяти программ.

addr11

Символическое имя 11-битового адреса ячейки памяти программ.

addr16

Символическое имя 16-битового адреса ячейки памяти программ.

bit

Символическое имя 8-разрядного адреса бита в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение (см. рис.2).

data8

Символическое имя байта данные

 

data16

Символическое имя 16-битовых данных.

direct

Символическое имя 8-разрядного адреса ячейки резидентной памяти данных или регистра специальных функций.

rel

Значение байта смещения, используемое при вычислении адреса addr.

(X)

Содержимое элемента X.

((X))

Содержимое по адресу, хранящемуся в элементе X.

X[M]

Разряд M элемента X.

X[3-0]

Группа разрядов элемента X.

:=

Оператор присваивания.

Ú

Дизъюнкция.

Ù

Конъюнкция.

Å

Сложение по модулю 2.

X:Y

Целочисленное деление элемента X на элемент Y.

mod[X:Y]

Остаток при целочисленном делении.

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

ACALL addr11

addr11[10-8] 1 0 0 0 1

addr11[7-0]

Команда "абсолютный вызов подпрограммы" вызывает безусловно подпрограмму, размещенную по адресу addr11. При этом содержимое счетчика команд PC увеличивается на 2 для получения адреса следующей команды, после чего полученное 16-разрядное значение PC помещается в стек, и содержимое указателя стека SP также увеличивается на 2. Адрес перехода образуется с помощью конкатенации (сцепления) 5-ти старших бит увеличенного содержимого счетчика команд PC, содержимого 7-5 битов старшего байта команды и содержимого второго байта команды. Адрес перехода и указанная команда должны находиться внутри одной страницы памяти программ (ПП) объемом 2 Кбайт, определяемой содержимым пяти старших бит PC. Время выполнения команды 2 цикла.

 

Алгоритм

Пример

 

(PC):=(PC)+2, (SP):=(SP)+1

((SP)):=(PC[7-0]), (SP):=(SP)+1

((SP)):=(PC[15-8])

(PC[10-0]):=addr11[10-8] çêaddr11[7-0],

где çêесть знак конкатенации

;(SP)=07H, (PC)=28DH,

;MT1 соответствует адресу ;345H в ПП

ACALL MT1 ;(PC)=345H, ;(SP)=09H,

;в РПД (09H)=02H, (08H)=8FH

ADD A,Rn ;где n=0-7

0 0 1 0 1 r r r

  где rrrB=000B-111B

 

Команда "сложение" складывает содержимое аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7 и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.

Алгоритм

Пример

(A):=(A)+(Rn), где n=0-7

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=0C3H, (R6)=0AAH

ADD A,R6 ;(A)=6DH,(R6)=0AAH,

;(AC)=0, (C)=1, (OV)=1

 

ADD A,@Ri ;где iÎ{0,1}

0 0 1 0 0 1 1 i

 

Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)+((Ri)), где iÎ{0,1}

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=95H, (R1)=31H,

;в РПД (31H)=4CH

ADD A,@R1 ;(A)=0E1H, (C)=0, ;(AC)=1, (OV)=0, (31H)=4CH

 

ADD A,direct

0 0 1 0 0 1 0 1

direct

Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

 

Алгоритм

Пример

 

(A):=(A)+(direct)

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=77H, (P1)=0FFH

ADD A,P1 ;(A)=76H,

;(AC)=1, (C)=1, (OV)=0

;(P1)=0FFH

ADD A,#data8

0 0 1 0 0 1 0 0

data8

 

Команда "сложение" складывает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)+data8

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=09H

ADD A,#0D3H ;(A)=0DCH,

;(AC)=0, (C)=0, (OV)=0

 

ADDC A,Rn ;где n=0-7

0 0 1 1 1 r r r

  где rrrB=000B-111B

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса С и содержимое заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7 и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.

Алгоритм

Пример

(A):=(A)+(C)+(Rn), где n=0-7

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=0B2H, (R3)=99H, (C)=1

ADDC A,R3 ;(A)=4CH,(R3)=99H,

;(AC)=0, (C)=1, (OV)=1

 

ADDC A,@Ri ;где iÎ{0,1}

0 0 1 1 0 1 1 i

 

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат помещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)+(C)+((Ri)), где iÎ{0,1}

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=0D5H, (R0)=3AH,

;в РПД (3AH)=1AH, (C)=1

ADDC A,@R0 ;(A)=0F0H,

;(AC)=1, (C)=0, (OV)=0,

;(3AH)=1AH

 

ADDC A,direct

0 0 1 1 0 1 0 1

direct

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)+(C)+(direct)

(С):=x, (OV):=x, (AC):=x,

где xÎ{0,1}

;(A)=11H, (C)=1,

;(DPH)=0DFH

ADDC A,DPH ;(A)=0F1H,

;(AC)=1, (C)=0, (OV)=0,

;(DPH)=0DFH

 

ADDC A,#data8

0 0 1 1 0 1 0 0

data8

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и байт данных data8, непосредственно указанный в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)+(C)+data8

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=55H, (C)=0

ADDC A,#55H ;(A)=0AAH,

;(AC)=0, (C)=0, (OV)=1

 

AJMP addr11

addr11[10-8] 0 0 0 0 1

addr11[7-0]

Команда "абсолютный переход" передает управление по адресу с символическим именем addr11, который образуется с помощью конкатенации (сцепления) 5-ти старших бит содержимого счетчика команд PC (после увеличения его на 2), содержимого 7-5 битов старшего байта команды и содержимого второго байта команды. Адрес перехода и указанная команда должны находиться внутри одной страницы памяти программ (ПП) объемом 2 Кбайт, определяемой содержимым пяти старших бит PC. Время выполнения команды 2 цикла.

 

Алгоритм

Пример

 

(PC):=(PC)+2

(PC[10-0]):=addr11[10-8] çêaddr11[7-0],

где çêесть знак конкатенации

;(PC)=28FH,

;MT2 соответствует адресу ;34AH в ПП

AJMP MT2 ;(PC)=34AH

ANL A,Rn ;где n=0-7

0 1 0 1 1 r r r

  где rrrB=000B-111B

 

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ù(Rn), где n=0-7

;(A)=0FH, (R2)=0C5H

ANL A,R2 ;(A)=05H,(R2)=0C5H

 

ANL A,@Ri ;где iÎ{0,1}

0 1 0 1 0 1 1 i

 

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ù((Ri)), где iÎ{0,1}

;(A)=0BCH, (R0)=35H,

;в РПД (35H)=47H

ANL A,@R0 ;(A)=04H,

;в РПД (35H)=47H

 

ANL A,direct

0 1 0 1 0 1 0 1

direct

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ù(direct)

 

;(A)=0A3H, (PSW)=85H

ANL A,PSW ;(A)=81H,(PSW)=85H

 

ANL A,#data8

0 1 0 1 0 1 0 0

data8

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ùdata8

;(A)=36H

ANL A,#0DDH ;(A)=14H

 

ANL direct,A

0 1 0 1 0 0 1 0

direct

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct):=(direct)Ù(A)

 

;(A)=55H, (P2)=0AAH

ANL P2,A ;(A)=55H,(P2)=00H

 

ANL direct,#data8

0 1 0 1 0 0 1 1

direct

data8

Команда "логическое И" выполняет поразрядную конъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct):=(direct)Ùdata8

;(P1)=0FFH

ANL P1,#73H ;(P1)=73H

 

ANL C,bit

1 0 0 0 0 0 1 0

bit

Команда "логическое И" выполняет конъюнкцию содержимого флага переноса C с содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Результат помещается в С. Содержимое используемого бита не изменяется. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(C):=(C)Ù(bit)

 

;(C)=1, (P1[0])=0,

;в РПД (24H)=0FH

ANL C,P1.0 ;(C)=0, (P1[0])=0

ANL C,20H ;(C)=0, (24H)=0FH

ANL C,/bit

1 0 1 1 0 0 0 0

bit

 

Команда "логическое И" выполняет конъюнкцию содержимого флага переноса C с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 8-разрядный адрес которого определяется символическим именем bit, не изменяется. Результат помещается в С. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(C):=(C) Ù 

 

;(C)=1, (AC)=0

ANL C,/AC ;(C)=1, (AC)=0

 

CJNE A,direct,addr

1 0 1 1 0 1 0 1

direct

rel

Команда "сравнение и переход, если не равно" сравнивает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct, и выполняет переход по адресу addr, если содержимое A не равно содержимому используемой ячейки или используемого регистра, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на три. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) используемой ячейки или используемого регистра, в противном случае флаг устанавливается в "1". Команда не изменяет (A) и (direct) и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (direct)<(A), то (PC):=(PC)+3+rel и (C):=0

если (direct)>(A), то (PC):=(PC)+3+rel и (C):=1

если (direct)=(A), то (PC):=(PC)+3 и

(C):=0

;(A)=97H, (P2)=0F0H, (C)=0,

;(PC)=3FFH, MT3 соответству-

;ет адресу 41FH, rel=1DH

CJNE A,P2,MT3 ;(C)=1,

;(A)=97H, (P2)=0F0H,

;(PC)=41FH

 

CJNE A,#data8,addr

1 0 1 1 0 1 0 0

data8

rel

Команда "сравнение и переход, если не равно" сравнивает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое A не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода, влияние на (A) и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) data8, в противном случае флаг устанавливается в "1".

Алгоритм

Пример

если data8<(A), то (PC):=(PC)+3+rel и (C):=0

если data8>(A), то (PC):=(PC)+3+rel и (C):=1

если data8=(A), то (PC):=(PC)+3 и

(C):=0

;(A)=0FCH, (C)=1, (PC)=3FFH, ;MT4 соответствует адресу

;3F0H, rel=0EEH

CJNE A,#0BFH,MT4 ;(C)=0,

;(A)=0FCH, (PC)=3F0H

 

CJNE Rn,#data8,addr

1 0 1 1 1 r r r

data8

rel

где n=0-7

где rrrB=000B-111B

Команда "сравнение и переход, если не равно" сравнивает содержимое заданного регистра Rn выбранного банка с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое Rn не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое Rn больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на (Rn).

Алгоритм

Пример

если data8<(Rn), то (PC):=(PC)+3+rel и (C):=0

если data8>(Rn), то (PC):=(PC)+3+rel и (C):=1

если data8=(Rn), то (PC):=(PC)+3 и

(C):=0

;(R7)=80H, (C)=0, (PC)=300H, ;MT5 соответствует адресу

;30FH, rel=0CH

CJNE R7,#81H,MT5 ;(C)=1,

;(R7)=80H, (PC)=30FH

 

CJNE @Ri,#data8,addr

1 0 1 1 0 1 1 i

data8

rel

где iÎ{0,1}

 

Команда "сравнение и переход, если не равно" сравнивает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое используемой ячейки не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое используемой ячейки больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на ((Ri)).

Алгоритм

Пример

если data8<((Ri)), то (PC):=(PC)+3+rel и (C):=0

если data8>((Ri)), то (PC):=(PC)+3+rel и (C):=1

если data8=((Ri)), то

(PC):=(PC)+3 и (C):=0

;(R0)=41H, (C)=1, (PC)=200H,

;в РПД (41H)=57H,

;MT6 соответствует адресу

;22AH, rel=27H

CJNE @R0,#29H,MT6 ;(C)=0,

;(PC)=22AH,

;в РПД (41H)=57H

 

CLR A

1 1 1 0 0 1 0 0

 

Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=0

;(A)=6CH, (C)=0, (AC)=1

CLR A ;(A)=00H, (C)=0, (AC)=1

 

CLR C

1 1 0 0 0 0 1 1

 

Команда "сброс флага переноса" сбрасывает (обнуляет) содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C):=0

;(C)=1

CLR C ;(C)=0

 

CLR bit

1 1 0 0 0 0 1 0

bit

Команда "сброс бита" сбрасывает (обнуляет) содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(bit):=0

;(P1)=5EH=01011110B

;в РПД (28H)=31H

CLR P1.3 ;(P1)=56H=01010110B

CLR 40H ;(28H)=30H

 

CPL A

1 1 1 1 0 1 0 0

 

Команда "инверсия аккумулятора" инвертирует содержимое каждого бита аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):= 

;(A)=65H=01100101B

CPL A ;(A)=9AH=10011010B

 

CPL C

1 0 1 1 0 0 1 1

 

Команда "инверсия флага переноса" инвертирует содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C):= 

;(C)=1, (AC)=1, (OV)=0

CPL C ;(C)=0, (AC)=1, (OV)=0

 

CPL bit

1 0 1 1 0 0 1 0

bit

Команда "инверсия бита" инвертирует содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(bit):= 

;(P1)=39H=00111001B

CPL P1.1

CPL P1.3 ;(P1)=33H=00110011B

 

DA A

1 1 0 1 0 1 0 0

 

Команда "десятичная коррекция аккумулятора" упорядочивает 8-битовую величину в аккумуляторе A, полученную в результате выполненной ранее команды сложения двух переменных, представленных в двоично-десятичном формате. Для выполнения сложения может использоваться любая из типов команд ADD или ADDC. Если значение битов 3-0 аккумулятора превышает 9 (xxxx1010B-xxxx1111B) или, если содержимое флага AC установлено в "1", то к содержимому A прибавляется 06H, при этом получается соответствующая двоично-десятичная цифра в младшем полубайте A. Указанное сложение не изменяет содержимое флага AC, но устанавливает в "1" содержимое флага переноса C, если перенос из поля младших четырех бит распространяется через все старшие биты A, в противном случае - не изменяет (C). Далее, если содержимое флага C равно "1", или если значение битов 7-4 аккумулятора превышает 9 (1010xxxxB-1111xxxxB), то это значение увеличивается на 6, создавая соответствующую двоично-десятичную цифру в старшем полубайте A. При этом флаг C устанавливается (не изменяется), если имеется (отсутствует) перенос из бита 7 аккумулятора. Время выполнения команды 1 цикл.

Алгоритм

Пример

если (A[3-0])>9 или (AC)=1,

то (A):=(A)+6

если (A[7-4])>9 или (C)=1,

то (A[7-4]):=(A[7-4])+6

;(A)=30H, (R3)=99H

ADD A,R3 ;(A)=0C9H,

;(AC)=0, (C)=0

DA A ;(C)=1, (A)=29H, (AC)=0

 

DEC A

0 0 0 1 0 1 0 0

 

Команда "декремент" производит вычитание "1" из содержимого аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)-1

;(A)=00H, (C)=1, (AC)=1

DEC A ;(A)=0FFH, (C)=1, (AC)=1

 

DEC Rn ;где n=0-7

0 0 0 1 1 r r r

  где rrrB=000B-111B

Команда "декремент" производит вычитание "1" из содержимого заданного регистра Rn выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn):=(Rn)-1, где n=0-7

;(R1)=35H, (C)=0, (AC)=1

DEC R1 ;(R1)=34H, (C)=0, (AC)=1

 

DEC direct

0 0 0 1 0 1 0 1

direct

Команда "декремент" производит вычитание "1" из содержимого ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct):=(direct)-1

;(SCON)=0A0H, (C)=1, (AC)=0

DEC SCON ;(SCON)=9FH,

;(C)=1, (AC)=0

 

DEC @Ri ;где iÎ{0,1}

0 0 0 1 0 1 1 i

 

Команда "декремент" производит вычитание "1" из содержимого ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri)):=((Ri))-1, где iÎ{0,1}

;(R1)=7FH, в РПД (7FH)=40H

DEC @R1 ;(R1)=7FH,

;в РПД (7FH)=3FH

 

DIV AB

1 0 0 0 0 1 0 0

 

Команда "деление" делит 8-битовую переменную из аккумулятора A на 8-битовую переменную из регистра B. Аккумулятору присваивается целая часть частного (старшие разряды), а регистру B - остаток. Содержимое флага переноса C сбрасывается в "0". Содержимое флага переполнения OV также сбрасывается, а в случае деления на нуль - устанавливается в "1". Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.

Алгоритм

Пример

(A):=(A):(B), (B):=mod[(A):(B)], (C):=0

если (В)¹0, то (OV):=0

если (В)=0, то (OV):=1

;(A)=0FBH=251, (B)=12H=18,

;(C)=1, (OV)=1

DIV AB ;(C)=0, (OV)=0,

;(A)=0DH=13, (B)=11H=17

 

DJNZ Rn,addr ;где n=0-7

1 1 0 1 1 r r r

rel

 где rrrB=000-111B

Команда "декремент и переход, если не равно нулю" выполняет вычитание "1" из содержимого заданного регистра Rn выбранного банка и осуществляет переход по адресу addr, если содержимое Rn не равно нулю, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда DJNZ Rn,addr на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(Rn):=(Rn)-1, где n=0-7

если (Rn)¹0, то (PC):=(PC)+2+rel

если (Rn)=0, то (PC):=(PC)+2

;(R3)=0AH, rel=0FEH

MT5: DJNZ R3,MT5 ;команда ;выполнится 10 раз

 

DJNZ direct,addr

1 1 0 1 0 1 0 1

direct

rel

Команда "декремент и переход, если не равно нулю" выполняет вычитание "1" из содержимого ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций, и осуществляет переход по адресу addr, если содержимое используемой ячейки не равно нулю, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 3. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct):=(direct)-1

если (direct)¹0, то (PC):=(PC)+3+rel

если (direct)=0, то (PC):=(PC)+3

;(P1)=0AH, rel=0FDH

MT5: DJNZ P1,MT5 ;команда ;выполнится 10 раз

 

INC A

0 0 0 0 0 1 0 0

 

Команда "инкремент байта" производит прибавление "1" к содержимому аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)+1

;(A)=0FFH, (C)=1, (AC)=1

INC A ;(A)=00H, (C)=1, (AC)=1

 

INC Rn ;где n=0-7

0 0 0 0 1 r r r

  где rrrB=000B-111B

Команда "инкремент байта" производит прибавление "1" к содержимому заданного регистра Rn выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn):=(Rn)+1, где n=0-7

;(R1)=35H, (C)=0, (AC)=1

INC R1 ;(R1)=36H, (C)=0, (AC)=1

 

INC direct

0 0 0 0 0 1 0 1

direct

Команда "инкремент байта" производит прибавление "1" к содержимому ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций. Команда на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct):=(direct)+1

;(TMOD)=0A5H, (C)=1, (AC)=0

;в РПД (23H)=0FFH

INC TMOD ;(TMOD)=0A6H,

;(C)=1, (AC)=0

INC 23H ;в РПД (23H)=00H,

;(C)=1, (AC)=0

INC @Ri ;где iÎ{0,1}

0 0 0 0 0 1 1 i

 

 

Команда "инкремент байта" производит прибавление "1" к содержимому ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri)):=((Ri))+1, где iÎ{0,1}

;(R0)=44H, в РПД (44H)=55H

INC @R0 ;(R0)=44H,

;в РПД (44H)=56H

 

INC DPTR

1 0 1 0 0 0 1 1

 

Команда "инкремент двух байтов" производит прибавление "1" к содержимому 16-битового указателя данных DPTR, причем переполнение младшего байта DPTR (DPL) приводит к увеличению на "1" содержимого старшего байта DPTR (DPH). Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(DPTR):=(DPTR)+1

;(DPH)=12H, (DPL)=0FFH,

INC DPTR ;(DPH)=13H, ;(DPL)=00H

 

JB bit,addr

0 0 1 0 0 0 0 0

bit

rel

Команда "переход, если бит установлен" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, установлено в "1", в противном случае выполняется следующая команда. Содержимое используемого бита не изменяется. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 3. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (bit)=1, то (PC):=(PC)+3+rel

если (bit)=0, то (PC):=(PC)+3

;MT6 соответствует

;адресу 2FFH,

;(PC)=2F0H, rel=0CH, (A)=96H

JB A.2,MT6 ;(PC)=2FFH, ;(A)=96H

JBC bit,addr

0 0 0 1 0 0 0 0

bit

rel

 

Команда "переход, если бит установлен и сброс этого бита" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, установлено в "1", в противном случае выполняется следующая команда. Содержимое используемого бита сбрасывается в "0". Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JB bit,addr.

Алгоритм

Пример

если (bit)=1, то (PC):=(PC)+3+rel

и (bit):=0

если (bit)=0, то (PC):=(PC)+3

;MT8 соответствует адресу 400H,

;(PC)=3F1H, rel=0CH, (A)=78H

JBС A.3,MT8 ;(PC)=400H, (A)=70H

 

JC addr

0 1 0 0 0 0 0 0

rel

Команда "переход, если флаг переноса установлен" выполняет переход по адресу addr, если содержимое флага переноса C установлено в "1", в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (С)=1, то (PC):=(PC)+2+rel

если (C)=0, то (PC):=(PC)+2

;MT1 соответствует адресу 1F0H,

;(PC)=1FFH, rel=0EFH, (C)=1

JС MT1 ;(PC)=1F0H, (C)=1

 

JMP @A+DPTR

0 1 1 1 0 0 1 1

 

Команда "косвенный переход" складывает 8-битовое содержимое аккумулятора A с 16-битовым содержимым указателя данных DPTR и загружает полученный результат в счетчик команд PC. Указанное сложение выполняется таким образом, что перенос из младших 8-ми бит распространяется на старшие биты результата. Содержимое A и DPTR не изменяется. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC):=(DPTR[15-0])+(A[7-0])

;(PC)=34EH, (DPTR)=329H, (A)=86H

JMP @A+DPTR ;(PC)=3AFH

 

JNB bit,addr

0 0 1 1 0 0 0 0

bit

rel

Команда "переход, если бит не установлен" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, сброшено в "0", в противном случае выполняется следующая команда. Содержимое используемого бита не изменяется. Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JB bit,addr.

Алгоритм

Пример

если (bit)=0, то (PC):=(PC)+3+rel

если (bit)=1, то (PC):=(PC)+3

;MT2 соответствует адресу 2FFH,

;(PC)=2F0H, rel=0CH, (A)=96H

JNB A.0,MT2 ;(PC)=2FFH, (A)=96H

 

JNC addr

0 1 0 1 0 0 0 0

rel

Команда "переход, если флаг переноса не установлен" выполняет переход по адресу addr, если содержимое флага переноса C сброшено в "0", в противном случае выполняется следующая команда. Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JC addr.

Алгоритм

Пример

если (С)=0, то (PC):=(PC)+2+rel

если (C)=1, то (PC):=(PC)+2

;MT1 соответствует адресу 200H,

;(PC)=1F0H, rel=0EH, (C)=0

JNС MT1 ;(PC)=200H, (C)=0

 

JNZ addr

0 1 1 1 0 0 0 0

rel

Команда "переход, если содержимое аккумулятора не равно нулю" выполняет переход по адресу addr, если содержимое A не ноль, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги и (A) не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (A)¹0, то (PC):=(PC)+2+rel

если (A)=0, то (PC):=(PC)+2

;MT4 соответствует адресу 183H,

;(PC)=200H, rel=81H, (A)=01H

JNZ MT4 ;(PC)=183H, (A)=01H

 

JZ addr

0 1 1 0 0 0 0 0

rel

Команда "переход, если содержимое аккумулятора равно нулю" выполняет переход по адресу addr, если все биты аккумулятора равны нулю, в противном случае выполняется следующая команда. Содержимое A не изменяется.  Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JNZ addr.

Алгоритм

Пример

если (A)=0, то (PC):=(PC)+2+rel

если (A)¹0, то (PC):=(PC)+2

;MT4 соответствует адресу 231H,

;(PC)=200H, rel=2FH, (A)=00H

JZ MT4 ;(PC)=231H, (A)=00H

 

LCALL addr16

0 0 0 1 0 0 1 0

addr16[15-8]

addr16[7-0]

Команда "длинный вызов подпрограммы" вызывает безусловно подпрограмму с начальным адресом addr16. При этом 16-разрядное содержимое счетчика команд PC увеличивается на 3 для получения адреса следующей команды и помещается в стек (сначала следует младший байт), а содержимое указателя стека SP увеличивается на 2. Адрес addr16 получается с помощью второго и третьего байтов команды, которые загружаются соответственно в старший и младший байты PC. Выполнение программы продолжается командой, находящейся по полученному адресу. Подпрограмма, следовательно, может начинаться в любом месте адресного пространства памяти программ объемом до 64 Кбайт. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC):=(PC)+3

(SP):=(SP)+1, ((SP)):=(PC[7-0])

(SP):=(SP)+1, ((SP)):=(PC[15-8])

(PC):=addr16[15-0]

;(SP)=10H, (PC)=135H,

;MT соответствует адресу 300H

LCALL MT ;(SP)=12H, (PC)=300H,

;в РПД (11H)=38H, (12H)=01H

 

LJMP addr16

0 0 0 0 0 0 1 0

addr16[15-8]

addr16[7-0]

Команда "длинный переход" выполняет безусловный переход по адресу addr16. Этот адрес получается с помощью второго и третьего байтов команды, которые загружаются соответственно в старший и младший байты программного счетчика PC. Переход, таким образом, может осуществляться по любому адресу пространства памяти программ объемом до 64 Кбайт. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC):=addr16[15-0]

;(PC)=234H

LJMP 12CH ;(PC)=12CH

 

MOV A,Rn ;где n=0-7

1 1 1 0 1 r r r

  где rrrB=000B-111B

Команда "переслать байт" выполняет загрузку аккумулятора A содержимым заданного регистра Rn выбранного банка, при этом содержимое Rn не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(Rn), где n=0-7

;(A)=0FAH, (R6)=93H

MOV A,R6 ;(A)=93H, (R6)=93H

 

MOV A,@Ri ;где iÎ{0,1}

1 1 1 0 0 1 1 i

 

Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=((Ri)), где iÎ{0,1}

;(A)=0FDH, (R1)=30H,

;в РПД (30H)=17H

MOV A,@R1 ;(A)=17H, (R1)=30H,

;в РПД (30H)=17H

 

MOV A,direct

1 1 1 0 0 1 0 1

direct

Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(direct)

 

;(A)=24H, (DPL)=3DH

MOV A,DPL ;(A)=3DH,(DPL)=3DH

 

MOV A,#data8

0 1 1 1 0 1 0 0

data8

Команда "переслать байт" выполняет загрузку аккумулятора A байтом данных data8, непосредственно указанным в команде, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=data8

;(A)=81H

MOV A,#0FFH ;(A)=0FFH

 

MOV Rn,A ;где n=0-7

1 1 1 1 1 r r r

  где rrrB=000B-111B

Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка содержимым аккумулятора A, при этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn):=(A), где n=0-7

;(A)=55H, (R6)=93H

MOV R6,A ;(A)=55H, (R6)=55H

 

MOV Rn,direct ;где n=0-7

1 0 1 0 1 r r r

direct

 где rrrB=000-111B

Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка содержимым ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций. При этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(Rn):=(direct), где n=0-7

 

;(R5)=81H, в РПД (16H)=22H

MOV R5,16H ;(R5)=22H,

;в РПД (16H)=22H

 

MOV Rn,#data8 ;где n=0-7

0 1 1 1 1 r r r

data8

 где rrrB=000-111B

Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка байтом данных, непосредственно указанным в команде и имеющим символическое имя data8. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn):=data8, где n=0-7

;(R2)=5DH

MOV R2,#0FCH ;(R2)=0FCH

 

MOV direct,A

1 1 1 1 0 1 0 1

direct

Команда "переслать байт" пересылает содержимое аккумулятора A в ячейку, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct):=(A)

 

;(A)=3CH, (B)=4DH

MOV B,A ;(A)=3CH,(B)=3CH

 

MOV direct,Rn ;где n=0-7

1 0 0 0 1 r r r

direct

 где rrrB=000-111B

Команда "переслать байт" пересылает содержимое заданного регистра Rn выбранного банка в ячейку, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое Rn не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 циклa.

Алгоритм

Пример

(direct):=(Rn), где n=0-7 

 

;(R7)=5EH, (P1)=0FFH

MOV P1,R7 ;(R7)=5EH, (P1)=5EH

 

MOV direct,direct

1 0 0 0 0 1 0 1

direct

direct

Команда "переслать байт" пересылает байт данных между двумя ячейками, расположенными в области резидентной памяти данных (РПД) или (и) в среде регистров специальных функций. Адрес ячейки-источника (ячейки-приемника) определяется вторым (первым) операндом и размещается во втором (в третьем) байте команды. Необходимо отметить, что при пересылке содержимое ячейки-источника не изменяется. Команда на состояние флагов не влияет и выполняется за 2 циклa.

Алгоритм

Пример

(direct):=(direct)

 

;в РПД (4CH)=7AH, (B)=0F4H

MOV 4CH,B ;(B)=0F4H,

;в РПД (4CH)=0F4H

 

MOV direct,@Ri ;где iÎ{0,1}

1 0 0 0 0 1 1 i

direct

Команда "переслать байт" пересылает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, в ячейку, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое ячейки-источника не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct):=((Ri)), где iÎ{0,1}

 

;в РПД (6FH)=57H,

;(R0)=6FH, (PSW)=0C2H

MOV PSW,@R0 ;(PSW)=57H, ;(R0)=6FH, в РПД (6FH)=57H

 

MOV direct,#data8

0 1 1 1 0 1 0 1

direct

data8

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

Алгоритм

Пример

(direct):=data8

 

;(P2)=0FFH

MOV P2,#33H ;(P2)=33H

 

MOV @Ri,A ;где iÎ{0,1}

1 1 1 1 0 1 1 i

 

Команда "переслать байт" пересылает содержимое аккумулятора A в ячейку резидентной памяти данных (РПД), адресуемую содержимым заданного регистра Ri выбранного банка, при этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri)):=(A), где iÎ{0,1}

;(A)=11H, (R1)=25H,

;в РПД (25H)=48H

MOV @R1,A ;(A)=11H, (R1)=25H,

;в РПД (25H)=11H

 

MOV @Ri, direct ;где iÎ{0,1}

1 0 1 0 0 1 1 i

direct

Команда "переслать байт" загружает ячейку резидентной памяти данных (РПД), адресуемую содержимым заданного регистра Ri выбранного банка, содержимым ячейки, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое ячейки-источника не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

((Ri)):=(direct), где iÎ{0,1}

 

;в РПД (55H)=31H,

;(R0)=55H, (TH1)=0CDH

MOV @R0,TH1 ;(TH1)=0CDH, ;(R0)=55H, в РПД (55H)=0CDH

 

MOV @Ri,#data8 ;где iÎ{0,1}

0 1 1 1 0 1 1 i

data8

Команда "переслать байт" копирует байт данных data8, непосредственно указанный в команде, в ячейку резидентной памяти данных (РПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri)):=data8, где iÎ{0,1}

;(R1)=53H, в РПД (53H)=86H

MOV @R1,#77H ;(R1)=53H,

;в РПД (53H)=77H

 

MOV C,bit

1 0 1 0 0 0 1 0

bit

Команда "переслать бит" загружает флаг переноса C содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (либо регистров специальных функций), допускающей побитовое обращение. Команда на состояние других флагов, а также используемого бита не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C):=(bit)

 

;(C)=0, (P1[4])=1

MOV C,P1.4 ;(C)=1,

;(P1[4])=1

 

MOV bit,C

1 0 0 1 0 0 1 0

bit

Команда "переслать бит" копирует содержимое флага переноса C в бит, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Команда имеет время выполнения 2 цикла и на состояние флагов не влияет, за исключением случая, когда флаг является операндом-приемником.

Алгоритм

Пример

(bit):=(C)

 

;в РПД (22H)=0D0H, (C)=1

MOV 10H,C ;(C)=1,

;в РПД (22H)=0D1H

 

MOV DPTR,#data16

1 0 0 1 0 0 0 0

data16[15-8]

data16[7-0]

Команда "переслать два байта" загружает указатель данных DPTR 16-битовой константой data16, непосредственно указанной в команде, причем содержимое второго и третьего байтов команды загружается соответственно в старший (DPH) и младший (DPL) байты DPTR. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(DPTR):=data16

;(DPH)=23H, (DPL)=0DFH

MOV DPTR,#1234H ;(DPH)=12H, (DPL)=34H

 

MOVC A,@A+DPTR

1 0 0 1 0 0 1 1

 

Команда "переслать байт" загружает аккумулятор A содержимым ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого 16-битового указателя данных DPTR. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Содержимое DPTR не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(A):=((A)+(DPTR))

;(A)=01H, (DPTR)=30FFH,

;в ПП (3100H)=22H

MOVC A,@A+DPTR ;(A)=22H, ;(DPTR)=30FFH

 

MOVC A,@A+PC

1 0 0 0 0 0 1 1

 

Команда "переслать байт" загружает в аккумулятор A содержимое ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого программного счетчика PC, которое увеличено на единицу. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(A):=((A)+(PC)+1)

;(A)=11H, (PC)=2300H,

;в ПП (2312H)=44H

MOVC A,@A+PC ;(A)=44H,

;(PC)=2301H

 

MOVX A,@Ri ;где iÎ{0,1}

1 1 1 0 0 0 1 i

 

Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.

Алгоритм

Пример

(A):=((Ri)), где iÎ{0,1}

;(A)=0CCH, (R0)=44H,

;в ВПД (44H)=3EH

MOVX A,@R0 ;(A)=3EH, (R0)=44H,

;в ВПД (44H)=3EH

 

MOVX A,@DPTR

1 1 1 0 0 0 0 0

 

Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым 16-битового указателя данных DPTR, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.

Алгоритм

Пример

(A):=((DPTR))

;(A)=76H, (DPTR)=6D44H,

;в ВПД (6D44H)=88H

MOVX A,@DPTR ;(DPTR)=6D44H,

;(A)=88H, в ВПД (6D44H)=88H

 

MOVX @Ri,A ;где iÎ{0,1}

1 1 1 1 0 0 1 i

 

Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.

Алгоритм

Пример

((Ri)):=(A), где iÎ{0,1}

;(A)=0C6H, (R1)=22H,

;в ВПД (22H)=33H

MOVX @R1,A ;(A)=0C6H, (R1)=22H,

;в ВПД (22H)=0C6H

 

MOVX @DPTR,A

1 1 1 1 0 0 0 0

 

Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым 16-битового указателя данных DPTR. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.

Алгоритм

Пример

((DPTR)):=(A)

;(A)=55H, (DPTR)=1234H,

;в ВПД (1234H)=11H

MOVX @DPTR,A ;(DPTR)=1234H,

;(A)=55H,

;в ВПД (1234H)=55H

 

MUL AB

1 0 1 0 0 1 0 0

 

Команда "умножение" умножает 8-битовую переменную из аккумулятора A на 8-битовую переменную из регистра B, при этом старший и младший байты произведения загружаются соответственно в B и A. Содержимое флага переноса C сбрасывается в "0". Содержимое флага переполнения OV устанавливается в "1" если результат умножения больше 0FFH, в противном случае - также сбрасывается. Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.

Алгоритм

Пример

(A)×(B)=data16

(A):=data16[7-0], (B):=data16[15-8]

(C):=0

если data16 £ 0FFH, то (OV):=0

если data16 > 0FFH, то (OV):=1

;(A)=50H=80, (B)=0A0H=160,

;(C)=1, (OV)=0

MUL AB ;(C)=0, (OV)=1,

;(A)=00H, (B)=32H

 

NOP

0 0 0 0 0 0 0 0

 

Команда "нет операции" увеличивает содержимое программного счетчика PC на единицу, при этом состояние всех остальных программно доступных элементов микроконтроллера не изменяется. Команда имеет время выполнения 1 цикл.

Алгоритм

Пример

(PC):=(PC)+1

 

;(PC)=1FFH

NOP

NOP ;(PC)=201H

 

ORL A,Rn ;где n=0-7

0 1 0 0 1 r r r

  где rrrB=000B-111B

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ú(Rn), где n=0-7

;(A)=0FH, (R4)=0F3H

ORL A,R4 ;(A)=0FFH,

;(R4)=0F3H

 

ORL A,@Ri ;где iÎ{0,1}

0 1 0 0 0 1 1 i

 

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ú((Ri)), где iÎ{0,1}

;(A)=22H, (R0)=55H,

;в РПД (55H)=11H

ORL A,@R0 ;(A)=33H, (R0)=55H, ;в РПД (55H)=11H

 

ORL A,direct

0 1 0 0 0 1 0 1

direct

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ú(direct)

 

;(A)=23H, (PSW)=14H

ORL A,PSW ;(A)=37H,

;(PSW)=14H

 

ORL A,#data8

0 1 0 0 0 1 0 0

data8

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

Алгоритм

Пример

(A):=(A)Údata8

;(A)=36H

ORL A,#41H ;(A)=77H

 

ORL direct,A

0 1 0 0 0 0 1 0

direct

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct):=(A)Ú(direct)

;(A)=55H, (P2)=0AAH

ORL P2,A ;(A)=55H,

;(P2)=0FFH

 

ORL direct,#data8

0 1 0 0 0 0 1 1

direct

data8

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct):=(direct)Údata8

;(P1)=0FFH

ORL P1,#73H ;(P1)=0FFH

 

ORL C,bit

0 1 1 1 0 0 1 0

bit

Команда "логическое ИЛИ" выполняет дизъюнкцию содержимого флага переноса C с содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Результат помещается в С. Содержимое используемого бита не изменяется. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(C):=(C)Ú(bit)

 

;(C)=0, (P1[2])=1,

;в РПД (2EH)=12H

ORL C,P1.2 ;(C)=1, (P1[2])=1

ORL C,70H ;(C)=1,

;в РПД (2EH)=12H

 

ORL C,/bit

1 0 1 0 0 0 0 0

bit

Команда "логическое ИЛИ" выполняет дизъюнкцию содержимого флага переноса C с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 8-разрядный адрес которого определяется символическим именем bit, не изменяется. Результат помещается в С. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(C):=(C)Ú 

;(C)=0, (AC)=0

ORL C,/AC ;(C)=1, (AC)=0

 

POP direct

1 1 0 1 0 0 0 0

direct

Команда "чтение из стека" копирует содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым указателя стека SP, в ячейку, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое указателя стека уменьшается на единицу. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct):=((SP))

(SP):=(SP)-1

;(SP)=32H, (DPH)=0AAH,

;в РПД (32H)=55H

POP DPH ;(SP)=31H,(DPH)=55H

 

PUSH direct

1 1 0 0 0 0 0 0

direct

Команда "запись в стек" увеличивает содержимое указателя стека SP на единицу и после этого копирует содержимое ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций, в ячейку РПД, адресуемую содержимым SP. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(SP):=(SP)+1

((SP)):=(direct)

 

;(SP)=44H, (DPL)=33H,

;в РПД (45H)=0CEH

PUSH DPL ;(SP)=45H, в РПД (45H)=33H

 

RET

0 0 1 0 0 0 1 0

 

Команда "возврат из подпрограммы" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC. При этом содержимое SP уменьшается на два. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC[15-8]):=((SP))

(SP):=(SP)-1

(PC[7-0]):=((SP))

(SP):=(SP)-1

;(SP)=32H, (PC)=3DFH,

;в РПД (31H)=23H, (32H)=01H

RET ;(SP)=30H, (PC)=123H,

;в РПД (31H)=23H, (32H)=01H

 

RETI

0 0 1 1 0 0 1 0

 

Команда "возврат из прерывания" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC и разрешает прерывания с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. При этом содержимое SP уменьшается на два. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

 

Алгоритм

Пример

 

(PC[15-8]):=((SP))

(SP):=(SP)-1

(PC[7-0]):=((SP))

(SP):=(SP)-1

;(SP)=23H, (PC)=0D3FH,

;в РПД (22H)=34H, (23H)=02H

RETI ;(SP)=21H, (PC)=234H,

;в РПД (22H)=34H, (23H)=02H

RL A

0 0 1 0 0 0 1 1

 

 

Команда "сдвиг аккумулятора влево" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 пересылается в бит 0. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M+1]):=(A[M]), где M=0-6

(A[0]):=(A[7])

;(A)=85H, (C)=0

RL A

RL A ;(A)=16H, (C)=0

 

RLC A

0 0 1 1 0 0 1 1

 

Команда "сдвиг аккумулятора влево через флаг переноса" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 0 аккумулятора. Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M+1]):=(A[M]), где M=0-6

(A[0]):=(С), (С):=(A[7])

;(A)=85H, (C)=0

RLC A ;(A)=0AH, (C)=1

 

RR A

0 0 0 0 0 0 1 1

 

Команда "сдвиг аккумулятора вправо" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0 пересылается в бит 7. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M]):=(A[M+1]), где M=0-6

(A[7]):=(A[0])

;(A)=85H, (C)=1

RR A

RR A ;(A)=61H, (C)=1

 

RRC A

0 0 0 1 0 0 1 1

 

Команда "сдвиг аккумулятора вправо через флаг переноса" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 7 аккумулятора. Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M]):=(A[M+1]), где M=0-6

(A[7]):=(С), (С):=(A[0])

;(A)=85H, (C)=0

RRC A ;(A)=42H, (C)=1

 

SETB C

1 1 0 1 0 0 1 1

 

Команда "установить бит" устанавливает содержимое флага переноса C в "1". Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C):=1

;(C)=0

SETB C ;(C)=1

 

SETB bit

1 1 0 1 0 0 1 0

bit

Команда "установить бит" устанавливает в "1" содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда имеет время выполнения 1 цикл и на состояние флагов не влияет, за исключением случая, когда флаг является операндом команды.

Алгоритм

Пример

(bit):=1

 

;(P2)=38H

SETB P2.0 ;(P2)=39H

 

SJMP addr

1 0 0 0 0 0 0 0

rel

Команда "короткий переход" выполняет безусловный переход по адресу addr, определяемому при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC):=(PC)+2+rel

;MT4 соответствует адресу 104H,

;(PC)=165H, rel=9DH

SJMP MT4 ;(PC)=104H

 

SUBB A,Rn ;где n=0-7

1 0 0 1 1 r r r

  где rrrB=000B-111B

Команда "вычитание с заемом" вычитает содержимое заданного регистра Rn выбранного банка вместе с содержимым флага переноса С из содержимого аккумулятора A, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении заема в разрядах 7 и 3 аккумулятора устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Содержимое флага переполнения OV устанавливается, если есть заем в бите 6 и нет заема в бите 7, или есть заем в бите 7 и нет - в бите 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.

Алгоритм

Пример

(A):=(A)-(C)-(Rn), где n=0-7

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=0C9H, (R2)=54H, (C)=1

SUBB A,R2 ;(A)=74H,(R2)=54H,

;(AC)=0, (C)=0, (OV)=1

 

SUBB A,@Ri ;где iÎ{0,1}

1 0 0 1 0 1 1 i

 

Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, из содержимого аккумулятора A, помещая результат в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)-(C)-((Ri)), где iÎ{0,1}

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=49H, (R0)=3AH,

;в РПД (3AH)=68H, (C)=1

SUBB A,@R0 ;(A)=0E0H,

;(AC)=0, (C)=1, (OV)=0

 

SUBB A,direct

1 0 0 1 0 1 0 1

direct

Команда "вычитание с заемом" вычитает из содержимого аккумулятора A содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)-(C)-(direct)

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=97H, (C)=0, (B)=25H

SUBB A,B ;(A)=72H, (B)=25H,

;(AC)=0, (C)=0, (OV)=1

 

SUBB A,#data8

1 0 0 1 0 1 0 0

data8

Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с байтом данных data8, непосредственно указанным в команде, из содержимого аккумулятора A, помещая результат в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A):=(A)-(C)-data8

(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}

;(A)=0BEH, (C)=0

SUBB A,#3FH ;(A)=7FH,

;(AC)=1, (C)=0, (OV)=1

 

SWAP A

1 1 0 0 0 1 0 0

 

Команда "обмен тетрадой" осуществляет обмен содержимым младших четырех и старших четырех битов аккумулятора A. Команда на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[3-0]):=(A[7-4])

(A[7-4]):=(A[3-0])

;(A)=49H

SWAP A ;(A)=94H

 

XCH A,Rn ;где n=0-7

1 1 0 0 1 r r r

  где rrrB=000B-111B

Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(Rn), где n=0-7

(Rn):=(A)

;(A)=0FAH, (R6)=93H

XCH A,R6 ;(A)=93H, (R6)=0FAH

 

XCH A,@Ri ;где iÎ{0,1}

1 1 0 0 0 1 1 i

 

Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=((Ri)), где iÎ{0,1}

((Ri)):=(A)

;(A)=0FDH, (R1)=30H,

;в РПД (30H)=17H

XCH A,@R1 ;(A)=17H, (R1)=30H,

;в РПД (30H)=0FDH

 

XCH A,direct

1 1 0 0 0 1 0 1

direct

Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(direct)

(direct):=(A)

;(A)=24H, (DPL)=3DH

XCH A,DPL ;(A)=3DH,

;(DPL)=24H

 

XCHD A,@Ri ;где iÎ{0,1}

1 1 0 1 0 1 1 i

 

Команда "обмен тетрадой" выполняет обмен содержимого младшей тетрады (биты 3-0) аккумулятора A с содержимым младшей тетрады ячейки резидентной памяти данных (РПД), при этом содержимое старших тетрад A и используемой ячейки, адресуемой содержимым заданного регистра Ri выбранного банка, не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[3-0]):=((Ri))[3-0], где iÎ{0,1}

((Ri))[3-0]:=(A[3-0])

;(A)=0FDH, (R1)=30H,

;в РПД (30H)=17H

XCHD A,@R1 ;в РПД (30H)=1DH, ;(A)=0F7H, (R1)=30H

 

XRL A,Rn ;где n=0-7

0 1 1 0 1 r r r

  где rrrB=000B-111B

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. При этом содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Å(Rn), где n=0-7

;(A)=0FH, (R4)=0F3H

XRL A,R4 ;(A)=0FCH, (R4)=0F3H

 

XRL A,@Ri ;где iÎ{0,1}

0 1 1 0 0 1 1 i

 

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Å((Ri)), где iÎ{0,1}

;(A)=22H, (R0)=55H,

;в РПД (55H)=33H

XRL A,@R0 ;(A)=11H,

;(R0)=55H, в РПД (55H)=33H

 

XRL A,direct

0 1 1 0 0 1 0 1

direct

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Å(direct)

 

;(A)=23H, (PSW)=34H

XRL A,PSW ;(A)=17H, (PSW)=34H

 

XRL A,#data8

0 1 1 0 0 1 0 0

data8

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A):=(A)Ådata8

;(A)=36H

XRL A,#22H ;(A)=14H

 

XRL direct,A

0 1 1 0 0 0 1 0

direct

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct):=(A)Å(direct)

;(A)=55H, (P2)=63H

XRL P2,A ;(A)=55H, (P2)=36H

 

XRL direct,#data8

0 1 1 0 0 0 1 1

direct

data8

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct):=(direct)Ådata8

;(P1)=0FFH

XRL P1,#11H ;(P1)=0EEH

Директивы языка АСМ51

Директивы в отличие от команд ассемблерного языка не преобразуются в объектный код и применяются для управления процессом трансляции исходной МК-программы.

Рассмотрим основные директивы языка АСМ51.

ASCII <операнды>

Директива последовательно размещает в ячейках памяти программ (ПП) коды ASCII символов строки, указанной в поле <операнды> и заканчивающейся возвратом каретки.

Пример

;MT1 соответствует адресу

;20FH в ПП

MT1 ASCII PEN

;в ПП (20FH)=50H,

;(210H)=45H, (211H)=4EH

DB <операнды>

Директива последовательно размещает в ячейках памяти программ (ПП) байтовые константы, перечисленные через запятую в поле <операнды>. Если указанное поле отсутствует, то используется одна ячейка ПП, в которую заносится "0".

Пример

;MT1 соответствует адресу

;1FFH в ПП

MT1 DB 12H,<.NOT.11H+1

    DB 10100101B,32

;в ПП (1FFH)=12H, ;(200H)=0EFH,

;(201H)=0A5H, (202H)=20H

DS <операнды>

Директива резервирует ячейки памяти программ (ПП), причем количество этих ячеек определяется значением, указанным в поле <операнды>.

Пример

;MT2 соответствует адресу

;200H в ПП

MT2 DS 12H ;(PC)=212H

DW <операнды>

Директива последовательно размещает в ячейках памяти программ (ПП) 2-байтовые константы, перечисленные через запятую в поле <операнды>. Если указанное поле отсутствует, то используются две ячейки ПП, в которые заносится "0".

Пример

;MT1=20FH

MT1 DW 3212H

    DW

;в ПП (20FH)=32H,

;(210H)=12H,

;(211H)=(212H)=00H

END

Директива определяет конец МК-программы.

ENDM

Директива определяет конец макроопределения.

<метка> EQU <операнды>

Директива присваивает символическому имени, размещенному в поле <метка>, байтовое или 2-байтовое значение, указанное в поле <операнды>. Это имя не может быть переопределено.

Пример

SS EQU 25H

ZZ EQU SS+2

PP EQU ZZ-1

   MOV A,#PP ;(A)=26H

EXTERN <операнды>

Директива объявляет символические имена, указанные через запятую в поле <операнды>, как внешние, то есть определяемые в другой (других) МК-программе (МК-программах). 

INCLUDE <операнды>

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

LIST

Директива разрешает вывод листинга следующего за ней текста МК-программы. По умолчанию выполняется директива NLIST.

LONG <операнды>

Директива последовательно размещает в ячейках памяти программ (ПП) 4-байтовые константы, перечисленные через запятую в поле <операнды>. Если указанное поле отсутствует, то используются четыре ячейки ПП, в которые заносится "0".

Пример

;MT1 соответствует адресу

;4EEH в ПП

MT1 LONG 11223344H

;в ПП (4EEH)=11H,

;(4EFH)=22H, (4F0H)=33H,

;(4F1H)=44H

<метка> MACRO <операнды>

Директива начинает макроопределение, которое составляется из операторов языка АСМ51 (строк исходного текста МК-программы) и должно заканчиваться директивой ENDM. Любое поле включенных в макроопределение операторов (кроме поля <комментарий>) может быть представлено формальным параметром, которые перечисляются через запятую в поле <операнды>. В поле <метка> указывается символическое имя макрокоманды, которая будет определяться данным макроопределением. Макрокоманда может использоваться в МК-программе произвольное число раз и при трансляции заменяется на тело своего макроопределения, причем фактические параметры, перечисленные через запятую в поле <операнды> макрокоманды подставляются вместо соответствующих формальных параметров макроопределения.

До трансляции

После трансляции

 

TC MACRO x,y,z

   MOV A,#z

   x A,#y

   ENDM

   MOV R0,#25

   TC ORL,15H,10

   MOVX @R0,A

   END

 1             TC MACRO x,y,z

 2                MOV A,#z

 3                x A,#y

 4                ENDM

 5  0000  7819    MOV R0,#25

 6  0002          TC ORL,15H,10

 7  0002  740A    MOV A,#10

 8  0004  4415    ORL A,#15H

 9  0006          ENDM

10  0006  F2      MOVX @R0,A

11  0007          END

NLIST

Директива запрещает вывод листинга следующего за ней текста МК-программы, если ранее выполнялась директива LIST.

ORG <операнды>

Директива устанавливает значение программного счетчика PC, причем указанное значение определяется содержимым поля <операнды>. При отсутствии директивы исходное значение PC принимается равным нулю.

Пример

;(PC)=1234H

ORG 12H

;(PC)=0012H

PUBLIC <операнды>

Директива объявляет символические имена, указанные через запятую в поле <операнды>, как глобальные (общие), то есть такие, к которым можно осуществлять ссылку из других МК-программ.

<метка> REG <операнды>

Директива присваивает символическому имени, размещенному в поле <метка>, байтовое или битовое значение, указанное в поле <операнды>, причем указанное значение может быть задано не только числом, другим символическим именем или выражением, но и именем программно доступного элемента микроконтроллера. Символическое имя, размещенное в поле <метка>, не может быть переопределено.

Пример

X   REG R4 ;X определя-

;ется как регистр R4

Y   REG P3 ;Y определя-

;ется как порт P3

Z   REG Y ;Z определяет-

;ся как порт P3

  1. B.0 REG C ;B.0 определя-

;ется как флаг C

  1. B.1 REG X.1 ;B.1 опреде-

;ляется как первый бит

;регистра R4

RECSIZE <операнды>

Директива используется для управления редактором связей. В частности, от содержимого поля <операнды> этой директивы зависит максимальный размер записей в загрузочном модуле МК-программы (см. подраздел 3.3).

SYMBOLS

Директива используется для управления редактором связей. В частности, разрешает формирование специального файла, содержащего символические имена, в формате MICROTEK или ZAK (см. подраздел 3.3).

<метка> VAR <операнды>

Директива присваивает символическому имени, размещенному в поле <метка>, байтовое или 2-байтовое значение, указанное в поле <операнды>. Это имя может быть переопределено.

Пример

SS VAR 25H

   MOV A,#SS ;(A)=25H

SS VAR 13H

   MOV A,#SS ;(A)=13H




Комментарии