Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Битовые команды.

Каждый бит из битового пространства внутренней памяти может быть установлен в 1, сброшен в 0, или инвертирован:

  • установить бит (записать логическую единицу) SETB;
  • сбросить бит (записать логический ноль) CLR;
  • проинвертировать значение бита (изменить на прямо противоположное) CPL;
  • бит может быть записан во флаг переноса или считан из флага переноса MOV.

Могут быть реализованы переходы:

  • если бит установлен (содержит логическую 1) JB;
  • если бит не установлен (содержит логический 0) JNB;
  • переход, если бит установлен со сбросом этого бита после выполнения команды (запись в этот бит 0) JBC;

Между любым битом из битового пространства внутренней памяти и флагом переноса могут быть произведены логические операции "И" или "ИЛИ".

  • И (ANL),
  • ИЛИ (ORL),

Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-51 доступны следующие команды:

  • безусловный переход: LJMP, AJMP, SJMP
  • Вызов и возврат из подпрограммы: LCALL, ACALL, RET, RETI
  • проверка содержимого аккумулятора: JZ, JNZ, CJNE, JMP
  • проверка флага переноса С: JC, JNC
  • проверка содержимого любого бита в битовом пространстве: JB, JNB, JBC

Команды 16-разрядных безусловных переходов и вызовов подпрограмм позволяют осуществить переход в любую точку адресного пространства памяти программ объемом до 64 Кбайт. Примеры команд:

LJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’

LCALL Podprogramma;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

Команды 11-разрядных переходов и вызовов подпрограмм позволяют сократить объем программы, но при этом обеспечивают переходы только внутри программного модуля 2 Кбайт. Эти команды принципиально могут приводить к необнаруживаемым транслятором ошибкам, когда программный модуль размещается на двух соседних 2 Кбайтовых сегментах памяти.

AJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’

ACALL Podprogramma;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

В системе команд имеются команды условных и безусловных переходов относительно начального адреса следующей команды в пределах от (РС)-127 до (РС)+127. Примеры команд:

SJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’

JB P3.5, TstNxtUsl;Если на 6 выводе порта P3 нулевой потенциал,

ACALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

CJNE A, #5, TstNxtUsl;Если в аккумуляторе содержится число 5,

ACALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

Команды проверки содержимого аккумулятора и флага переноса C могут быть использованы для реализации проверки различных условий. При этом содержимое не изменяется, то есть если требуется произвести несколько проверок одной и той же переменной, то повторно заносить значение этой переменной в аккумулятор не нужно. Например:

MOV A, 34;Если в переменной, хранящейся в ячейке внутренней памяти 34

JNB ACC_7, TstEQ5;число меньше нуля,

CALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

TstEQ5;------------------------------------------------------------------------------------------------------

CJNE A,#5,TstLT5;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число 5,

CALL Podpr5;то вызвать подпрограмму, обозначенную меткой ‘Podpr5’

TstLT5;------------------------------------------------------------------------------------------------------

JNС TstGE5;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, меньшее 5,

CALL PodprLT5;то вызвать подпрограмму, обозначенную меткой ‘PodprLT5’

TstGE5;---------------------------------------------------------------------------------

JC TstNxtUsl;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, большее или равное 5,

CALL PodprGE5;то вызвать подпрограмму, обозначенную меткой ‘PodprGE5’

TstGT5;------------------------------------------------------------------------------------------------------

CJNE A,#6,$+3;Если в переменной, хранящейся в ячейке внутренней памяти 34

JC TstNxtUsl;занесено число, большее 5,

CALL PodprGT5;то вызвать подпрограмму, обозначенную меткой ‘PodprGT5’

;---------------------------------------------------------------------------------

JNC TstNxtUsl;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, меньшее или равное 5,

CALL PodprLE5;то вызвать подпрограмму, обозначенную меткой ‘PodprLE5’

Как видно из приведённых примеров, команды переходов этого микроконтроллера позволяет реализовать намного более эффективные по количеству команд программы по сравнению с другими процессорами, такими как, например MCS-48.

Косвенный переход JMP @A+DPTR в системе команд микроконтроллеров семейства MCS-51 обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентную оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла). Использование в этой команде указателя данных DPTR позволяет размещать таблицу переходов в любом месте памяти программ. Пример реализации команды выбора варианта:

BeginOpCase:;Начало команды выбора вариантов------------------------------------------------------

MOV DPTR, #JMP_TBL;Задать начальный адрес таблицы переходов

MOV A, 33;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу

 

CLR C;Осуществить арифметический сдвиг аккумулятора вправо

RLC A;(умножить на 2) т.к. команды переходов занимают два байта

 

JMP @A+DPTR;Перейти к выполнению заданного в 33 ячейке кода

 

JMP_TBL:;начало таблицы переходов по содержимому переменной в ячейке памяти 33-----------------

JMP Case0;Перейти к выполнению кода по числу 0

JMP Case1;Перейти к выполнению кода по числу 1

JMP EndCase;Это число в ячейке 33 в список разрешённых не входит

JMP EndCase;Это число в ячейке 33 в список разрешённых не входит

JMP Case4;Перейти к выполнению кода по числу 4

EndCase:;------------------------------------------------------------------------------------------

<== предыдущая лекция | следующая лекция ==>
Команды пересылки данных | Способы адресации операндов
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 466; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.