Добавил:
Negorov1337@gmail.com inst:vech.no_17 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

kniga_mikroprotsessory

.pdf
Скачиваний:
21
Добавлен:
02.10.2020
Размер:
1.06 Mб
Скачать

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

 

 

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 цикла.

92

Пример
;(A)=0FCH, (C)=1, (PC)=3FFH, ;MT4
соответствует адресу
;3F0H, rel=0EEH
CJNE A,#0BFH,MT4 ;(C)=0, ;(A)=0FCH, (PC)=3F0H

Алгоритм

 

 

 

Пример

 

 

если (direct) (A), то

 

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

 

 

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

 

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

если (direct) (A), то

 

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

 

 

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

 

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

 

 

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

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

 

 

(C) 0

 

;(PC)=41FH

 

 

 

 

 

 

 

 

 

 

 

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 и (C) 0

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

если 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, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной

93

Пример
;(R7)=80H, (C)=0, (PC)=300H, ;MT5
соответствует адресу
;30FH, rel=0CH
CJNE R7,#81H,MT5 ;(C)=1, ;(R7)=80H, (PC)=30FH

мнемоникой. Флаг переноса 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

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

 

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

 

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

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

 

;(PC)=22AH,

 

 

 

 

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

 

 

 

 

DJNZ Rn,addr ;где n=0-7

 

 

 

 

где rrrB=000-111B.

1 1 0 1 1 r r r

 

rel

 

 

 

 

 

 

 

Команда "декремент и переход, если не равно нулю" выполняет вычитание "1"

из содержимого заданного регистра Rn выбранного банка и осуществляет

94

переход по адресу addr, если содержимое Rn не равно нулю, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда DJNZ Rn,addr на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

 

 

 

Пример

 

 

(Rn) (Rn)-1, где n=0-7

 

 

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

 

 

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

 

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

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

 

 

;выполнится 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

 

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

 

 

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

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

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

 

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

 

 

JB bit,addr

 

 

 

 

 

 

 

0 0 1 0 0 0 0 0

bit

 

rel

Команда "переход, если бит установлен" выполняет переход по адресу addr,

если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в

95

Пример
;MT8 соответствует адресу 400H, ;(PC)=3F1H, rel=0CH, (A)=78H JBС A.3,MT8 ;(PC)=400H, (A)=70H

среде регистров специальных функций, установлено в "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 и (bit) 0

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

JC addr

0 1 0 0 0 0 0 0

rel

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

96

при помощи сложения 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

97

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 не изменяется.

98

Процедура вычисления адреса перехода 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

99

Пример
;(SP)=32H, (PC)=3DFH,
;в РПД (31H)=23H, (32H)=01H RET ;(SP)=30H, (PC)=123H,
Пример
;(SP)=44H, (DPL)=33H, ;в РПД (45H)=0CEH
PUSH DPL ;(SP)=45H, в РПД (45H)=33H
0 0 1 0 0 0 1 0
Пример
;(SP)=32H, (DPH)=0AAH, ;в РПД (32H)=55H
POP DPH ;(SP)=31H,(DPH)=55H

POP direct

1 1 0 1 0 0 0 0

direct

Команда "чтение из стека" копирует содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым указателя стека SP, в ячейку, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое указателя стека уменьшается на единицу. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

(direct) ((SP)) (SP) (SP)-1

PUSH direct

1 1 0 0 0 0 0 0

direct

Команда "запись в стек" увеличивает содержимое указателя стека SP на единицу и после этого копирует содержимое ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций, в ячейку РПД,

адресуемую содержимым SP. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

(SP) (SP)+1 ((SP)) (direct)

RET

Команда "возврат из подпрограммы" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC. При этом содержимое SP

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

Алгоритм

(PC[15-8]) ((SP)) (SP) (SP)-1 (PC[7-0]) ((SP))

100

(SP) (SP)-1

;в РПД (31H)=23H, (32H)=01H

RETI

 

 

 

0 0 1 1 0 0 1 0

Команда "возврат из прерывания" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC и разрешает прерывания с уровнем приоритета, равным уровню приоритета только что обработанного прерывания.

При этом содержимое SP уменьшается на два. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

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

;(SP)=23H, (PC)=0D3FH,

(SP) (SP)-1

;в РПД (22H)=34H, (23H)=02H

(PC[7-0]) ((SP))

RETI ;(SP)=21H, (PC)=234H,

(SP) (SP)-1

;в РПД (22H)=34H, (23H)=02H

2.Задание на лабораторную работу

Изучить команды передачи управления и работы со стеком, выполнить примеры, приведенные для каждой команды при помощи симулятора,

сохранить результаты в файл.

3.Содержание отчета

1.Назначение и особенности применения команд передачи управления.

2.Назначение и особенности применения команд работы со стеком.

3.Мнемонический код команд.

4.Файл с результатами выполнения работы.

4.Контрольные вопросы:

1.Перечислите команды ветвления.

2.Перечислите команды работы со стеком.

3.Перечислите команды передачи управления.

101

Соседние файлы в предмете Информатика