Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Команды передачи управления




Группа команд передачи управления является самой многочисленной группой. Она содержит 40 инструкций, которые делятся на две подгруппы:

  • Команды условных и безусловных переходов (табл.1.7):
  • Команды вызова подпрограмм и обслуживания прерываний (табл.1.8).

Центральный процессор CPU08 может использовать три команды безусловного перехода: традиционную трехбайтовую команду JMP и две двухбайтовых команды BRA и BRN. Команда JMP отличается расширенным набором способов задания адреса перехода. Этот адрес может быть, в том числе, определен одним из способов индексной адресации, что позволяет разместить изменяемый в ходе выполнения программы адрес в одной из ячеек ОЗУ. Двухбайтовая команда BRA реализует безусловный переход в пределах смещения -128¸+127 относительно текущего адреса. Эта команда позволяет более экономно расходовать память. Команда BRN аналогична команде NOP, но имеет двухбайтовый формат. Значение смещения, которое указано во втором байте команды, смысла не имеет. Эта команда полезна для режимов отладки программного обеспечения в абсолютном коде. Она позволяет заменить инструкцию ветвления на инструкциюNOP без изменения байта смещения rel в формате команды условного перехода.

Группа команд ветвления чрезвычайно широка. Кроме переходов по традиционным условиям C, Z, N, H, реализованы переходы по комбинациям флагов C и Z для сравнения операндов в прямом коде без знака, а также по комбинациям флагов C, Z, и V для сравнения операндов в дополнительном коде со знаком.

Особое внимание следует обратить на команды CBEQ и DBNZ:

CBEQopr, rel;Сравнить содержимое аккумулятора ACC с содержимым прямоадресуемой

;ячейки памяти и перейти по метке, если они равны.

CBEQx +, rel         ;Сравнить содержимое аккумулятора ACC с содержимым ячейки памяти,

; адрес которой содержится в индексном регистре, и перейти по метке, если

; они равны. Содержимоеиндексного регистра H:X увеличивается на 1

;после выполнения сравнения.

DBNZX, rel          ;Уменьшить на 1 содержимое ячейки памяти, адрес которой указан в

;индексном регистреH:X, и перейти по метке, если результат не равен 0.

DBNZArel            ;Уменьшить на 1 содержимое аккумулятора ACC, и перейти по метке,

;если результат не равен 0.

Команды CBEQ и DBNZ имеют достаточно широкий набор способов адресации.

 


Табл.1.7. Команды условных и безусловных переходов.

Мнемокод

Операция

Выполняемое действие

Способ адресации

Влияние на признаки

V H I N Z C

Команды безусловного перехода

JMP JMP opr JMP opr JMP opr,X JMP opr,X JMP,X Безусловный переход по адресу, указанному в ячейке памяти (ОЗУ или ПЗУ). Адрес ячейки задан используемым в команде способом адресации.     PC Jump Address   DIR EXT IX2 IX1 IX   -   -   -   -   -   -
BRA BRA rel Безусловный переход по адресу, код смещения которого указан во втором байте команды.   PC (PC) + $0002 + rel   REL   -   -   -   -   -   -
BRN BRN rel Перейти к следующей команде. Эквивалентна двум инструкциям NOP. Полезна в режиме отладки в абсолютном коде для замены инструкций условного перехода без изменения абсолютных адресов.   PC (PC) + $0002   REL   -   -   -   -   -   -
NOP Пустая операция. Счетчик команд PC увеличивается на 1. Другие регистры не изменяются.   None   INH   -   -   -   -   -   -

Команды ветвления

