kniga_mikroprotsessory
.pdfAJMP 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
Алгоритм |
|
|
|
Пример |
|
|
|
если (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
мнемоникой. Флаг переноса 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
среде регистров специальных функций, установлено в "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
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