Система команд языка АСМ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 с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм
Пример
(A):=(A)+((Ri)), где iÎ{0,1}
(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}
Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм
Пример
(A):=(A)+(direct)
(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}
Команда "сложение" складывает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм
Пример
(A):=(A)+data8
(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора 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, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат помещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм
Пример
(A):=(A)+(C)+((Ri)), где iÎ{0,1}
(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм
Пример
(A):=(A)+(C)+(direct)
(С):=x, (OV):=x, (AC):=x,
где xÎ{0,1}
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и байт данных data8, непосредственно указанный в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм
Пример
(A):=(A)+(C)+data8
(С):=x, (OV):=x, (AC):=x, где xÎ{0,1}
Команда "абсолютный переход" передает управление по адресу с символическим именем 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 с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 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 с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 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 с байтом данных 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
Команда "сравнение и переход, если не равно" сравнивает содержимое заданного регистра 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
Команда "сравнение и переход, если не равно" сравнивает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра 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
Команда "сброс флага переноса" сбрасывает (обнуляет) содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм
Пример
(C):=0
;(C)=1
CLR C;(C)=0
CLR bit
1 1 0 0 0 0 1 0
bit
Команда "сброс бита" сбрасывает (обнуляет) содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.
Команда "инверсия бита" инвертирует содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.
Команда "десятичная коррекция аккумулятора" упорядочивает 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 цикл.
Команда "инкремент байта" производит прибавление "1" к содержимому заданного регистра Rn выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.
Команда "инкремент байта" производит прибавление "1" к содержимому ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций. Команда на флаги не влияет и имеет время выполнения 1 цикл.
Команда "инкремент байта" производит прибавление "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 цикла.
Команда "переход, если бит установлен" выполняет переход по адресу 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 цикла.
Команда "переход, если бит не установлен" выполняет переход по адресу 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 цикла.
Команда "длинный переход" выполняет безусловный переход по адресу 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 содержимым ячейки, 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.
Команда "переслать байт" пересылает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра 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 выбранного банка, содержимым ячейки, адрес которой определяется символическим именем 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 цикла и на состояние флагов не влияет, за исключением случая, когда флаг является операндом-приемником.
Команда "переслать два байта" загружает указатель данных DPTR 16-битовой константой data16, непосредственно указанной в команде, причем содержимое второго и третьего байтов команды загружается соответственно в старший (DPH) и младший (DPL) байты DPTR. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Команда "переслать байт" загружает аккумулятор A содержимым ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого 16-битового указателя данных DPTR. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Содержимое DPTR не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Команда "переслать байт" загружает в аккумулятор A содержимое ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого программного счетчика PC, которое увеличено на единицу. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым 16-битового указателя данных DPTR, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.
Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.
Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым 16-битового указателя данных DPTR. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.
Команда "умножение" умножает 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)&Uacu
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями: