Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Stenin Lab / Система команд АСМ51 подробно

.pdf
Скачиваний:
53
Добавлен:
10.02.2015
Размер:
629.14 Кб
Скачать

Система команд языка АСМ51

Система команд языка АСМ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]

Остаток при целочисленном делении.

Время выполнения рассматриваемых команд указывается в машинных циклах. Напомним, что

длительность одного

машинного цикла определяется выражением T 12 / f , где 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)=07H, (PC)=28DH,

((SP)) (PC[7-0]), (SP) (SP)+1

 

;MT1 соответствует адресу

((SP)) (PC[15-8])

 

;345H в ПП

(PC[10-0]) addr11[10-8] addr11[7-0],

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

 

;(A)=0C3H, (R6)=0AAH

(С) x, (OV) =x, (AC) =x, где x {0,1}

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}

 

;(A)=95H, (R1)=31H,

(С) x, (OV) =x, (AC) =x, где x {0,1}

;в РПД (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)

 

;(A)=77H, (P1)=0FFH

(С) x, (OV) =x, (AC) =x, где x {0,1}

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

 

;(A)=09H

(С) x, (OV) =x, (AC) =x, где x {0,1}

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

 

;(A)=0B2H, (R3)=99H, (C)=1

(С) x, (OV) =x, (AC) =x, где x {0,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}

;(A)=0D5H,

(R0)=3AH,

(С) x, (OV) =x, (AC) =x, где x {0,1}

;в РПД (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)

 

;(A)=11H, (C)=1,

(С) x, (OV) x, (AC) x,

 

;(DPH)=0DFH

где x {0,1}

 

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

 

;(A)=55H, (C)=0

(С) x, (OV) x, (AC) x, где x {0,1}

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)=28FH,

(PC[10-0]) addr11[10-8] addr11[7-0],

;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)=1, (AC)=0

 

 

(C) (C) (bit)

 

 

 

 

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

;(A)=97H, (P2)=0F0H, (C)=0,

и (C) 0

 

;(PC)=3FFH, MT3 соответству-

если (direct) (A), то (PC) (PC)+3+rel

;ет адресу 41FH, rel=1DH

и (C) 1

 

CJNE A,P2,MT3 ;(C)=1,

 

 

 

;(A)=97H, (P2)=0F0H,

 

 

если (direct)=(A), то (PC) (PC)+3 и

 

 

;(PC)=41FH

 

 

(C) 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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 и

;(A)=0FCH, (C)=1, (PC)=3FFH,

(C) 0

 

;MT4 соответствует адресу

если data8 (A), то (PC) (PC)+3+rel и

;3F0H, rel=0EEH

 

 

(C) 1

 

CJNE A,#0BFH,MT4 ;(C)=0,

 

;(A)=0FCH, (PC)=3F0H

 

 

если data8=(A), то (PC) (PC)+3 и

 

 

 

 

 

 

 

(C) 0

 

 

 

 

 

 

 

 

 

 

 

 

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

;(R7)=80H, (C)=0, (PC)=300H,

и (C) 0

 

;MT5 соответствует адресу

если data8 (Rn), то (PC) (PC)+3+rel

;30FH, rel=0CH

 

 

и (C) 1

 

CJNE R7,#81H,MT5 ;(C)=1,

 

;(R7)=80H, (PC)=30FH

 

 

если data8=(Rn), то (PC) (PC)+3 и

 

 

 

 

 

 

 

(C) 0

 

 

 

 

 

 

 

 

 

 

 

 

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)), то

;(R0)=41H, (C)=1, (PC)=200H,

(PC) (PC)+3+rel и (C) 0

;в РПД (41H)=57H,

если data8 ((Ri)), то

;MT6 соответствует адресу

(PC) (PC)+3+rel и (C) 1

;22AH, rel=27H

CJNE @R0,#29H,MT6 ;(C)=0,

если data8=((Ri)), то

;(PC)=22AH,

(PC) (PC)+3 и (C) 0

;в РПД (41H)=57H

 

 

 

CLR A

