Dptr ассемблер что это
Директивы ассемблера (Лекция)
1. Директивы (псевдокоманды) ассемблера
2. Регистры специальных функций i8051
3. Регистр флагов (PSW)
4. Команды арифметических операций 8051
5. Команды операций с битами микроконтроллера 8051
6. Команды операций с битами микроконтроллера 8051
1. Директивы (псевдокоманды) ассемблера
Ассемблирующая программа транслирует исходную программу в объектные коды. Хотя транслирующая программа берет на себя многие из рутинных задач программиста, таких как присвоение действительных адресов, преобразование чисел, присвоение действительных значений символьным переменным и т.п., программист все же должен указать ей некоторые параметры: начальный адрес прикладной программы, конец ассемблируемой программы, форматы данных и т.п. Всю эту информацию программист вставляет в исходный текст своей прикладной программы в виде псевдокоманд (директив) ассемблера, которые только управляют процессом трансляции и не преобразуются в коды объектной программы.
Все директивы предваряются точкой.
определяет символическое имя ERROR _ FLAG как третий бит ячейки ОЗУ с адресом 25Н.
В результате трансляции должна быть получена карта памяти программ, где каждой ячейке памяти поставлен в соответствие хранящийся в ней код.
В соответствии с форматом команд для представления их объектных кодов отводятся одна, две или три ячейки памяти программ. В первой ячейке всегда располагается код операции, во второй (а для МК51 и в третьей) – непосредственный операнд, адрес прямоадресуемого операнда или смещение (для команд передачи управления МК51). Для команд LCALL и LJMP во втором и третьем байтах объектного кода указывается адрес передачи управления (во втором – старшая часть, в третьем – младшая).
2. Регистры специальных функций i8051
К адресному пространству памяти данных примыкает адресное пространство регистров специальных функций SFR ( Special Function Register ).
Таблица. Размещение регистров специальных функций в пространстве SFR
Регистр расширитель аккумулятора ( Multiplication Register)
Слово состояния программы ( Program Status Word )
Регистр указатель стека ( Stack Pointer )
Старший байт регистра указателя данных DPTR ( Data Pointer High )
Младший байт регистра указателя данных DPTR ( Data Pointer Low )
Старший байт таймера 0 ()
Младший байт таймера 0 ()
Старший байт таймера 1 ()
Младший байт таймера 1 ()
Регистр режимов таймеров счетчиков (Timer/Counter Mode Control Register)
Регистр управления статуса таймеров (Timer/Counter Control Register)
Регистр приоритетов (Interrupt Priority Control Register)
Регистр маски прерывания (Interrupt Enable Register)
Регистр управления мощностью ( Power Control Register )
Регистр управления приемопередатчиком (Serial Port Control Register)
Буфер приемопередатчика ( Serial Data Buffer )
Примечание. Регистры, символ которых отмечен знаком (*), допускают адресацию своих отдельных бит при использовании команд из группы команд операций над битами.
Адреса, по которым расположены эти регистры, приведены в таблице.
Регистры специальных функций управляют работой блоков, входящих в микроконтроллер.
— Две регистровые пары с именами TH 0, TL 0 и ТН1, TL 1 представляют собой регистры, двух программно-управляемых 16-битных таймеров-счетчиков.
— Регистры IP и IE управляют работой системы прерываний микро-ЭВМ,
— регистры SBUF и SCON – работой приемопередатчика последовательного порта.
— Регистр-указатель стека SP в микро-ЭВМ рассматриваемого семейства – восьми битный. Он может адресовать любую область внутренней памяти данных. У микро-ЭВМ семейства 8051 стек «растет вверх», т.е. перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек. Соответственно при извлечении информации из стека регистр SP декрементируется после извлечения информации. В процессе инициализации микро-ЭВМ после сигнала сброса или при включении питающего напряжения в SP заносится код 07Н. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08Н.
— Регистр-указатель данных DPTR чаще всего используют для фиксации 16-битного адреса в операциях обращения к внешней памяти программ и данных. С точки зрения программиста он может выступать как в виде одного 16-битного регистра, так и в виде двух независимых регистров DPL и DPH
Команда MOV DPTR,#data16
Дата добавления: 2015-08-31 ; просмотров: 1877 ; Нарушение авторских прав
Команда MOVC A,@A+( )
Команда «переслать байт из памяти программ» загружает аккумулятор байтом кода или константой из памяти программы. Адрес считываемого байта вычисляется как сумма 8-битового исходного содержимого аккумулятора без знака и содержимого 16-битового регистра. В качестве 16-битового регистра может быть:
В случае, когда используется РС, он увеличивается до адреса следующей команды перед тем, как его содержимое складывается с содержимым аккумулятора. 16-битовое сложение выполняется так, что перенос из младших восьми бит может распространяться через старшие биты. Эта команда на флаги не влияет.
| Ассемблер: | MOVC A, @A+DPTR | |
| Код: |
| |
| Время: | 2 циклa | |
| Алгоритм: | (A) : = ((A)+(DPTR)) | |
| Пример: | ;(A)=1BH, (DPTR)=1020H, ;(ПЗУ[103B])=48H, MOVC A,@A+DPTR ;(A)=48H, (DPTR)=1020H |
| Ассемблер: | MOVC A, @A+PC | |
| Код: |
| |
| Время: | 2 циклa | |
| Алгоритм: | (A) : =((A)+(PC)) | |
| Пример: | ;(A)=FAH, (PC)=0289 ;(ПЗУ[0384])=9BH MOVC A, @A+PC ;(A)=9BH, (PC)=028AH |
Команда «переслать во внешнюю память (из внешней памяти) данных» пересылает данные между аккумулятором и батом внешней памяти данных. Имеется два типа команд, которые отличаются тем, что обеспечивают 8-битовый или 16-битовый косвенный адрес к внешнему ОЗУ данных.
В первом случае содержимое R0 или R1 в текущем банке регистров обеспечивает 8-битовый адрес, который мультеплексируется с данными порта Р0. Для расширения дешифрации ввода-вывода или адресации небольшого массива ОЗУ достаточно восьми бит адресации. Если применяются ОЗУ, немного больше чем 256 байт, то для фиксации старших битов адреса можно использовать любые другие выходы портов, которые переключаются командой, стоящей перед командой MOVX.
Во втором случае, при выполнении команды MOVX указатель данных DPTR генерирует 16-битовый адрес. Порт Р2 выводит старшие 8 бит адреса (DPH), а порт Р0 мультеплексирует младшие 8 бит адреса (DPL) с данными. Эта форма является эффективной при доступе к большим массивам данных (до 64К байт), так как для установки портов вывода не требуется дополнительных команд.
Описание машинных команд (продолжение)
Описание: ячейка памяти адрес, которой указан во втором байте команды увеличивается на 1. Если первоначально в ячейке было записано значение 0FFh, то в нее заносится значение 00h. Команда не воздействует на флаги.
Примечание: при выполнении команды INC над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
(Rn) = (Rn) + 1, n=0,1,2,3,4,5,6,7
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Описание: увеличивает на 1 содержимое 16-разрядного указателя данных. Если первоначально в младшем байте DPTR (ячейка DPL) было записано значение 0FFh, то в него заносится значение 00h и увеличивается на 1 содержимое старшего байта DPTR (ячейка DPH). Команда не воздействует на флаги.
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
Описание: Если указанный во втором байте команды бит равен единице, то производится переход к вычисляемому по третьему байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.
Пример: JB 30h, LABEL1
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
Описание: Если указанный во втором байте команды бит равен единице, то производится переход к вычисляемому по третьему байту команды адресу. Бит не очищается, если он уже содержит ноль. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Команда не воздействует на флаги.
Пример: JBС 78h, LABEL1
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
Описание: Если бит переноса равен единице, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды. Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Команда не воздействует на флаги.
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Машинный код: 0 1 0 0 0 0 0 0
Описание: складывает 8- битовое содержимое аккумулятора без учета знака с 16- битовым указателем данных (DPTR) и загружает полученный результат в счетчик команд. Это будет адрес следующей исполняемой команды. Команда не воздействует на флаги.
JMP_TBL: AJMP LABEL0
Действие команды: (PC) = (A) + (DPTR)
Описание: Если указанный во втором байте команды бит равен нолю, то производится переход к вычисляемому по третьему байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.
Пример: JNB P1.3, LABEL1
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
Описание: Если бит переноса равен нолю, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды. Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Команда не воздействует на флаги.
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Описание: Если любой бит аккумулятора равен единице, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды. Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Содержимое аккумулятора не изменяется. Команда не воздействует на флаги.
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Описание: Если все биты аккумулятора равны нулю, то производится переход к вычисляемому по второму байту команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется суммированием содержимого программного счетчика со вторым байтом команды. Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака второго байта команды, представленного в дополнительном коде. Содержимое аккумулятора не изменяется. Команда не воздействует на флаги.
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Пример: LCALL Podprogramma
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(PC15-0) = адрес подпрограммы (метки)
а15 a14 a13 a12 a11 a10 a9 a8
a7 a6 a5 a4 a3 a2 a1 a0
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
(PC15-0) = адрес метки
а15 a14 a13 a12 a11 a10 a9 a8
a7 a6 a5 a4 a3 a2 a1 a0
Описание: переменная, указанная во втором операнде, копируется в ячейку, указываемую первым операндом. Байт источник не изменяется. Другие регистры и флаги не изменяются.
Команда допускает 15 комбинаций адресации байта- источника и байта приемника:
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Машинный код: 0 1 1 1 0 1 0 0
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
Машинный код: 1 1 1 1 1 r r r
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
(direct) = (Rn), n=0,1,2,3,4,5,6,7
Машинный код: 1 0 0 0 1 r r r
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Машинный код: 1 0 0 0 0 1 0 1
d d d d d d d d (источник)
d d d d d d d d (приемник)
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
Количество циклов: 1
Действие команды: (PC) = (PC) + 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Описание: переменная, указанная во втором операнде, копируется по адресу, указываемом первым операндом. Бит источник не изменяется. Одним битом обязательно должен быть флаг переноса C, другим битом может быть любой прямо адресуемый бит. Другие регистры и флаги не изменяются.
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Количество циклов: 1
Действие команды: (PC) = (PC) + 2
Описание: загружает указатель данных DPTR 16- битной константой. Команда не воздействует на флаги.
Пример: MOV DPTR, #Label
Количество циклов: 2
Действие команды: (PC) = (PC) + 3
i15 i14 i13 i12 i11 i10 i9 i8
i7 i6 i5 i4 i3 i2 i1 i0
Описание: загружает аккумулятор константой из памяти программ. Адрес считываемого байта вычисляется как сумма 8-битного исходного содержимого аккумулятора без знака и содержимого 16-битного регистра. В качестве 16- битового регистра может быть использован либо указатель данных DPTR, либо счетчик команд РС При использовании программного счетчика его содержимое перед суммированием увеличивается на 1. Команда не воздействует на флаги.
Пример: MOVC A, @A+DPTR
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
Описание: пересылает данные между аккумулятором и байтом внешней памяти. Имеется два типа команд, которые отличаются тем, что обеспечивают 8-битный или 16-битный доступ к внешней памяти данных.
В первом случае регистр R0 или R1 текущего банка регистров обеспечивает 8- битный адрес, который мультиплексируется с данными на выводах порта P0.
Во втором случае, при выполнении команды 16- битный адрес, берется из указателя данных DPTR. При этом через порт P2 выводятся старшие 8 бит адреса, а через порт P0 младшие 8 бит адреса, мультиплексируемые с байтом данных. Команда не воздействует на флаги.
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
Пример: MOVX A, @DPTR
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
Пример: MOVX @DPTR, A
Количество циклов: 2
Действие команды: (PC) = (PC) + 1
Понравился материал? Поделись с друзьями!
Вместе со статьей «Архитектура микроконтроллеров MCS-51» читают:
Предыдущие версии сайта:
http://neic.nsk.su/
Об авторе:
к.т.н., доц., Александр Владимирович Микушин
Кандидат технических наук, доцент кафедры САПР СибГУТИ. Выпускник факультета радиосвязи и радиовещания (1982) Новосибирского электротехнического института связи (НЭИС).
А.В.Микушин длительное время проработал ведущим инженером в научно исследовательском секторе НЭИС, конструкторско технологическом центре «Сигнал», Научно производственной фирме «Булат». В процессе этой деятельности он внёс вклад в разработку систем радионавигации, радиосвязи и транкинговой связи.
Научные исследования внедрены в аппаратуре радинавигационной системы Loran-C, комплексов мобильной и транкинговой связи «Сигнал-201», авиационной системы передачи данных «Орлан-СТД», отечественном развитии системы SmarTrunkII и радиостанций специального назначения.
Микроконтроллер i8051 (КМ1816ВЕ51). Справочник. Глава 2.5
Описание каждой приводимой машинной команды ОМЭВМ типа МК51 состоит из предложения языка ассемблера, кода, длины команды в байтах, времени ее выполнения, алгоритма и примера.
При описании операций используются обозначения, приведенные в табл. 2.23.
Команда «абсолютный вызов подпрограммы» вызывает безусловно подпрограмму, размещенную по указанному адресу. При этом счетчик команд увеличивается на 2 для получения адреса следующей команды, после чего полученное 16-битовое значение PC помещается в стек (сначала следует младший байт), и содержимое указателя стека также увеличивается на два. Адрес перехода получается с помощью конкатенации старших бит увеличенного содержимого счетчика команд, битов старшего байта команды и младшего байта команды.
Для команды сложения разрешены следующие режимы адресации байта-источника:
1) Ассемблер: ADD A,Rn ; где п=0-7
Для этой команды разрешены следующие режимы адресации байта-источника:
Команда «абсолютный переход», передает управление по указанному адресу, который получается при конкатенации пяти старших бит счетчика команд PC (после увеличения его на два), 7-5 битов кода операции и второго байта команды. Адрес перехода должен находится внутри одной страницы объемом 2 Кбайт памяти программы, определяемой пятью старшими битами счетчика команд.
Команда «логическое «И» для переменных-байтов» выполняет операцию логического «И» над битами указанных переменных и помещает результат в байт-назначения. Эта операция не влияет на состояние флагов.
Два операнда обеспечивают следующие комбинации шести режимов адресации:
— байтом назначения является аккумулятор (А):
— байтом назначения является прямой адрес (direct):
5) прямой аккумуляторный;
6) непосредственный (байт-источник равен константе).
1) Ассемблер: ANL A,Rn ; где п=0-7
Примечание. Если команда «ANL» применяется для изменения содержимого порта, то значение, используемое в качестве данных порта, будет считываться из «защелки» порта, а не с выводов БИС
Команда «логическое «И» для переменных-битов», выполняет операцию логического «И» над указанными битами. Если бит-источник равен «0», то происходит сброс флага переноса, в противном случае флаг переноса не изменяет текущего значения. «/» перед операндом в языке ассемблера указывает на то, что в качестве значения используется логическое отрицание адресуемого бита, однако сам бит источника при этом не изменяется. На другие флаги эта команда не влияет.
Для операнда-источника разрешена только прямая адресация к битам.
Команда «сравнение и переход, если не равно» сравнивает значения первых двух операндов и выполняет ветвление, если операнды не равны. Адрес перехода
(ветвления) вычисляется при помощи сложения значения (со знаком), указанного в последнем байте команды, с содержимым счетчика команд после увеличения его на три.
Операнды, стоящие в команде, обеспечивают комбинации четырех режимов адресации:
— если байтом-назначения является аккумулятор:
— если байтом-назначения является любая ячейка ОЗУ с косвенно-регистровой или регистровой адресацией:
3) непосредственный к регистровому
4) непосредственный к косвенно-регистровому
Команда «сброс аккумулятора» сбрасывает (обнуляет) содержимое аккумулятора А. На флаги команда не влияет.
Команда «сброс бита» сбрасывает указанный бит в нуль. Эта команда работает с флагом переноса «С» или любым битом с прямой адресацией.
Команда «инверсия аккумулятора» каждый бит аккумулятора инвертирует (изменяет на противоположный). Биты, содержащие «единицы», после этой команды будут содержать «нули», и наоборот. На флаги эта операция не влияет.
Команда «инверсия бита» инвертирует (изменяет на противоположное значение) указанный бит. Бит, который был «единицей», изменяется в «нуль» и наоборот. Команда CPL может работать с флагом переноса или с любым прямо адресуемым битом. На другие флаги команда не влияет.
Примечание: Если эта команда используется для изменения информации на выходе порта, начение, используемое как исходные данные, считывается из «защелки» порта, а не с выводов БИС.
создавая соответствующую двоично-десятичную цифру в старшем полубайте. И снова при этом флаг переноса устанавливается, если перенос получается из старших битов, но не изменяется в противном случае. Таким образом, флаг переноса указывает на то, что сумма двух исходных двоично-десятичных переменных больше чем 100. Эта команда выполняет десятичное преобразование с помощью сложения 06, 60, 66 с содержимым аккумулятора в зависимости от начального состояния аккумулятора и слова состояния программы (PSW).
Примечание: Команда DA А не может просто преобразовать шестнадцатиричное значение в аккумуляторе в двоично-десятичное представление и не применяется, например, для десятичного вычитания.
Команда «декремент» производит вычитание «1» из указанного операнда. Начальное значение 00Н перейдет в 0FFH. Команда DEC не влияет на флаги. Этой командой допускается четыре режима адресации операнда:
2) Ассемблер: DEC Rn ; где n=0-7
4) Ассемблер: DEC @Ri ; где i=0,l
Примечание: Если эта команда используется для изменения информации на выходе порта, значение, используемое как исходные данные, считывается из «защелки» порта, а не с выводов БИС.
Команда «декремент и переход, если не равно нулю» выполняет вычитание «1» из указанной ячейки и осуществляет ветвление по вычисляемому адресу, если результат не равен нулю. Начальное значение 00Н перейдет в 0FFH. Адрес перехода (ветвления) вычисляется сложением значения смещения (со знаком), указанного в последнем байте команды, с содержимым счетчика команд, увеличенным на длину команды DJNZ. На флаги эта команда не влияет и допускает следующие режимы адресации:
1) Ассемблер: DJNZ Rn, ; где n=0-7
;Эта последовательность команд переключает Р1.7
;восемь раз и приводит к появлению четырех импульсов
;на выводе БИС, соответствующем биту Р1.7.
Примечание. Если команда DJNZ используется для изменения выхода порта, значение, используемое как операнд, считывается из «защелки» порта, а не с выводов БИС
Команда «инкремент» выполняет прибавление «1» к указанной переменной и не влияет на флаги. Начальное значение 0FFH перейдет в 00Н. Эта команда допускает четыре режима адресации:
2) Ассемблер: INC Rn ; где n=0-7
4) Ассемблер: INC @Ri ; где i=0,l
Примечание. При использовании команды INC для изменения содержимого порта, величина, используемая как операнд, считывается из «защелки» порта, а не с выводов БИС.
Команда «инкремент указателя данных» выполняет инкремент (прибавление «1») содержимого 16-битового указателя данных (DPTR). Прибавление «1» осуществляется к 16 битам, причем переполнение младшего байта указателя данных (DPL) из FFH в 00Н приводит к инкременту старшего байта указателя данных (DPH). На флаги эта команда не влияет.
Ассемблер: INC DPTR
Команда «переход, если бит установлен» выполняет переход по адресу ветвления, если указанный бит равен «1», в противном случае выполняется следующая команда. Адрес ветвления вычисляется с помощью прибавления относительного смещения со знаком в третьем байте команды (ге18) к содержимому счетчика команд после прибавления к нему 3.Проверяемый бит не изменяется. Эта команда на флаги не влияет.
Команда «переход, если бит установлен и сброс этого бита», выполняет ветвление по вычисляемому адресу, если бит равен «1». В противном случае выполняется следующая за JBC команда. В любом случае указанный бит сбрасывается. Адрес перехода вычисляется сложением относительного смещения со знаком в третьем байте команды (ге18) и содержимого счетчика команд после прибавления к нему 3. Эта команда не влияет на флаги.
Примечание. Если эта команда используется для проверки бит порта, то значение, используемое как операнд, считывается из «защеяки» порта, а не с вывода БИС.
Команда «переход, если перенос установлен» выполняет ветвление по адресу, если флаг переноса равен «1», в противном случае выполняется следующая команда. Адрес ветвления вычисляется с помощью сложения относительного смещения со знаком во втором байте команды (ге18) и содержимого счетчика команд, после прибавления к нему 2. Эта команда на флаги не влияет.
Ассемблер: JMP @A+DPTR
Команда «переход, если бит не установлен» выполняет ветвление по адресу, если указанный бит равен «нулю», в противном случае выполняется следующая команда. Адрес ветвления вычисляется с помощью сложения относительного смещения со знаком в третьем байте команды (ге18) и содержимого счетчика команд после прибавления к нему 3. Проверяемый бит не изменяется. Эта команда на флаги не влияет.
Команда «переход, если перенос не установлен» выполняет ветвление по адресу, если флаг переноса равен нулю, в противном случае выполняется следующая команда. Адрес ветвления вычисляется с помощью сложения относительного смещения со знаком во втором байте команды (ге18) и содержимого счетчика команд после прибавления к нему 2. Флаг переноса не изменяется. Эта команда на другие флаги не влияет.
Команда «переход, если содержимое аккумулятора не равно нулю» выполняет ветвление по адресу, если хотя бы один бит аккумулятора равен «1», в противном случае выполняется следующая команда. Адрес ветвления вычисляется сложением относительного смещения со знаком во втором байте команды (ге18) и содержимого счетчика команд (PC) после прибавления к нему 2. Содержимое аккумулятора не изменяется. Эта команда на флаги не влияет.
Команда «переход, если содержимое аккумулятора равно «0» выполняет ветвление по адресу, если все биты аккумулятора равны «0», в противном случае выполняется следующая команда. Адрес ветвления вычисляется сложением относительного смещения со знаком во втором байте команды (ге18) и
содержимым счетчика команд после прибавления к нему 2. Содержимое аккумулятора не изменяется. Эта команда на флаги не влияет.
Команда «длинный переход» выполняет безусловный переход по указанному адресу, загружая старший и младший байты счетчика команд (PC) соответственно вторым и третьим байтами, находящимися в коде команды. Адрес перехода, таким образом, может находиться по любому адресу пространства памяти программ в 64 Кбайт. Эта команда на флаги не влияет.
Команда «переслать переменную-байт» пересылает переменную-байт указанную во втором операнде, в ячейку, указанную в первом операнде Содержимое байта источника не изменяется. Эта команда на флаги и другие регистры не влияет. Команда «MOV» допускает 15 комбинаций адресации байта источника и байта-назначения.
1) Ассемблер: MOV A,Rn ; где n=0-7
3) Ассемблер: MOV A,@Ri ; где i=0,1
4) Ассемблер: MOV A,#data
5) Ассемблер: MOV Rn,A ; где n=0-7
6) Ассемблер: MOV Rn, ; где n=0-7
7) Ассемблер: MOV Rn,#data ; где n=0-7
13) Ассемблер: MOV @Ri,A ; где i=0,l
14) Ассемблер: MOV @Ri, ; где i=0,l
Команда «переслать бит данных» битовую переменную, указанную во втором байте, копирует в разряд, который указан в первом операнде. Одним из операндов должен быть флаг переноса С, а другим может быть любой бит, к которому возможна прямая адресация.
Команда MOV DPTR,#datal6
Ассемблер: MOV DPTR,#
Команда «переслать байт из памяти программ» загружает аккумулятор байтом кода или константой из памяти программы. Адрес считываемого байта вычисляется как сумма 8-битового исходного содержимого аккумулятора без знака и содержимого 16-битового регистра. В качестве 16-битового регистра может быть:
1) указатель данных DPTR;
2) счетчик команд PC.
В случае, когда используется PC, он увеличивается до адреса следующей команды перед тем, как его содержимое складывается с содержимым аккумулятора. 16-битовое сложение выполняется так, что перенос из младших восьми бит может распространяться через старшие биты. Эта команда на флаги не влияет.
1) Ассемблер: MOVC A,@A+DPTR
2) Ассемблер: MOVC A,@A+PC
Команда «переслать во внешнюю память (из внешней памяти) данных» пересылает данные между аккумулятором и байтом внешней памяти данных. Имеется два типа команд, которые отличаются тем, что обеспечивают 8-битовый или 16-битовый косвенный адрес к внешнему ОЗУ данных.
В первом случае содержимое R0 или R1 в текущем банке регистров обеспечивает 8-битовый адрес, который мультиплексируется с данными порта Р0. Для расширения дешифрации ввода-вывода или адресации небольшого массива ОЗУ достаточно восьми бит адресации. Если применяются ОЗУ, немного больше чем 256 байт, то для фиксации старших битов адреса можно использовать любые другие выходы портов, которые переключаются командой, стоящей перед командой MOVX.
Во втором случае, при выполнении команды MOVX указатель данных DPTR генерирует 16-битовый адрес. Порт Р2 выводит старшие восемь бит адреса (DPH), а порт Р0 мультиплексирует младшие 8 бит адреса (DPL) с данными. Эта форма является эффективной при доступе к большим массивам данных (до 64К байт), так как для установки портов вывода не требуется дополнительных команд.
1) Ассемблер: MOVX A,@Ri ; где i=0,1
2) Ассемблер: MOVX A,@DPTR
3) Ассемблер: MOVX @Ri,A ; где i=0,1
4) Ассемблер: MOVX @DPTR,A
Команда «нет операции» выполняет холостой ход и не влияет на регистры и флаги, кроме как на счетчик команд (PC).
Команда «логическое «ИЛИ» для переменных-байтов» выполняет операцию логического «ИЛИ» над битами указанных переменных, записывая результат в байт назначения. Эта команда на флаги не влияет. Допускается шесть комбинаций режимов адресации:
— если байтом назначения является аккумулятор:
— если байтом назначения является прямой адрес:
1) Ассемблер: ORL A,Rn; где n=0-7
3) Ассемблер: ORL A,@Ri ; где i=0,1
5) Ассемблер: ORL (direct),A
6) Ассемблер: ORL (direct),#
Примечание. Если команда используется для работы с портом, величина, используемая в качестве исходных данных порта, считывается из «защелки» порта, а не с выводов БИС.
Команда «логическое «ИЛИ» для переменных-битов» устанавливает флаг переноса С, если булева величина равна логической «1», в противном случае устанавливает флаг С в «0». Косая дробь («/») перед операндом на языке ассемблера указывает на то, что в качестве операнда используется логическое отрицание значения адресуемого бита, но сам бит источника не изменяется. Эта команда на другие флаги не влияет.
Команда «чтение из стека» считывает содержимое ячейки, которая адресуется с помощью указателя стека, в прямо адресуемую ячейку ОЗУ, при этом указатель стека уменьшается на единицу.
Эта команда не воздействует на флаги и часто используется для чтения из стека промежуточных данных.
Команда «запись в стек» увеличивает указатель стека на единицу и после этого содержимое указанной прямо адресуемой переменной копируется в ячейку внутреннего ОЗУ, адресуемого с помощью указателя стека. На флаги эта команда не влияет и используется для записи промежуточных данных в стек.
Команда «возврат из подпрограммы» последовательно выгружает старший младший байты счетчика команд из стека, уменьшая указатель стека на 2. Выполнение основной программы обычно продолжается по адресу команды следующей за ACALL или LCALL. На флаги эта команда не влияет.
Команда «возврат из прерывания» выгружает старший и младший байты счетчика команд из стека и устанавливает «логику прерываний», разрешая прием других прерываний с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. Указатель стека уменьшается на 2. Слово состояния программы (PSW) не восстанавливается автоматически. Выполнение основной программы продолжается с команды, следующей за командой, на которой произошел переход к обнаружению запроса на прерывание. Если при выполнена команды RETI обнаружено прерывание с таким же или меньшим уровнем
приоритета, то одна команда основной программы успевает выполниться до обработки такого прерывания.
Команда «сдвиг содержимого аккумулятора влево», сдвигает восемь бит аккумулятора на один бит влево, бит 7 засылается на место бита 0. На флаги эта команда не влияет.
Команда «сдвиг содержимого аккумулятора влево через флаг переноса» сдвигает восемь бит аккумулятора и флаг переноса влево на один бит. Содержимое флага переноса помещается на место бита 0 аккумулятора, а содержимое бита 7 аккумулятора переписывается в флаг переноса. На другие флаги эта команда не влияет.
Команда «сдвиг содержимого аккумулятора вправо» сдвигает вправо на один бит все восемь бит аккумулятора. Содержимое бита 0 помещается на место бита 7. На флаги эта команда не влияет.
Команда «сдвиг содержимого аккумулятора вправо через флаг переноса» сдвигает восемь бит аккумулятора и флаг переноса на один бит вправо. Бит 0 перемещается в флаг переноса, а исходное содержимое флага переноса помещается в бит 7. На другие флаги эта команда не влияет.
Команда «установить бит» устанавливает указанный бит в «1». Адресуется:
1) к флагу переноса (С);
2) к биту с прямой адресацией.
1) Ассемблер: SETB С
2) Ассемблер: SETB (bit)
Команда «короткий переход» выполняет безусловное ветвление в программе по указанному адресу. Адрес ветвления вычисляется сложением смещения со знаком во втором байте команды с содержимым счетчика команд после прибавления к нему 2.
Таким образом, адрес перехода должен находиться в диапазоне от 128 байт, предшествующих команде, до 127 байт, следующих за ней.
Команда «вычитание с заемом» вычитает указанную переменную вместе с флагом переноса из содержимого аккумулятора, засылая результат в аккумулятор. Эта команда устанавливает флаг переноса (заема), если при вычитании для бита 7 необходим заем, в противном случае флаг переноса сбрасывается. Если флаг переноса установлен перед выполнением этой команды, то это указывает на то, что заем необходим при вычитании с увеличенной точностью на предыдущем шаге, поэтому флаг переноса вычитается из содержимого аккумулятора вместе с операндом источника. (АС) устанавливается, если заем необходим для бита 3 и сбрасывается в противном случае. Флаг переполнения (OV) устанавливается, если заем необходим для бита 6, но его нет для бита 7, или есть для бита 7, но нет для бита 6.
При вычитании целых чисел со знаком (OV) указывает на отрицательное число, которое получается при вычитании отрицательной величины из положительной, или положительное число, которое получается при вычитании положительного числа из отрицательного.
Операнд источника допускает четыре режима адресации:
4) непосредственный (к константе).
1) Ассемблер: SUBB A,Rn ; где n=0-7
2) Ассемблер: SUBB A,
3) Ассемблер: SUBB A,@Ri ; где i=0,1
4) Ассемблер: SUBB A,#data
Команда «обмен тетрадами внутри аккумулятора» осуществляет обмен между младшими четырьмя и старшими четырьмя битами аккумулятора (между старшей и младшей тетрадами).
Эта команда может рассматриваться так же, как команда четырехбитового циклического сдвига. На флаги эта команда не влияет.
Команда «обмен содержимого аккумулятора с переменной-байтом» осуществляет обмен содержимого аккумулятора с содержимым источника, указанным в команде. Операнд источника может использовать следующие режимы адресации:
1) Ассемблер: ХСН A,Rn ; где n=0-7
Команда «обмен тетрадой» выполняет обмен младшей тетрады (биты 3-0) аккумулятора с содержимым младшей тетрады (биты 3-0) ячейки внутреннего ОЗУ, косвенная адресация к которой производится с помощью указанного регистра. На старшие биты (биты 7-4) эта команда не влияет (так же, как и на флаги).
Ассемблер: XCHD A,@Ri ; где i=0,1
Команда «логическое «ИСКЛЮЧАЮЩЕЕ ИЛИ» для переменных-байтов» выполняет операцию «ИСКЛЮЧАЮЩЕЕ ИЛИ» над битами указанных переменных, записывая результат в байт назначения. На флаги эта команда не влияет.
Допускается шесть режимов адресации:
— байтом назначения является аккумулятор:
— байтом назначения является прямой адрес:
1) Ассемблер: XRL A,Rn ; гдеn n=0-7
3) Ассемблер: XRL A,@Ri ; где i=0,l
4) Ассемблер: XRL A,#data
Примечание. Если эта команда используется для работы с портами, то значение, используемое в качестве операнда, считывается из «защелки» порта, а не с выводов БИС.
