kniga_mikroprotsessory
.pdf
|
|
Алгоритм |
Пример |
|
|
|
|
|
|
(A) |
|
|
|
;(A)=65H=01100101B |
(A) |
||||
|
|
|
|
CPL A ;(A)=9AH=10011010B |
|
|
|
||
CPL C |
|
|
||
|
1 0 1 1 0 0 1 1 |
|||
|
|
|
|
|
Команда "инверсия флага переноса" инвертирует содержимое флага переноса
C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.
|
|
Алгоритм |
|
|
Пример |
|
|
|
|
|
|
|
|
|
|
(C) |
|
|
|
;(C)=1, (AC)=1, (OV)=0 |
|
|
|
(C) |
|
|
|||||
|
|
|
|
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 |
(bit) |
||||
|
|
|
|
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", то к
72
содержимому A прибавляется 06H, при этом получается соответствующая двоично-десятичная цифра в младшем полубайте A. Указанное сложение не изменяет содержимое флага AC, но устанавливает в "1" содержимое флага переноса C, если перенос из поля младших четырех бит распространяется через все старшие биты A, в противном случае - не изменяет (C). Далее, если содержимое флага C равно "1", или если значение битов 7-4 аккумулятора превышает 9 (1010xxxxB-1111xxxxB), то это значение увеличивается на 6,
создавая соответствующую двоично-десятичную цифру в старшем полубайте
A. При этом флаг C устанавливается (не изменяется), если имеется
(отсутствует) перенос из бита 7 аккумулятора. Время выполнения команды 1
цикл.
Алгоритм |
Пример |
|
|
|
|
|
;(A)=30H, (R3)=99H |
|
если (A[3-0]) 9 или (AC)=1, |
|
|
то (A) (A)+6 |
ADD A,R3 ;(A)=0C9H, |
|
если (A[7-4]) 9 или (C)=1, |
;(AC)=0, (C)=0 |
|
то (A[7-4]) (A[7-4])+6 |
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
цикл.
73
Алгоритм |
|
|
Пример |
|
|
|
|
|
|
|
|
|
|
(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 |
|
|
|
|
|
|
|
|
|
|
|
0 0 0 1 0 1 1 i |
|
DEC @Ri ;где i {0,1} |
|
|
|
Команда "декремент" производит вычитание "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 - остаток. Содержимое флага
74
переноса C сбрасывается в "0". Содержимое флага переполнения OV также сбрасывается, а в случае деления на нуль - устанавливается в "1". Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.
Алгоритм |
Пример |
|
|
|
|
(A) (A):(B), (B) mod[(A):(B)], (C) 0 |
;(A)=0FBH=251, (B)=12H=18, |
|
если (В) 0, то (OV) 0 |
;(C)=1, (OV)=1 |
|
если (В)=0, то (OV) 1 |
DIV AB ;(C)=0, (OV)=0, |
|
|
|
;(A)=0DH=13, (B)=11H=17 |
|
|
|
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
INC direct |
0 0 0 0 0 1 0 1 |
direct |
|
|
|
Команда "инкремент байта" производит прибавление "1" к содержимому ячейки, 8-разрядный адрес которой определяется символическим именем direct
в области резидентной памяти данных (РПД) или в среде регистров
75
специальных функций. Команда на флаги не влияет и имеет время выполнения
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Алгоритм |
Пример |
|
|
|
|
|
|
|
;(R0)=44H, в РПД (44H)=55H |
|
((Ri)) |
((Ri))+1, где i {0,1} |
|
|
|
|
|
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 |
|
|
76
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
NOP
Команда "нет операции" увеличивает содержимое программного счетчика PC
на единицу, при этом состояние всех остальных программно доступных элементов микроконтроллера не изменяется. Команда имеет время выполнения
1 цикл.
Алгоритм |
|
|
Пример |
|
|
|
|
(PC) (PC)+1 |
|
;(PC)=1FFH |
|
|
|
NOP |
|
|
|
NOP ;(PC)=201H |
|
|
|
|
|
ORL A,Rn ;где n=0-7 |
|
где rrrB=000B-111B. |
|
0 1 0 0 1 r r r |
|||
|
|
|
|
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка,
77
помещая результат в 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}
Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД),
адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
|
|
Алгоритм |
|
|
Пример |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;(A)=22H, (R0)=55H, |
|
|
|
(A) |
(A) |
((Ri)), где i {0,1} |
|
|
|
|
|
|
|
|
|
;в РПД (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, |
|
|
78
;(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-
разрядный адрес которой (которого) определяется символическим именем
79
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)=0, (P1[2])=1, |
|
|
|
(C) |
(C) (bit) |
|
|
|
|
|
|
|
|
;в РПД (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 цикла.
80
|
|
Алгоритм |
Пример |
|
|
|
|
|
|
(C) (C) |
|
|
|
;(C)=0, (AC)=0 |
(bit) |
||||
|
|
|
|
ORL C,/AC ;(C)=1, (AC)=0 |
|
|
|
||
RL A |
|
|
||
|
0 0 1 0 0 0 1 1 |
|||
|
|
|
|
|
Команда "сдвиг аккумулятора влево" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 пересылается в бит 0. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
|
|
|
;(A)=85H, (C)=0 |
|
(A[M+1]) (A[M]), где M=0-6 |
|
|
(A[0]) (A[7]) |
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)=85H, (C)=0 |
(A[0]) (С), (С) (A[7]) |
RLC A ;(A)=0AH, (C)=1 |
|
|
RR A |
0 0 0 0 0 0 1 1 |
|
|
Команда "сдвиг аккумулятора вправо" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0 пересылается в бит 7. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
81