русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Система команд микроконтроллеров MCS-51


Дата добавления: 2015-08-31; просмотров: 3027; Нарушение авторских прав


Система команд ОМЭВМ предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реалиного времени. Реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных. БИС семейства MCS-51 - 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС). Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр. Набор команд ОМЭВМ имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы. Синтаксис большинства команд ассемблерного языка состоит из мнемонического обозначения функции, всед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений. Систему команд условно можно разбить на пять групп:
  • Арифметические команды;
  • Логические команды;
  • Команды передачи данных;
  • Команды битового процессора;
  • Команды ветвления и передачи управления.
Существуют следующие типы адресации операндов-источников:
  • Регистровая адресация
  • Прямая адресация
  • Косвенно-регистровая адресация
  • Непосредственная адресация
  • Косвенно-регистровая адресация по сумме базового и индексного регистров
  Арифметические команды В наборе команд имеются следующие арифметические операции: сложение, сложение с учетом флага переноса, вычитание с заемом, инкременирование, декременирование, сравнение, десятичная коррекция, умножение и деление. В АЛУ производятся действия над целыми числами без знака. В двухоперандных операциях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом (SUBB) аккумулятор является первым операндом и принимает результат операции. Вторым операндом может быть рабочий регистр выбранного банка рабочих регистров, регистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байт непосредственных данных. Указанные операции влияют на флаги: пеполнения, переноса, промежуточного переноса и флаг четности в слове состояния процессора (PSW). Использование разряда переноса позволяет многократно повысить точность при операциях сложения (ADDC) и вычитания (SUBB). Выполнение операций сложения и вычитания с учетом знака может быть осуществлено с помощью программного управления флагом переполнения (OV) регистра PSW. Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операций в двоично-десятичном коде. Операции инкременирования и декременирования на флаги не влияют. Операции сравнения не влияют ни на операнд назначения, ни на операнд источника, но они влияют на флаги переноса. Существуют три арифметические операции, которые выполняются только на аккумуляторе: две команды проверки содержимого аккумулятора А (JZ, JNZ), и команда десятичной коррекции при сложении двоично-десятичных кодов. При операции умножения содержимое аккумулятора А умножается на содержимое регистра В и результат размещается следующим образом: младший байт в регистре В, старший - в регистре А. В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток от деления - в регистр В. Логические команды с байтовыми переменными Система команд позволяет реализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре-аккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этом может быть рабочий регистр в выбранном банке рабочих регистров; регистр внутреннего ОЗУ, адресуемый с помощью косвенно-регистровой адресации; прямоадресуемые ячейки внутреннего ОЗУ и регистры специального назначения; непосредственная величина. Указанные логические операции могут быть реализованы на любом прямоадресуемом регистре внутреннего ОЗУ или регистре специального назначения с использованием в качестве второго операнда содержимого аккумлятора А или непосредственных данных. Существуют логические операции, которые выполняются только на аккумуляторе: сброс и инвертирование всех восьми разрядов А; циклический сдвиг влево и впрво; циклический сдвиг влево и вправо с учетом флага переноса; обмен местами старшей и младшей тетрад (ниблов) внутри аккумулятора. Команды передачи данных Таблицы символов (кодов), зашитые в ПЗУ программы могут быть выбраны с помощью команд передачи данных с использованием косвенной адресации. Байт константы может быть передан в аккумулятор из ячейки памяти программ, адресуемой суммой базового регистра (PC или DPTR) и индексного регистра (содержимого А). Это обеспечивает, например, удобное средство реализации алгоритма преобразования кода ASCII в семисегментный код. Любая ячейка 256-байтового блока внешнего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 или R1 (выбранного банка рабочих регистров). Ячейка внутри адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр-указатель данных DPTR. Команды передачи между прямоадресуемыми регистрами позволяют заносить величину из порта в ячейку внутреннего ОЗУ без использования рабочих регистров или аккумулятора. В логическом процессоре любой прямоадресуемый бит может быть помещен в бит переноса и наоборот. Содержимое аккумулятора может быть обменено с содержимым рабочих регистров (выбранного банка) и с содержимым адресуемых с помощью косвенно-регистровой адресации ячеек внутреннего ОЗУ, а также с содержимым прямо-адресуемых ячеек внутреннего ОЗУ и с содержимым регистров специального назначения. Младший нибл (разряды 3-0) содержимого аккумулятора, может быть обменен с младшим ниблом содержимого ячеек внутреннего ОЗУ, выбираемых с помощью косвенно-регистровой адресации. Команды битового процессора Битовый процессор является частью архитектуры МК семейства MCS51 и его можно рассматривать как независимый процессор побитовой обработки. Битовый процессор выполняет набор команд, имеет свое побитово-адресуемое ОЗУ и свой ввод-вывод. Команды, оперирующие с битами, обеспечивают прямую адресацию 128 битов (0-127) в шестнадцати ячейках внутреннего ОЗУ (ячейки с адресами 20Н-2FH) и прямую побитовую адресацию регистров специального назначения, адреса которых кратны восьми. Каждый из отдельно адресуемых битов может быть установлен в "1", сброшен в "0", инвертирован, проверен. Могут быть реализованы переходы: если бит установлен; если бит не установлен; переход, если бит установлен, со сбросом этого бита; бит может быть перезаписан в (из) разряда переноса. Между любым прямоадресуемым битом и флагом переноса могут быть произведены логические операции "И", "ИЛИ", где результат заносится в разряд флага переноса. Команды побитовой обработки обеспечивают реализацию сложных функций комбинаторной логики и оптимизацию программ пользователя. Команды ветвления и передачи управления Адресное пространство памяти программ не имеет страничной организации, что позволяет свободно перемщать фрагменты программы внутри адресного пространства, при этом не требуется перезасылка (изменение) номера страницы. Перемещение отдельных фрагментов программы обеспечивает возможность использования перемещаемых программных модулей различными программами. Команды 16-разрядных переходов и вызовов подпрограмм позволяют осуществлять переход в любую точку адресного пространства памяти программ объемом 64 Кбайт. Команды 11-разрядных переходов и вызовов подпрограмм обеспечивают переходы внутри программного модуля емкостью 2 Кбайт. В системе команд имеются команды условных и безусловных переходов относительно начального адреса слеующей программы в пределах от (РС)-128 до (ЗС)+127. Команды проверки отдельных разрядов позволяют осуществлять условные переходы по состоянию "0" или "1" прямоадресуемых битов. Команды проверки содержимого аккумулятора (на ноль/не ноль) позволяют осуществлять условные переходы по содержимому А. Косвенно-регистровые переходы в системе команд обеспечивают ветвление относительно базового регистра (содержимого DPTR или РС) со смещением, находящимся в аккумуляторе А. Регистровая адресация Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров (эти же регистры могут быть выбраны с помощью прямой адресации и косвенно-регистровой адресации как обычные ячейки внутреннего ОЗУ данных). Регистровая адресация используется для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR и к флагу переноса С. Использование регистровой адресации позволяет получать двухбайтовый эквивалент трехбайтовых команд прямой адресации. Прямая адресация Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (0-127) и к регистрам специального назначения. Прямая побитовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20H-2FH и к отдельно адресуемым битам регистров специального назначения. Старший бит байта кода прямого адрема выбирает одну из двух групп отдельно адремуемых битов, расположенных в ОЗУ или регистрах специального назначения. Прямо адресуемые биты с адресами 0-127 (00H-7FH) расположены в блоке из 16 ячеек внутреннего ОЗУ, имеющих адреса 20H-2FH. Указанные ячейки последовательно пронумерованы от младшего бита младшего байта до старшего бита старшего байта. Отдельно адресуемые биты в регистрах специального назначения пронумерованы следующим образом: пять старших разрядов адреса совпадают с пятью старшими разрядами адреса самого регистра, а три младших - определяют местоположение отдельного ибта внутри регистра. Косвенно-регистровая адресация Косвенно-регистровая адресация используется для обращения к ячейкам внутренннего ОЗУ данных. В качестве регистров-указателей используется регистры R10, R1 выбранного банка регистров. В командах PUSH и POP используется содержимое указателя стека (SP). Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров-указателей R0 и R1 (выбранного банка рабочих регистров) выбирается ячейка из блока в 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. 16-разрядный указатель данных (DPTR) может быть использован для обращения к любой ячейке адресного пространства внешней памяти данных объемом до 64 Кбайт. Непосредственная адресация Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде. Косвенно-регистровая адресация по сумме базового и индексного регистров Косвенно-регистровая адресация по сумме: базовый регистр плюс индексный регистр (содержимое аккумулятора А) упрощает просмотр таблиц, зашитых в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или РС и содержимого А.     Таблица обозначений и символов, используемых в системе команд
Обозначение, символ Назначение
А Аккумулятор
Rn Регистры текущего выбранного банка регистров
r Номер загружаемого регистра, указанног в команде
direct Прямо адресуемый 8-битовый внутренний адрес ячейка данных, который может быть ячейкой внутреннего ОЗУ данных (0-127) или SFR (128-255)
@Rr Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных
data8 8-битовое непосредственное да ное, ходящее в КОП
dataH Старшие биты (15-8) непосредственных 16-битовых данных
dataL Младшие биты (7-0) непосредственных 16-битовых данных
addr11 11-битовый адрес назначения
addrL Младшие биты адреса назначения
disp8 8-битовый байт смещения со знак м
bit Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или SFR
a15, a14...a0 Биты адреса назначения
(Х) Содержимое элемента Х
((Х)) Содержимое по адресу, хранящемуся в элементе Х
(Х)[M] Разряд М элемента Х
+ - * / AND OR XOR /X Операции: сложения вычитания умножения деления логического умножения (операция И) логического сложения (операция ИЛИ) сложения по модулю 2 (исключающее ИЛИ) инверсия элемента Х

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



Мнемоника Функция Флаги
Команда ACALL <addr 11> Абсолютный вызов подпрограммы  
Команда ADD A, <байт-источник> Сложение AC, C, OV
Команда ADDC A, <байт-источник> Сложение с переносом AC, C, OV
Команда AJMP <addr 11> Абсолютный переход  
Команда ANL <байт-назначения>, <байт-источникa> Логическое "И"  
Команда ANL C, <байт-источникa> Логическое "И" для переменных-битов  
Команда CJNE <байт-назначения>, <байт-источник>, <смещение> Сравнение и переход, если не равно C
Команда CLR A Сброс аккумулятора  
Команда CLR <bit> Сброс бита C, bit
Команда CPL A Инверсия ак умуля ора  
Команда CPL <bit> Инверсия бита C, bit
Команда DA A Десятичная коррекция аккумулятора для ложения AC, C
Команда DEC <байт> Декремент  
Команда DIV AB Деление C, OV
Команда DJNZ <байт>, <смещение> Декремент и переход, если не равно нулю  
Команда INC <байт> Инкремент  
Команда INC DPTR Инкремент указателя данных  
Команда JB <bit>, <re18> Переход, если бит установлен  
Команда JBC <bit>, <re18> Переход, если бит установлен и сброс этого бита  
Команда JC <re18> Переход, если перенос установлен  
Команда JMP @A+DPTR Косвенный переход  
Команда JNB <bit>, <re18> Переход, если бит не установлен  
Команда JNC <re18> Переход, если перенос не установлен  
Команда JNZ <re18> Переход, если содержимое аккумулятора не равно нулю  
Команда JZ <re18> Переход, если содержимое аккумулятора равно 0  
Команда LCALL <addr16> Длинный вызов  
Команда LJMP <addr16> Длинный переход  
Команда MOV <байт-назначения>, <байт-источника> Переслать переменную-байт  
Команда MOV <бит-назначения>, <бит-источника> Переслать бит данных C
Команда MOV DPTR,#data16 Загрузить указатель данных 16-битовой константой  
Команда MOVC A,@A+(<R16>) Переслать байт из памяти программ  
Команда MOVX <байт приемника>, <байт источника> Переслать во внешнюю память (из внешней памяти) данных  
Команда MUL AB Умножение C, OV
Команда NOP Нет операции PC
Команда ORL <байт-назначения>, <байт-источникa> Логическое "ИЛИ" для перемнных-байтов  
Команда ORL C, <бит источникa> Логическое "ИЛИ" для переменных-битов C
Команда POP <direct> Чтение из стека  
Команда PUSH <direct> Запись в стек  
Команда RET Возврат из подпрограммы  
Команда RETI Возврат из прерывания  
Команда RL A Сдвиг содержимого аккумулятора влево  
Команда RLC A Сдвиг содержимого аккумулятора влево через флаг переноса  
Команда RR A Сдвиг содержимого аккумулятора вправо  
Команда RRC A Сдвиг содержимого аккумулятора вправо через флаг переноса C
Команда SETB <bit> Установить бит C
Команда SJMP <метка> Короткий переход  
Команда SUBB A, <байт источника> Вычитание с заемом AC, C, OV
Команда SWAP A Обмен тетрадами внутри аккумулятора  
Команда XCH A, <байт> Обмен содержимого аккумулятора с переменной-байтом  
Команда XCHD A,@R1 Обмен тетрадой  
Команда XRL <байт-назначения>, <байт-источникa> Логическое "ИСКЛЮЧАЮЩЕЕ ИЛИ" для перемнных-байтов  
Команда ACALL <addr 11> Команда "абсолютный вызов подпрограммы" вызывает безусловно подпрограмму, размещенную по указанному адресу. При этом счетчик команд увеличивается на 2 для получения адреса следующей команды, после чего полученное 16-битовое значение РС помещается в стек (сначала следует младший байт), и содержимое указателя стека также увеличивается на два. Адрес перехода получается с помощью конкатенации старших бит увеличенного содержимого счетчика команд, битов старшего байта команды и младшего байта команды.
Ассемблер: ACALL <метка>
Код:
A10 A9 A8 1 0 0 0 1
A7 A6 A5 A4 A3 A2 A1 A0
Время; 2 цикла
Алгоритм: (PC) : = (PC) + 2 (SP) : = (SP) + 1 ((SP)) : = (PC [ 7 - 0 ]) (SP) : = (SP) + 1 ((SP)) : = (PC [15 - 8]) (PC [10 - 0]) : = A10A9A8 II A7A6A5A4A3A2A1A0, где II - знак конкатенации (сцепление)
Пример: ;ДО ВЫПОЛНЕНИЯ КОМАНДЫ ACALL ;(SP)=07H ;метка МТ1 соответствует адресу: 0345Н, ;т.е. (РС)=0345Н ACALL MT1 ;расположена по адресу 028DH, т.е. ;(ЗС)=028DH ;ПОСЛЕ ВЫПОЛНЕНИЯ КОМАНДЫ ;(SP)=09H, (PC)=0345H, ;ОЗУ [08]=8FH, ОЗУ [09]=0 H.
Команда ADD A, <байт-источник> Эта команда ("сложение") складывает содержимое аккумулятора Ф с содержимым байта-источника, оставляя результат в аккумуляторе. При появлении переносов из разрядов 7 и 3, устанавливаются флаги переноса (С) и дополнительного переноса (АС) соответственно, в противном случае эти флаги сбрасываются. При сложении целых чисел без знака флаг переноса "С" указывает на появление переполнения. Флаг переполнения (OV) устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. При сложении целых чисел со знаком лаг OV указывает на отрицательную величину, полученную при суммировании операндов или на положительную сумму для двух отрицательных операндов. Для команды сложения разрешены следующие режимы адресации байта-источника:
  1. регистровый
  2. косвенно-регистровый
  3. прямой
  4. непосредственный