BCS BCS rel Перейти по метке, если бит переноса С установлен. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (С) = 1     REL     -     -     -     -     -     -
BCC BCCrel Перейти по метке, если бит переноса С сброшен. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (С) = 0     REL     -     -     -     -     -     -
BEQ BEQ rel Перейти по метке, если r = m. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (Z) = 1   REL   -   -   -   -   -   -
BNE BNE rel Перейти по метке, если r ¹ m. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (Z) = 0   REL   -   -   -   -   -   -
BHCS BHCS rel Перейти по метке, если бит дополнительного переноса H установлен. Иначе перейти к следующей команде.     PC (PC) + $0002 + rel,  если (H) = 1     REL     -     -     -     -     -     -
BHCC BHCC rel Перейти по метке, если бит дополнительного переноса H сброшен. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel, если (H)=0     REL     -     -     -     -     -     -
CBEQ CBEQ opr,rel   CBEQA #opr,rel   CBEQX #opr,rel   CBEQ opr,X+,rel   CBEQ X+,rel   CBEQ opr,SP,rel   Сравнить содержимое аккумулятора ACC или регистра Х с содержимым ячейки памяти M (или константой) и перейти по метке, если равны.   PC (PC)+$0003+rel,  если (A)- (M)=$00 PC (PC)+$0003+rel,  если (A)- (M)=$00 PC (PC)+$0003+rel,  если (X)- (M)=$00 PC (PC)+$0003+rel,  если (A)-(M)=$00 PC (PC)+$0002+rel,  если (A)-(M)=$00 PC (PC)+$0004+rel,  если (A)-(M)=$00   DIR   IMM   IMM   IX1+   IX+   SP1   -   -   -   -   -   -
DBNZ DBNZ opr,rel DBNZA rel DBNZX rel DBNZopr,X,rel DBNZX,rel DBNZ opr,SP,rel   Вычесть единицу из содержимого ячейки памяти M, или аккумулятора ACC, или регистра X и перейти по метке, если результат не равен 0. A(A)-$01 или M(M)-$01 или X(X)-$01, PC(PC)+$0003+rel если (result)¹0 для DBNZDIR и IX1 PC(PC)+$0002+rel если (result)¹0 для DBNZA, DBNZX и IX PC(PC)+$0004+rel если (result) ¹0 для DBNZ SP1   DIR INH INH IX1 IX SP1   -   -   -   -   -   -
BIH BIH rel Перейти по метке, если на входе  высокий логический уровень. Иначе перейти к следующей команде.     PC(PC) + $0002 + rel, если =1     REL     -     -     -     -     -     -
BIL BIL rel Перейти по метке, если на входе низкий логический уровень. Иначе перейти к следующей команде.     PC(PC) + $0002 + rel, если =0     REL     -     -     -     -     -     -
BMS BMS rel Перейти по метке, если бит маски I установлен. Иначе перейти к следующей команде. Условие: I = 1.   PC(PC) + $0002 + rel, если (I)=1     REL     -     -     -     -     -     -
BMC BMC rel Перейти по метке, если бит маски I сброшен. Иначе перейти к следующей команде. Условие: I = 0.   PC(PC) + $0002 + rel, если (I)=0     REL     -     -     -     -     -     -
BRSET BRSET n, opr, rel Перейти по указанному адресу, если бит n в байте данных установлен. Иначе перейти к следующей команде. Для указания байта данных используется только прямая адресация. Диапазон адресов $00 ¸$FF.   PC (PC) + $0003 + rel, если (Mn) = 1   DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)   -   -   -   -   -   b
BRCLR BRCLR n, opr, rel Перейти по указанному адресу, если бит n в байте данных равен 0. Иначе перейти к следующей команде. Для указания байта данных используется только прямая адресация. Диапазон адресов $00 ¸$FF.   PC (PC) + $0003 + rel, если (Mn) = 0   DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)   -   -   -   -   -   b

 

Команды ветвления при сравнении чисел без знака

BHI BHI rel Перейти по метке, если r > m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (C) & (Z) =0   REL   -   -   -   -   -   -
BHS BHS rel Перейти по метке, если r ³ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (C)=0   REL   -   -   -   -   -   -
BLO BLO rel Перейти по метке, если r < m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (C)=1   REL   -   -   -   -   -   -
BLS BLS rel Перейти по метке, если r £ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel (C) Ú (Z) =1   REL   -   -   -   -   -   -

Команды ветвления при сравнении чисел со знаком

BPL BPL rel Перейти по метке, если бит знака установлен в 0, т.е число положительное. Иначе перейти к следующей команде.     PC (PC) +$0002 + rel, если (N) =0     REL     -     -     -     -     -     -
BMI BMI rel Перейти по метке, если бит знака установлен в 1, т.е число отрицательное. Иначе перейти к следующей команде.     PC (PC) +$0002 + rel, если (N) =1     REL     -     -     -     -     -     -
 
 
BGE

BGE rel

Перейти по метке, если r ³ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (N Å V)=0   REL   -   -   -   -   -   -
BGT BGT rel Перейти по метке, если r > m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (Z) & (N Å V)=0   REL   -   -   -   -   -   -
 
 
BLE

BLE rel

Перейти по метке, если r £ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (Z)Ú (NÅV)=1   REL   -   -   -   -   -   -
BLT BLT rel Перейти по метке, если r < m. Иначе перейти к следующей команде.   PC (PC)+$0002 + rel, если (NÅV)=1   REL   -   -   -   -   -   -

 

Среди команд вызова подпрограмм и обслуживания прерываний следует выделить команду программного немаскируемого прерывания SWI. Механизм программного прерывания позволяет обратиться к какой-либо подпрограмме прерывания по ходу выполнения прикладной программы и воспользоваться подпрограммой прерывания как обычной подпрограммой. Наличие в системе команд инструкции программного прерывания SWI предоставляет такую возможность. Эта команда автоматически загружает в стек регистры CCR, ACC, X и увеличенное на 1 содержимое счетчика команд PC, а затем осуществляет переход по адресу, который указан в ячейках памяти $FFFC и $FFFD сегмента векторов прерывания. Этот адрес может быть начальным адресом подпрограммы прерывания, или же находиться внутри нее. При выходе из подпрограммы прерывания команда RTI восстановит содержимое регистров центрального процессора, и МК продолжит выполнение прикладной программы с команды, которая была следующей за командой SWI. Таким образом, программисту предоставляется возможность обращения в произвольный момент времени к фрагменту подпрограммы прерывания, который начинается с произвольно выбранной инструкции внутри подпрограммы прерывания, но заканчивается обязательно командой RTI.


Табл.1.8. Команды работы со стеком вызова подпрограмм и обслуживания прерываний

Мнемокод

Операция

Выполняемое действие

Способ адресации

Влияние на признаки

V H I N Z C
JSR JSR opr JSR opr JSR opr,X JSR opr,X JSR,X   Вызов подпрограммы. Адрес подпрограммы хранится в ячейке памяти (ОЗУ или ПЗУ). Адрес ячейки задан используемым в команде способом адресации.   PC = PC + n, где n = 1,2,3 в зависимости от способа адресации. (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 PC адрес подпрограммы   DIR EXT IX2 IX1 IX   -   -   -   -   -   -
BSR BSR rel   Вызов подпрограммы записанной по адресу, код смещения которого указан во втором байте команды.   PC = PC +$0002 (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 PC = PC + rel, где rel - код смещения   REL   -   -   -   -   -   -
SWI   Программное прерывание.  (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 (SP) X     SP = SP - 1 (SP) A     SP = SP - 1 (SP) CCR SP = SP - 1 I = 1, установка глобальной маски прерывания PCH ($FFFC) PCH ($FFFD) Счетчик команд загружается вектором программного прерывания из ячеек памяти $FFFC и $FFFD. PC = PC +$0001 (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 (SP) X SP = SP - 1 (SP) A SP = SP - 1 (SP) CCR SP = SP - 1 I = 1, установкаглобальноймаскипрерывания PCH ($FFFC) PCH ($FFFD)   INH   -   -   1   -   -   -
RTS Возврат из подпрограммы. Адрес возврата загружается из стека в счетчик команд. SP = SP + 1, PCH (SP) SP = SP + 1, PCL (SP)   INH   -   -   -   -   -   -
RTI Возврат из прерывания. Восстанавливается содержимое регистров CPU и счетчика команд. SP = SP + 1 CCR (SP) SP = SP + 1 A (SP) SP = SP + 1 X (SP) SP = SP + 1 PCH (SP) SP = SP + 1 PCL (SP)   INH   b   b   b   b   b   b
RSP Установить регистр указатель стека в состояние $FF. SP $FF. INH - - - - - -
PSHA Загрузить аккумулятор ACC в стек Push (A); SP (SP) -$0001 INH - - - - - -
PSHH Загрузить старший байт индексного регистра H в стек Push (H); SP (SP) -$0001 INH - - - - - -
PSHX Загрузить младший байт индексного регистра X в стек Push (X); SP (SP) -$0001 INH - - - - - -
PULA Восстановить аккумулятор ACC из стека SP (SP+$0001); Pull (A) INH - - - - - -
PULH Восстановить старший байт индексного регистра H из стека SP (SP+$0001); Pull (H) INH - - - - - -
PULX Восстановить младший байт индексного регистра X из стека SP (SP+$0001); Pull (X) INH - - - - - -

 





Поделиться с друзьями:


Дата добавления: 2018-10-14; Мы поможем в написании ваших работ!; просмотров: 228 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2441 - | 2257 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.