Система команд языка АСМ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. |
| X:Y | Целочисленное деление элемента X на элемент Y. |
| mod[X:Y] | Остаток при целочисленном делении. |
Время выполнения рассматриваемых команд указывается в машинных циклах. Напомним, что длительность одного машинного цикла определяется выражением
, где f есть частота синхронизации микроконтроллера.
| ACALL addr11 | addr11[10-8] 1 0 0 0 1 | addr11[7-0] |
Команда "абсолютный вызов подпрограммы" вызывает безусловно подпрограмму, размещенную по адресу addr11. При этом содержимое счетчика команд PC увеличивается на 2 для получения адреса следующей команды, после чего полученное 16-разрядное значение PC помещается в стек, и содержимое указателя стека SP также увеличивается на 2. Адрес перехода образуется с помощью конкатенации (сцепления) 5-ти старших бит увеличенного содержимого счетчика команд PC, содержимого 7-5 битов старшего байта команды и содержимого второго байта команды. Адрес перехода и указанная команда должны находиться внутри одной страницы памяти программ (ПП) объемом 2 Кбайт, определяемой содержимым пяти старших бит PC. Время выполнения команды 2 цикла.
| | Алгоритм | Пример |
| | (PC):=(PC)+2, (SP):=(SP)+1 ((SP)):=(PC[7-0]), (SP):=(SP)+1 ((SP)):=(PC[15-8]) (PC[10-0]):=addr11[10-8] çêaddr11[7-0], где çêесть знак конкатенации | ;(SP)=07H, (PC)=28DH, ;MT1 соответствует адресу;345H в ПП ACALL MT1;(PC)=345H,;(SP)=09H, ;в РПД (09H)=02H, (08H)=8FH |
| ADD A,Rn;где n=0-7 | 0 0 1 0 1 r r r | где rrrB=000B-111B | |
| | | | | | |
Команда "сложение" складывает содержимое аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7 и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.
| Алгоритм | Пример |
| (A):=(A)+(Rn), где n=0-7 (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=0C3H, (R6)=0AAH ADD A,R6;(A)=6DH,(R6)=0AAH, ;(AC)=0, (C)=1, (OV)=1 |
| ADD A,@Ri;где iÎ{0,1} | 0 0 1 0 0 1 1 i | |
Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
| Алгоритм | Пример |
| (A):=(A)+((Ri)), где iÎ{0,1} (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=95H, (R1)=31H, ;в РПД (31H)=4CH ADD A,@R1;(A)=0E1H, (C)=0,;(AC)=1, (OV)=0, (31H)=4CH |
| ADD A,direct | 0 0 1 0 0 1 0 1 | direct |
Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
| | Алгоритм | Пример |
| | (A):=(A)+(direct) (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=77H, (P1)=0FFH ADD A,P1;(A)=76H, ;(AC)=1, (C)=1, (OV)=0 ;(P1)=0FFH |
| ADD A,#data8 | 0 0 1 0 0 1 0 0 | data8 | |
| | | | | | |
Команда "сложение" складывает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
| Алгоритм | Пример |
| (A):=(A)+data8 (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=09H ADD A,#0D3H;(A)=0DCH, ;(AC)=0, (C)=0, (OV)=0 |
| ADDC A,Rn;где n=0-7 | 0 0 1 1 1 r r r | где rrrB=000B-111B |
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса С и содержимое заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7 и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.
| Алгоритм | Пример |
| (A):=(A)+(C)+(Rn), где n=0-7 (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=0B2H, (R3)=99H, (C)=1 ADDC A,R3;(A)=4CH,(R3)=99H, ;(AC)=0, (C)=1, (OV)=1 |
| ADDC A,@Ri;где iÎ{0,1} | 0 0 1 1 0 1 1 i | |
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат помещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
| Алгоритм | Пример |
| (A):=(A)+(C)+((Ri)), где iÎ{0,1} (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=0D5H, (R0)=3AH, ;в РПД (3AH)=1AH, (C)=1 ADDC A,@R0;(A)=0F0H, ;(AC)=1, (C)=0, (OV)=0, ;(3AH)=1AH |
| ADDC A,direct | 0 0 1 1 0 1 0 1 | direct |
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
| Алгоритм | Пример |
| (A):=(A)+(C)+(direct) (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=11H, (C)=1, ;(DPH)=0DFH ADDC A,DPH;(A)=0F1H, ;(AC)=1, (C)=0, (OV)=0, ;(DPH)=0DFH |
| ADDC A,#data8 | 0 0 1 1 0 1 0 0 | data8 |
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и байт данных data8, непосредственно указанный в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
| Алгоритм | Пример |
| (A):=(A)+(C)+data8 (С):=x, (OV):=x, (AC):=x, где xÎ{0,1} | ;(A)=55H, (C)=0 ADDC A,#55H;(A)=0AAH, ;(AC)=0, (C)=0, (OV)=1 |
| AJMP addr11 | addr11[10-8] 0 0 0 0 1 | addr11[7-0] |
Команда "абсолютный переход" передает управление по адресу с символическим именем addr11, который образуется с помощью конкатенации (сцепления) 5-ти старших бит содержимого счетчика команд PC (после увеличения его на 2), содержимого 7-5 битов старшего байта команды и содержимого второго байта команды. Адрес перехода и указанная команда должны находиться внутри одной страницы памяти программ (ПП) объемом 2 Кбайт, определяемой содержимым пяти старших бит PC. Время выполнения команды 2 цикла.
| | Алгоритм | Пример |
| | (PC):=(PC)+2 (PC[10-0]):=addr11[10-8] çêaddr11[7-0], где çêесть знак конкатенации | ;(PC)=28FH, ;MT2 соответствует адресу;34AH в ПП AJMP MT2;(PC)=34AH |
| ANL A,Rn;где n=0-7 | 0 1 0 1 1 r r r | где rrrB=000B-111B | |
| | | | | | |
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
| Алгоритм | Пример |
| (A):=(A)Ù(Rn), где n=0-7 | ;(A)=0FH, (R2)=0C5H ANL A,R2;(A)=05H,(R2)=0C5H |
| ANL A,@Ri;где iÎ{0,1} | 0 1 0 1 0 1 1 i | |
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
| Алгоритм | Пример |
| (A):=(A)Ù((Ri)), где iÎ{0,1} | ;(A)=0BCH, (R0)=35H, ;в РПД (35H)=47H ANL A,@R0;(A)=04H, ;в РПД (35H)=47H |
| ANL A,direct | 0 1 0 1 0 1 0 1 | direct |
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
| Алгоритм | Пример |
| (A):=(A)Ù(direct) | ;(A)=0A3H, (PSW)=85H ANL A,PSW;(A)=81H,(PSW)=85H |
| ANL A,#data8 | 0 1 0 1 0 1 0 0 | data8 |
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
| Алгоритм | Пример |
| (A):=(A)Ùdata8 | ;(A)=36H ANL A,#0DDH;(A)=14H |
| ANL direct,A | 0 1 0 1 0 0 1 0 | direct |
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
| Алгоритм | Пример |
| (direct):=(direct)Ù(A) | ;(A)=55H, (P2)=0AAH ANL P2,A;(A)=55H,(P2)=00H |
| ANL direct,#data8 | 0 1 0 1 0 0 1 1 | direct | data8 |
Команда "логическое И" выполняет поразрядную конъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
| Алгоритм | Пример |
| (direct):=(direct)Ùdata8 | ;(P1)=0FFH ANL P1,#73H;(P1)=73H |
| ANL C,bit | 1 0 0 0 0 0 1 0 | bit |
Команда "логическое И" выполняет конъюнкцию содержимого флага переноса C с содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Результат помещается в С. Содержимое используемого бита не изменяется. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.
| | Алгоритм | Пример |
| | (C):=(C)Ù(bit) | ;(C)=1, (P1[0])=0, ;в РПД (24H)=0FH ANL C,P1.0;(C)=0, (P1[0])=0 ANL C,20H;(C)=0, (24H)=0FH |
| ANL C,/bit | 1 0 1 1 0 0 0 0 | bit | |
| | | | | | |
Команда "логическое И" выполняет конъюнкцию содержимого флага переноса C с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 8-разрядный адрес которого определяется символическим именем bit, не изменяется. Результат помещается в С. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.
| Алгоритм | Пример |
(C):=(C) Ù | ;(C)=1, (AC)=0 ANL C,/AC;(C)=1, (AC)=0 |
| CJNE A,direct,addr | 1 0 1 1 0 1 0 1 | direct | rel |
Команда "сравнение и переход, если не равно" сравнивает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct, и выполняет переход по адресу addr, если содержимое A не равно содержимому используемой ячейки или используемого регистра, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на три. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) используемой ячейки или используемого регистра, в противном случае флаг устанавливается в "1". Команда не изменяет (A) и (direct) и имеет время выполнения 2 цикла.
| Алгоритм | Пример |
| если (direct)<(A), то (PC):=(PC)+3+rel и (C):=0 если (direct)>(A), то (PC):=(PC)+3+rel и (C):=1 если (direct)=(A), то (PC):=(PC)+3 и (C):=0 | ;(A)=97H, (P2)=0F0H, (C)=0, ;(PC)=3FFH, MT3 соответству- ;ет адресу 41FH, rel=1DH CJNE A,P2,MT3;(C)=1, ;(A)=97H, (P2)=0F0H, ;(PC)=41FH |
| CJNE A,#data8,addr | 1 0 1 1 0 1 0 0 | data8 | rel |
Команда "сравнение и переход, если не равно" сравнивает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое A не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода, влияние на (A) и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) data8, в противном случае флаг устанавливается в "1".
| Алгоритм | Пример |
| если data8<(A), то (PC):=(PC)+3+rel и (C):=0 если data8>(A), то (PC):=(PC)+3+rel и (C):=1 если data8=(A), то (PC):=(PC)+3 и (C):=0 | ;(A)=0FCH, (C)=1, (PC)=3FFH,;MT4 соответствует адресу ;3F0H, rel=0EEH CJNE A,#0BFH,MT4;(C)=0, ;(A)=0FCH, (PC)=3F0H |
| CJNE Rn,#data8,addr | 1 0 1 1 1 r r r | data8 | rel |
| где n=0-7 | где rrrB=000B-111B |
Команда "сравнение и переход, если не равно" сравнивает содержимое заданного регистра Rn выбранного банка с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое Rn не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое Rn больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на (Rn).
| Алгоритм | Пример |
| если data8<(Rn), то (PC):=(PC)+3+rel и (C):=0 если data8>(Rn), то (PC):=(PC)+3+rel и (C):=1 если data8=(Rn), то (PC):=(PC)+3 и (C):=0 | ;(R7)=80H, (C)=0, (PC)=300H,;MT5 соответствует адресу ;30FH, rel=0CH CJNE R7,#81H,MT5;(C)=1, ;(R7)=80H, (PC)=30FH |
| CJNE @Ri,#data8,addr | 1 0 1 1 0 1 1 i | data8 | rel |
| где iÎ{0,1} | |
Команда "сравнение и переход, если не равно" сравнивает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое используемой ячейки не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое используемой ячейки больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на ((Ri)).
| Алгоритм | Пример |
| если data8<((Ri)), то (PC):=(PC)+3+rel и (C):=0 если data8>((Ri)), то (PC):=(PC)+3+rel и (C):=1 если data8=((Ri)), то (PC):=(PC)+3 и (C):=0 | ;(R0)=41H, (C)=1, (PC)=200H, ;в РПД (41H)=57H, ;MT6 соответствует адресу ;22AH, rel=27H CJNE @R0,#29H,MT6;(C)=0, ;(PC)=22AH, ;в РПД (41H)=57H |
Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.
| Алгоритм | Пример |
| (A):=0 | ;(A)=6CH, (C)=0, (AC)=1 CLR A;(A)=00H, (C)=0, (AC)=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 |
Команда "инверсия аккумулятора" инвертирует содержимое каждого бита аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.
| Алгоритм | Пример |
(A):= | ;(A)=65H=01100101B CPL A;(A)=9AH=10011010B |
Команда "инверсия флага переноса" инвертирует содержимое флага переноса 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 |
Команда "десятичная коррекция аккумулятора" упорядочивает 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 |
Команда "декремент" производит вычитание "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 |
Команда "деление" делит 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 раз |
Команда "инкремент байта" производит прибавление "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 |
Команда "инкремент двух байтов" производит прибавление "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 |
Команда "умножение" умножает 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 |
Команда "нет операции" увеличивает содержимое программного счетчика 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)&Uacu
|