
- •Программирование микроконтроллеров 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
- •3.3. Кросс-редактор связей Link
- •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] |
Команда "переслать два байта" загружает указатель данных DPTR 16-битовой константой data16, непосредственно указанной в команде, причем содержимое второго и третьего байтов команды загружается соответственно в старший (DPH) и младший (DPL) байты DPTR. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(DPTR)data16 |
;(DPH)=23H, (DPL)=0DFH MOV DPTR,#1234H ;(DPH)=12H, (DPL)=34H |
MOVC A,@A+DPTR |
1 0 0 1 0 0 1 1 |
|
Команда "переслать байт" загружает аккумулятор A содержимым ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого 16-битового указателя данных DPTR. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Содержимое DPTR не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(A)((A)+(DPTR)) |
;(A)=01H, (DPTR)=30FFH, ;в ПП (3100H)=22H MOVC A,@A+DPTR ;(A)=22H, ;(DPTR)=30FFH |
MOVC A,@A+PC |
1 0 0 0 0 0 1 1 |
|
Команда "переслать байт" загружает в аккумулятор A содержимое ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого программного счетчика PC, которое увеличено на единицу. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(A)((A)+(PC)+1) |
;(A)=11H, (PC)=2300H, ;в ПП (2312H)=44H MOVC A,@A+PC ;(A)=44H, ;(PC)=2301H |
MOVX A,@Ri ;где i{0,1} |
1 1 1 0 0 0 1 i |
|
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.
Алгоритм |
Пример |
(A)((Ri)), где i{0,1} |
;(A)=0CCH, (R0)=44H, ;в ВПД (44H)=3EH MOVX A,@R0 ;(A)=3EH, (R0)=44H, ;в ВПД (44H)=3EH |
MOVX A,@DPTR |
1 1 1 0 0 0 0 0 |
|
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым 16-битового указателя данных DPTR, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.
Алгоритм |
Пример |
(A)((DPTR)) |
;(A)=76H, (DPTR)=6D44H, ;в ВПД (6D44H)=88H MOVX A,@DPTR ;(DPTR)=6D44H, ;(A)=88H, в ВПД (6D44H)=88H |
MOVX @Ri,A ;где i{0,1} |
1 1 1 1 0 0 1 i |
|
Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.
Алгоритм |
Пример |
((Ri))(A), где i{0,1} |
;(A)=0C6H, (R1)=22H, ;в ВПД (22H)=33H MOVX @R1,A ;(A)=0C6H, (R1)=22H, ;в ВПД (22H)=0C6H |
MOVX @DPTR,A |
1 1 1 1 0 0 0 0 |
|
Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым 16-битового указателя данных DPTR. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.
Алгоритм |
Пример |
((DPTR))(A) |
;(A)=55H, (DPTR)=1234H, ;в ВПД (1234H)=11H MOVX @DPTR,A ;(DPTR)=1234H, ;(A)=55H, ;в ВПД (1234H)=55H |
MUL AB |
1 0 1 0 0 1 0 0 |
|
Команда "умножение" умножает 8-битовую переменную из аккумулятора A на 8-битовую переменную из регистра B, при этом старший и младший байты произведения загружаются соответственно в B и A. Содержимое флага переноса C сбрасывается в "0". Содержимое флага переполнения OV устанавливается в "1" если результат умножения больше 0FFH, в противном случае - также сбрасывается. Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.
Алгоритм |
Пример |
(A)(B)=data16 (A)data16[7-0], (B)data16[15-8] (C)0 если data16 0FFH, то (OV)0 если data16 0FFH, то (OV)1 |
;(A)=50H=80, (B)=0A0H=160, ;(C)=1, (OV)=0 MUL AB ;(C)=0, (OV)=1, ;(A)=00H, (B)=32H |
NOP |
0 0 0 0 0 0 0 0 |
|
Команда "нет операции" увеличивает содержимое программного счетчика PC на единицу, при этом состояние всех остальных программно доступных элементов микроконтроллера не изменяется. Команда имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(PC)(PC)+1
|
;(PC)=1FFH NOP NOP ;(PC)=201H |
ORL A,Rn ;где n=0-7 |
0 1 0 0 1 r r r |
где rrrB=000B-111B |
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)(Rn), где n=0-7 |
;(A)=0FH, (R4)=0F3H ORL A,R4 ;(A)=0FFH, ;(R4)=0F3H |
ORL A,@Ri ;где i{0,1} |
0 1 0 0 0 1 1 i |
|
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)((Ri)), где i{0,1} |
;(A)=22H, (R0)=55H, ;в РПД (55H)=11H ORL A,@R0 ;(A)=33H, (R0)=55H, ;в РПД (55H)=11H |
ORL A,direct |
0 1 0 0 0 1 0 1 |
direct |
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)(direct)
|
;(A)=23H, (PSW)=14H ORL A,PSW ;(A)=37H, ;(PSW)=14H |
ORL A,#data8 |
0 1 0 0 0 1 0 0 |
data8 |
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)data8 |
;(A)=36H ORL A,#41H ;(A)=77H |
ORL direct,A |
0 1 0 0 0 0 1 0 |
direct |
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(direct)(A)(direct) |
;(A)=55H, (P2)=0AAH ORL P2,A ;(A)=55H, ;(P2)=0FFH |
ORL direct,#data8 |
0 1 0 0 0 0 1 1 |
direct |
data8 |
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(direct)(direct)data8 |
;(P1)=0FFH ORL P1,#73H ;(P1)=0FFH |
ORL C,bit |
0 1 1 1 0 0 1 0 |
bit |
Команда "логическое ИЛИ" выполняет дизъюнкцию содержимого флага переноса C с содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Результат помещается в С. Содержимое используемого бита не изменяется. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(C)(C)(bit)
|
;(C)=0, (P1[2])=1, ;в РПД (2EH)=12H ORL C,P1.2 ;(C)=1, (P1[2])=1 ORL C,70H ;(C)=1, ;в РПД (2EH)=12H |
ORL C,/bit |
1 0 1 0 0 0 0 0 |
bit |
Команда "логическое ИЛИ" выполняет дизъюнкцию содержимого флага переноса C с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 8-разрядный адрес которого определяется символическим именем bit, не изменяется. Результат помещается в С. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(C)(C) |
;(C)=0, (AC)=0 ORL C,/AC ;(C)=1, (AC)=0 |
POP direct |
1 1 0 1 0 0 0 0 |
direct |
Команда "чтение из стека" копирует содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым указателя стека SP, в ячейку, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое указателя стека уменьшается на единицу. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(direct)((SP)) (SP)(SP)-1 |
;(SP)=32H, (DPH)=0AAH, ;в РПД (32H)=55H POP DPH ;(SP)=31H,(DPH)=55H |
PUSH direct |
1 1 0 0 0 0 0 0 |
direct |
Команда "запись в стек" увеличивает содержимое указателя стека SP на единицу и после этого копирует содержимое ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций, в ячейку РПД, адресуемую содержимым SP. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(SP)(SP)+1 ((SP))(direct)
|
;(SP)=44H, (DPL)=33H, ;в РПД (45H)=0CEH PUSH DPL ;(SP)=45H, в РПД (45H)=33H |
RET |
0 0 1 0 0 0 1 0 |
|
Команда "возврат из подпрограммы" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC. При этом содержимое SP уменьшается на два. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(PC[15-8])((SP)) (SP)(SP)-1 (PC[7-0])((SP)) (SP)(SP)-1 |
;(SP)=32H, (PC)=3DFH, ;в РПД (31H)=23H, (32H)=01H RET ;(SP)=30H, (PC)=123H, ;в РПД (31H)=23H, (32H)=01H |
RETI |
0 0 1 1 0 0 1 0 |
|
Команда "возврат из прерывания" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC и разрешает прерывания с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. При этом содержимое SP уменьшается на два. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
|
Алгоритм |
Пример |
|||
---|---|---|---|---|---|
|
(PC[15-8])((SP)) (SP)(SP)-1 (PC[7-0])((SP)) (SP)(SP)-1 |
;(SP)=23H, (PC)=0D3FH, ;в РПД (22H)=34H, (23H)=02H RETI ;(SP)=21H, (PC)=234H, ;в РПД (22H)=34H, (23H)=02H |
|||
RL A |
0 0 1 0 0 0 1 1 |
|
|
Команда "сдвиг аккумулятора влево" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 пересылается в бит 0. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A[M+1])(A[M]), где M=0-6 (A[0])(A[7]) |
;(A)=85H, (C)=0 RL A RL A ;(A)=16H, (C)=0 |
RLC A |
0 0 1 1 0 0 1 1 |
|
Команда "сдвиг аккумулятора влево через флаг переноса" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 0 аккумулятора. Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A[M+1])(A[M]), где M=0-6 (A[0])(С), (С)(A[7]) |
;(A)=85H, (C)=0 RLC A ;(A)=0AH, (C)=1 |
RR A |
0 0 0 0 0 0 1 1 |
|
Команда "сдвиг аккумулятора вправо" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0 пересылается в бит 7. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A[M])(A[M+1]), где M=0-6 (A[7])(A[0]) |
;(A)=85H, (C)=1 RR A RR A ;(A)=61H, (C)=1 |
RRC A |
0 0 0 1 0 0 1 1 |
|
Команда "сдвиг аккумулятора вправо через флаг переноса" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 7 аккумулятора. Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A[M])(A[M+1]), где M=0-6 (A[7])(С), (С)(A[0]) |
;(A)=85H, (C)=0 RRC A ;(A)=42H, (C)=1 |
SETB C |
1 1 0 1 0 0 1 1 |
|
Команда "установить бит" устанавливает содержимое флага переноса C в "1". Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(C)1 |
;(C)=0 SETB C ;(C)=1 |
SETB bit |
1 1 0 1 0 0 1 0 |
bit |
Команда "установить бит" устанавливает в "1" содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда имеет время выполнения 1 цикл и на состояние флагов не влияет, за исключением случая, когда флаг является операндом команды.
Алгоритм |
Пример |
(bit)1
|
;(P2)=38H SETB P2.0 ;(P2)=39H |
SJMP addr |
1 0 0 0 0 0 0 0 |
rel |
Команда "короткий переход" выполняет безусловный переход по адресу addr, определяемому при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(PC)(PC)+2+rel |
;MT4 соответствует адресу 104H, ;(PC)=165H, rel=9DH SJMP MT4 ;(PC)=104H |
SUBB A,Rn ;где n=0-7 |
1 0 0 1 1 r r r |
где rrrB=000B-111B |
Команда "вычитание с заемом" вычитает содержимое заданного регистра Rn выбранного банка вместе с содержимым флага переноса С из содержимого аккумулятора A, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении заема в разрядах 7 и 3 аккумулятора устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Содержимое флага переполнения OV устанавливается, если есть заем в бите 6 и нет заема в бите 7, или есть заем в бите 7 и нет - в бите 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.
Алгоритм |
Пример |
(A)(A)-(C)-(Rn), где n=0-7 (С)x, (OV)=x, (AC)=x, где x{0,1} |
;(A)=0C9H, (R2)=54H, (C)=1 SUBB A,R2 ;(A)=74H,(R2)=54H, ;(AC)=0, (C)=0, (OV)=1 |
SUBB A,@Ri ;где i{0,1} |
1 0 0 1 0 1 1 i |
|
Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, из содержимого аккумулятора A, помещая результат в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм |
Пример |
(A)(A)-(C)-((Ri)), где i{0,1} (С)x, (OV)=x, (AC)=x, где x{0,1} |
;(A)=49H, (R0)=3AH, ;в РПД (3AH)=68H, (C)=1 SUBB A,@R0 ;(A)=0E0H, ;(AC)=0, (C)=1, (OV)=0 |
SUBB A,direct |
1 0 0 1 0 1 0 1 |
direct |
Команда "вычитание с заемом" вычитает из содержимого аккумулятора A содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм |
Пример |
(A)(A)-(C)-(direct) (С)x, (OV)=x, (AC)=x, где x{0,1} |
;(A)=97H, (C)=0, (B)=25H SUBB A,B ;(A)=72H, (B)=25H, ;(AC)=0, (C)=0, (OV)=1 |
SUBB A,#data8 |
1 0 0 1 0 1 0 0 |
data8 |
Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с байтом данных data8, непосредственно указанным в команде, из содержимого аккумулятора A, помещая результат в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм |
Пример |
(A)(A)-(C)-data8 (С)x, (OV)=x, (AC)=x, где x{0,1} |
;(A)=0BEH, (C)=0 SUBB A,#3FH ;(A)=7FH, ;(AC)=1, (C)=0, (OV)=1 |
SWAP A |
1 1 0 0 0 1 0 0 |
|
Команда "обмен тетрадой" осуществляет обмен содержимым младших четырех и старших четырех битов аккумулятора A. Команда на флаги не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A[3-0])(A[7-4]) (A[7-4])(A[3-0]) |
;(A)=49H SWAP A ;(A)=94H |
XCH A,Rn ;где n=0-7 |
1 1 0 0 1 r r r |
где rrrB=000B-111B |
Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(Rn), где n=0-7 (Rn)(A) |
;(A)=0FAH, (R6)=93H XCH A,R6 ;(A)=93H, (R6)=0FAH |
XCH A,@Ri ;где i{0,1} |
1 1 0 0 0 1 1 i |
|
Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)((Ri)), где i{0,1} ((Ri))(A) |
;(A)=0FDH, (R1)=30H, ;в РПД (30H)=17H XCH A,@R1 ;(A)=17H, (R1)=30H, ;в РПД (30H)=0FDH |
XCH A,direct |
1 1 0 0 0 1 0 1 |
direct |
Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(direct) (direct)(A) |
;(A)=24H, (DPL)=3DH XCH A,DPL ;(A)=3DH, ;(DPL)=24H |
XCHD A,@Ri ;где i{0,1} |
1 1 0 1 0 1 1 i |
|
Команда "обмен тетрадой" выполняет обмен содержимого младшей тетрады (биты 3-0) аккумулятора A с содержимым младшей тетрады ячейки резидентной памяти данных (РПД), при этом содержимое старших тетрад A и используемой ячейки, адресуемой содержимым заданного регистра Ri выбранного банка, не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A[3-0])((Ri))[3-0], где i{0,1} ((Ri))[3-0](A[3-0]) |
;(A)=0FDH, (R1)=30H, ;в РПД (30H)=17H XCHD A,@R1 ;в РПД (30H)=1DH, ;(A)=0F7H, (R1)=30H |
XRL A,Rn ;где n=0-7 |
0 1 1 0 1 r r r |
где rrrB=000B-111B |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. При этом содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)(Rn), где n=0-7 |
;(A)=0FH, (R4)=0F3H XRL A,R4 ;(A)=0FCH, (R4)=0F3H |
XRL A,@Ri ;где i{0,1} |
0 1 1 0 0 1 1 i |
|
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)((Ri)), где i{0,1} |
;(A)=22H, (R0)=55H, ;в РПД (55H)=33H XRL A,@R0 ;(A)=11H, ;(R0)=55H, в РПД (55H)=33H |
XRL A,direct |
0 1 1 0 0 1 0 1 |
direct |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)(direct)
|
;(A)=23H, (PSW)=34H XRL A,PSW ;(A)=17H, (PSW)=34H |
XRL A,#data8 |
0 1 1 0 0 1 0 0 |
data8 |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(A)(A)data8 |
;(A)=36H XRL A,#22H ;(A)=14H |
XRL direct,A |
0 1 1 0 0 0 1 0 |
direct |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
(direct)(A)(direct) |
;(A)=55H, (P2)=63H XRL P2,A ;(A)=55H, (P2)=36H |
XRL direct,#data8 |
0 1 1 0 0 0 1 1 |
direct |
data8 |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(direct)(direct)data8 |
;(P1)=0FFH XRL P1,#11H ;(P1)=0EEH |