1 1 1 0 0 1 0 0

Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

 

 

Пример

(A) 0

 

;(A)=6CH, (C)=0, (AC)=1

 

 

CLR A ;(A)=00H, (C)=0, (AC)=1

 

 

 

CLR C

1 1 0 0 0 0 1 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

 

 

 

 

 

 

 

CPL A

1 1 1 1 0 1 0 0

 

Команда "инверсия аккумулятора" инвертирует содержимое каждого бита аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

 

 

Алгоритм

 

 

Пример

 

 

 

 

;(A)=65H=01100101B

(A) (A)

 

CPL A ;(A)=9AH=10011010B

 

 

 

 

 

 

 

 

 

 

 

CPL C

1 0 1 1 0 0 1 1

 

Команда "инверсия флага переноса" инвертирует содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.

 

 

Алгоритм

 

 

Пример

 

 

 

 

;(C)=1, (AC)=1, (OV)=0

(C) (C)

 

 

CPL C ;(C)=0, (AC)=1, (OV)=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CPL bit

1 0 1 1 0 0 1 0

bit

 

Команда "инверсия бита" инвертирует содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.

 

 

Алгоритм

 

 

 

Пример

 

 

 

 

;(P1)=39H=00111001B

(bit) (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", то к содержимому A прибавляется 06H, при этом получается соответствующая двоично-десятичная цифра в младшем полубайте A. Указанное сложение не изменяет содержимое флага AC, но устанавливает в "1" содержимое флага переноса C, если перенос из поля младших четырех бит распространяется через все старшие биты A, в противном случае - не изменяет (C). Далее, если содержимое флага C равно "1", или если значение битов 7-4 аккумулятора превышает 9 (1010xxxxB1111xxxxB), то это значение увеличивается на 6, создавая соответствующую двоично-десятичную цифру в старшем полубайте A. При этом флаг C устанавливается (не изменяется), если имеется (отсутствует) перенос из бита 7 аккумулятора. Время выполнения команды 1 цикл.

Алгоритм

 

 

Пример

если (A[3-0]) 9

или (AC)=1,

 

;(A)=30H, (R3)=99H

то (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 цикл.

Алгоритм

 

 

Пример

(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

;(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

 

 

 

 

 

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

;(R3)=0AH, rel=0FEH

 

MT5: DJNZ R3,MT5 ;команда

 

 

если (Rn) 0, то (PC) (PC)+2+rel

;выполнится 10 раз

 

 

если (Rn) 0, то (PC) (PC)+2

 

 

 

 

 

 

 

 

 

 

 

 

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

 

;(P1)=0AH, rel=0FDH

если (direct) 0, то (PC) (PC)+3+rel

MT5: DJNZ P1,MT5 ;команда

если (direct) 0, то (PC) (PC)+3

;выполнится 10 раз

 

 

 

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

 

;(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

 

 

 

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

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

;MT6 соответствует

 

 

если (bit) 0, то (PC) (PC)+3

 

;адресу 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

;MT8 соответствует адресу 400H,

и (bit) 0

 

;(PC)=3F1H, rel=0CH, (A)=78H

если (bit) 0, то (PC) (PC)+3

 

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

;MT1 соответствует адресу 1F0H,

если (C) 0, то (PC) (PC)+2

 

;(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

;MT2 соответствует адресу 2FFH,

если (bit) 1, то (PC) (PC)+3

;(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

;MT1 соответствует адресу 200H,

если (C) 1, то (PC) (PC)+2

 

;(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

;MT4 соответствует адресу 183H,

если (A) 0, то (PC) (PC)+2

 

;(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

;MT4 соответствует адресу 231H,

если (A) 0, то (PC) (PC)+2

 

;(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)=10H, (PC)=135H,

(SP) (SP)+1, ((SP)) (PC[7-0])

 

;MT соответствует адресу 300H

(SP) (SP)+1, ((SP)) (PC[15-8])

LCALL MT ;(SP)=12H, (PC)=300H,

(PC) addr16[15-0]

 

;в РПД (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