Материал: kniga_mikroprotsessory

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

 

Алгоритм

Пример

 

 

 

 

 

(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

Пример
;(R1)=35H, (C)=0, (AC)=1
INC R1 ;(R1)=36H, (C)=0, (AC)=1

переноса 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

INC @Ri ;где i {0,1} 0 0 0 0 0 1 1 i
Команда "инкремент байта" производит прибавление "1" к содержимому ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, на флаги не влияет и имеет время выполнения 1
цикл.

специальных функций. Команда на флаги не влияет и имеет время выполнения

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

Источник: https://studfile.net/preview/15934500/