Рассмотрим их.
Ассемблер: ADD A,Rn ; где n=0-7
Код:
0 0 1 0 1 rrr
, где rrr=000-111
Время: 1 цикл
Алгоритм: (A) : = (A) + (Rn), где n=0-7 C : = X, OV : =X, AC : =X, где Х=(0 или 1)
Пример: ;(A)=C3H, (R6)=AAH ADD A,R6 ;(A)=6DH, (R6)=AAH ;(AC)=0, (C)=1, (OV)=1  
Ассемблер: ADD A,@Ri ; где i=0,1
Код:
0 0 1 0 0 1 1 i
, где i=0
Время: 1 цикл
Алгоритм: (A) : +(A) = ((Ri)), где i=0,1 C : = X, OV : = X, AC : = X, где Х=(0 или1)
Пример: ;(A)=95H, (R1)=31H, (ОЗУ [31])=4CH ADD A,@R1 ;(A)=E1H, (ОЗУ [31])=4CH, ;(C)=0, (AC)=1, (OV)=0  
Ассемблер: ADD A,<direct>
Код:
0 0 1 0 0 1 0 1
direct address
Время: 1 цикл
Алгоритм: (A) : =(A)+(direct) C : =X, OV : =X, AC : =X, где Х=(0 или 1)
Пример: ;(A)=77H, (ОЗУ [90])=FFH ADD A,90H ;(A)=76H, (ОЗУ [90})=FFH, ;(C)=1, (OV)=0, (AC)=1  
Ассемблер: ADD A, <#data>
Код:
0 0 1 0 0 1 0 0
#data
Время: 1 цикл
Алгоритм: (A) : = (A)+#data C : =X, OV : =X, AC : = X, где Х=(0 или 1)
Пример: ;(A)=09H ADD A,#0D3H ;(A)=DCH, ;(C)=0, (OV)=0, (AC)=0  

Команда ADDC A, <байт-источник>

Эта команда ("сложение с переносом") одновременно складывает содержимое байта-источника, флаг переноса и содержимое аккумулятора А, оставляя результат в аккумуляторе. При этом флаги переноса и дополнительного переноса устанавливаются, если есть перенос из бита 7 или бита 3, и сбрасываются в противном случае. При сложении целых чисел без знака флаг переноса указывает на переполнение. Флаг переполнения (OV) устанавливается, если имеется перенос бита 6 и нет переноса из бита 7 или есть перенос из бита 7 и нет - из бита 6, в противном случае OV сбрасывается. При сложении целых чисел со знаком OV указывает на отрицательную величину, полученную при суммировании двух положительных операндов или на положительную сумму от двух отрицательных операндов.

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

  1. регистровый
  2. косвенно-регистровый
  3. прямой
  4. непосредственный

Рассмотрим их.

Ассемблер: ADDC A,Rn ; где n=0-7
Код:
0 0 1 1 1 rrr
, где rrr=000-111
Время: 1 цикл
Алгоритм: (A) : = (A) + (C) = (Rn) (C) : =X, (AC) : =X, (OV) : =X, где Х=(0 или 1)
Пример: ;(A)=B2H, (R3)=99, ;(C)=1 ADDC A,R3 ;(A)=4CH, (R3)=99 ;(C)=1, (AC)=0, (OV)=1  
Ассемблер: ADDC A,@Ri ; где i=0,1
Код:
0 0 1 1 0 1 1 i
, где i=0,1
Время: 1 цикл
Алгоритм: (A) : =(A) + (C) + ((Ri)) (C) : =X, (AC) : =X, (OV) : = X, где Х=(0 или1)
Пример: ;(A)=D5H, (R0)=3AH, ;(ОЗУ [3A])=1AH, (C)=1 ADDC A,@R0 ;(A)=F0H, (ОЗУ [3A])=1AH, ;(C)=0, (AC)=1, (OV)=0  
Ассемблер: ADDC A,<direct>
Код:
0 0 1 1 0 1 0 1
direct address
Время: 1 цикл
Алгоритм: (A) : =(A)+(C)+(direct) (C) : =X, (AC) : =X, (OV) : =X, где Х=(0 или 1)
Пример: ;(A)=11H, (ОЗУ [80])=DFH, (C)=1 ADDC A,80H ;(A)=F1H, (C)=0, (AC)=1 (OV)=0  
  Ассемблер: ADDC A, <#data>  
  Код:
