|
|
Алгоритм |
Пример |
|
|
|
|
|
|
(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