
- •Программирование микроконтроллеров mcs-51
- •Учебное издание
- •Предисловие
- •1.1. Микроконтроллеры фирмы Intel
- •1.2. Микроконтроллеры фирмы Philips
- •1.3. Микроконтроллеры фирм Siemens, Atmel
- •2.1. Программная модель микроконтроллера 8051
- •2.2. Ассемблерный язык микроконтроллера 8051
- •2.2.1. Система команд языка асм51
- •2.2.2. Директивы языка асм51
- •Include операнды
- •3.1. Этапы проектирования ппо
- •3.2. Кросс-ассемблер x8051
- •Input Filename:
- •2500 A.D. 8051 Macro Assembler - Version 4.02a
- •Input Filename: prim.Asm
- •3.3. Кросс-редактор связей Link
- •Input Filename:
- •3.4. Примеры микроконтроллерных программ
- •Оглавление
- •Глава 1. Состав семейства mcs-51. . . . . . . 5
- •Глава 2. Особенности программирования
- •Глава 3. Технология разработки прикладного
2.2.1. Система команд языка асм51
Система команд языка АСМ51 содержит 111 команд, которые обеспечивают реализацию широкой номенклатуры арифметических и логических операций, а также операций пересылки данных и передачи управления. В табл.2.9 приведены обозначения, используемые в описании команд.
Таблица 2.9
Обозначение |
Назначение |
addr |
Символическое имя вычисляемого адреса ячейки памяти программ. |
addr11 |
Символическое имя 11-битового адреса ячейки памяти программ. |
addr16 |
Символическое имя 16-битового адреса ячейки памяти программ. |
bit |
Символическое имя 8-разрядного адреса бита в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение (см. рис.2). |
data8 |
Символическое имя байта данных. |
Продолжение табл.2.9
Обозначение |
Назначение |
data16 |
Символическое имя 16-битовых данных. |
direct |
Символическое имя 8-разрядного адреса ячейки резидентной памяти данных или регистра специальных функций. |
rel |
Значение байта смещения, используемое при вычислении адреса addr. |
(X) |
Содержимое элемента X. |
((X)) |
Содержимое по адресу, хранящемуся в элементе X. |
X[M] |
Разряд M элемента X. |
X[3-0] |
Группа разрядов элемента X. |
|
Оператор присваивания. |
|
Дизъюнкция. |
|
Конъюнкция. |
|
Сложение по модулю 2. |
XY |
Целочисленное деление элемента X на элемент Y. |
mod[XY] |
Остаток при целочисленном делении. |
Время выполнения
рассматриваемых команд указывается в
машинных циклах. Напомним, что длительность
одного машинного цикла определяется
выражением
,
где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] |
Команда "переслать два байта" загружает указатель данных DPTR16-битовой константой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 |