0 0 1 1 0 1 0 0
#data
 
  Время: 1 цикл  
  Алгоритм: (A) : = (A)+(C)+ #data (C) : =X, (AC) : = X, (OV) : =X, где Х=(0 или 1)  
  Пример: ;(A)=55H, (C)=0 ADDC A,#55H ;(A)=AAH, (C)=0, (AC)=0, (OV)=1    

Команда AJMP <addr 11>

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

Ассемблер: AJMP <метка>
Код:
A10 A9 A8 0 0 0 0 1
A7 A6 A5 A4 A3 A2 A1 A0
Время: 2 цикла
Алгоритм: (PC [15 0] ) : = (PC [15-0] ) + 2, (PC [10 - 0] ) : = <addr11>
Пример: ;(PC)=028FH ;Метке МТ2 соответствует адрес 034AH AJMP MT2 ;(PC)=034AH  

Команда ANL <байт-назначения>,
<байт-источникa>

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

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

    • байтом назначения является аккумулятор (А):
  1. регистровый
  2. прямой
  3. косвенно-регистровый
  4. непосредственный
    • байтом назначения является прямой адрес (direct):
  5. прямой аккумуляторный
  6. непосредственный (байт-источник равен константе)

Рассмотрим их.

Ассемблер: ANL A,Rn ; где n=0-7
Код:
0 1 0 1 1 rrr
, где rrr=000-111
Время: 1 цикл
Алгоритм: (A) : = (A) AND (Rn)
Пример: ;(A)=FEH, (R2)=C5H ANL A,R2 ;(A)=C4H, (R2)=C5H  
Ассемблер: ANL A,<direct>
Код:
0 1 0 1 0 1 0 1
direct address
Время: 1 цикл
Алгоритм: (A) : =(A) AN (direct)
Пример: ;(A)=A3H, (PSW)=86H ANL A,PSW ;(A)=82H, (PSW)=86H  
Ассемблер: ANL A,@Ri ; где i=0,1
Код:
0 1 0 1 0 1 1 i
, где i=0,1
Время: 1 цикл
Алгоритм: (A) : =(A) AND (Ri)
Пример: ;(A)=BCH, (ОЗУ [35])=47H, (R0)=35H, ANL A,@R0 ;(A)=04H, (ОЗУ [35])=47H
Ассемблер: ANL A, #data
Код:
0 1 0 1 0 1 0 0
#data8
Время: 1 цикл
Алгоритм: (A) : = (A)AND #data
Пример: ;(A)=36H ANL A,#0DDH ;(A)=14H  
Ассемблер: ANL <direct>, A
Код:
0 1 0 1 0 0 1
direct address
Время: 1 цикл
Алгоритм: (direct) : = (direct) AND (A)
Пример: ;(A)=55H, (P2)=AAH ANL P2,A ;(P2)=00H, (A)=55H  

 

Ассемблер: ANL <direct>, #data
Код:
0 1 0 1 0 0 1 1
direct address
#data8
Время: 2 циклa
Алгоритм: (direct) : = (direct) AND #data  
Пример: ;(P1)=FFH ANL P1,#73H ;(P1)=73H  
 
             
Команда ANL C, <байт-источникa> Команда "логическое "И" для переменных-битов", выполняет операцию логического "И" над указанными битами. Если бит-источник равен "0", то происходит сброс флага переноса, в противном случае флаг переноса не изменяет текущего значения. "/" перед операндом в языке ассемблера указывает на то, что в качестве значения используется логическое отрицание адресуемого бита, однако сам бит источника при этом не изменяется. На другие флаги эта команда не влияет. Для операнда-источника разрешена только прямая адресация к битам.
Ассемблер: ANL C, <bit>
Код:
1 0 0 0 0 0 1 0
bit address
Время: 2 циклa
Алгоритм: (C) : = (C) AND (bit)
Пример: ;(C)=1, P1[0]=0 ANL C,P1.0 ;(C)=0, P1[0]=0  
  Ассемблер: ANL C,</bit>  
  Код:
1 0 1 1 0 0 0 0
bit address
 
  Время: 2 циклa  
  Алгоритм: (C) : =(C) AND (/bit)  
  Пример: ;(C)=1, (AC)=O ANL C,/AC ;(C)=1, (AC)=0    

Команда CJNE <байт-назначения>,
<байт-источник>, <смещение>

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

Флаг переноса "С" устанавливается в "1", если значение целого без знака <байта назначения> меньше, чем значение целого без знака <байта источника>, в противном случае перенос сбрасывается (если значения операндов равны, флаг переноса сбрасывается). Эта команда не оказывает влияния на операнды.

Операнды, стоящие в команде, обеспечивают комбинации четырех режимов адресации:

    • если байтом-назначения является аккумулятор:
  1. прямой
  2. непосредственный
    • если байтом-назначения является любая ячейка ОЗУ с косвенно-регистровой или регистровой адресацией:
  3. непосредственный к регистровому
  4. непосредственный к косвенно-регистровому

Рассмотрим их.

Ассемблер: CJNE A, <direct>, <метка>
Код:
1 0 1 1 0 1 0 1
direct address
rel8
Время: 2 цикл  
Алгоритм: (PC) : =(PC)+3 если (direct) < (A) то (PC) :=(PC)+<rel8>, C:=0 если (direct) > (A) то (PC) :=(PC)+<rel8>, C:=1    
Пример: ;(A)=97H, (P2)=F0H, (C)=0 CJNE A,P2,MT3 ... MT3: CLR A ;(A)=97H, (P2)=F0H, (C)=1 ;Адрес, соответствющий метке ;МТ3 вычисляется, как ;(PC):=(PC)+3+(rel8)  
Ассемблер: CJNE A, #data, <метка>
Код:
1 0 1 1 0 1 0 0
#data8
rel8
Время: 2 циклa  
Алгоритм: (PC) :=(PC)+3, если #data< (A), то (PC)+<rel8>, C:=0 если #data8>(A), то (PC) :=(PC)+<rel8>, C:=1
Пример: ;(A)=FCH, (C)=1 CJNE A,#0BFH,MT4 ... MT4: INC A ;(A)=FDH, (C)=0 ;(PC):=(PC)+3+(rel8)  
Ассемблер: CJNE Rn,#data, <метка>; где n=0-7
Код:
1 0 1 1 1 rrr
#data8
rel8
Время: 2 циклa
Алгоритм: (PC) : = (PC)+3, если #data <(Rn), то (PC) :=(PC)+<rel8>, C:=0 если #dat 8 >(Rn), то (PC)+<rel8>, C:=1
Пример: ;(R7)=80H, (C)=0 CJNE R7,#81H,MT5 ... MT5: NOP ;(R7)=80H, (C)=1 ;(PC):=(PC)+3+(rel8)
Ассемблер: CJNE @Ri, #data, <метка>; где i=0,1
Код:
1 01 1 1 0 1 1 i
#data8
rel8
Время: 2 циклa
Алгоритм: (PC) :=(PC)+3, если #data <((Ri)), то (PC)+<rel8>, C:=0 если #data8>((Ri)), то (PC)+<rel8>, C:=1
Пример: ;(R0)=41H, (C)=1, (ОЗУ[41])=57H CJNE @R0,#29H,MT6 ... MT6: DEC R0 ;(ОЗУ[41])=57H, (C)=0 ;(PC):=(PC)+3+(rel8)  
       
         

Команда CLR A

Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое аккумулятора А. На флаги команда не влияет.

Ассемблер: CLR A
Код:
1 1 1 0 0 1 0 0
 
Время: 1 цикл
Алгоритм: (A) : = 0
Пример: ;(A)=6DH, (C)=0, (AC)=1 CLR A ;(A)=00H, (C)=0, (AC)=1  

 

 

Команда CLR <bit>

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

Ассемблер: CLR C
Код:
1 1 0 0 0 0 1 1
 
Время: 1 цикл
Алгоритм: (C) : = 0
Пример: ;(C)=1 CLR C ;(C)=0  
  Ассемблер: CLR <bit>  
  Код:
1 1 0 0 0 0 1 0
bit address
   
  Время: 1 цикл  
  Алгоритм: (bit) : = 0    
  Пример: ;(P1)=5EH (01011110B) CLR P1.3 ;(P1)=56H (01010110B)      
 


<== предыдущая лекция | следующая лекция ==>
Запуск редактора. | Команда CPL A


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.