Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Команды перехода к подпрограмме

Тема 15. Команды микропроцессора.

Теперь остановимся подробнее на выполняемых командах. Весь набор команд любого микропроцессора можно разделить на несколько групп.

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

Следует заметить, что так называемые команды перемещения, по сути, не перемещают данные из ячейки в ячейку, а копируют эти данные. Операция перемещения в цифровой технике бессмысленна. В общепри­нятом понимании переместить означает убрать из одного места и поме­стить в другое. Но убрать данные из ячейки памяти невозможно!

Любой бит любой ячейки памяти всегда равен либо нулю, либо единице. То есть всегда содержит какое-либо число. Поэтому команды перемещения считывают байт данных из ячейки-источника и записывают их в ячейку-приемник. При этом в ячейке-источнике данные не изменяются.

Ко второй группе относятся команды преобразования данных. Именно в эту группу входят команды сложения, вычитания, логических преобразований, сдвига разрядов и т. д.

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

Пример.

Допустим, что наше микропроцессорное устройство имеет кнопки управления. При нажатии каждой кнопки должно выполняться свое определенное действие. Например, при нажатии одной кнопки исполнительный механизм должен повернуться влево. При нажа­тии другойповернуться вправо и т. п. Для того, чтобы это было возможно, программа периодически считывает состояние кнопок. Затем программа должна оценить их состояние. Если нажата первая кнопка, выполняется некая последовательность команд, выдающая на соответствующий порт код, приводящий к включению двигателя в прямом направлении. Если нажата вторая кнопка, то выполняется другая последовательность команд, выдающая в тот же порт совсем другой код. Этот код должен вызвать включение двигателя в реверсном направлении.

Очевидно, что для реализации данного алгоритма придется прервать последовательное выполнение команд. Для того, чтобы программа имела возможность менять алгоритм своей работы в зависимости от какого-либо условия, в системе команд любого процессора обязательно имеются команды передачи управления. К командам передачи управления отно­сятся следующие виды команд: команды условного перехода; команды безусловного перехода; команды перехода к подпрограмме; команды организации цикла. Рассмотрим все эти виды команд по порядку.

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

Оба этих вида команд предназначены для того, чтобы прерывать после­довательное выполнение программы и вызывать так называемый переход. Причем условный переход происходит только при соблюдении какого-либо условия. Безусловный переход выполняется всегда, как только программа встретит соответствующую команду. В качестве условий перехода может выступать одно из следующих логических выражений:

♦ величина А равна величине В;

♦ величина А не равна величине В;

♦ величина А меньше величины В;

♦ величина А больше величины В;

♦ величина А меньше или равна величине В;

♦ величина А больше или равна величине В.

В качестве величин для сравнения может выступать содержимое любых внутренних регистров процессора, содержимое любых ячеек памяти или просто константы.

Пример.

Рассмотрим пример применения условного и безусловного переходов. Для наглядности изобразим цепочку команд в программной памяти в виде последовательности графических элементов (см. рис. 2.2). Ход выполнения программы показан при помощи стрелок. Квадратиками обозначены обычные команды (команды перемещения и команды пре­образования данных). Кружочек с вопросомэто команда условного перехода. Скругленный элементе восклицательным знакомэто безусловный переход. Такая программа имеет две ветви. В случае, если условие есть ложь, выполняется ветвь номер 1. В случае, если условиеистина, выполняется ветвь номер 2.

Допустим, что условный переход производит сравнение кода нажатой клавиши с некоторой константой. Тогда действие, выполняемое услов­ным оператором, можно записать так: «Если код нажатой клавиши равен 0, перейти к выполнению ветви номер 2». Соответственно, в случае невы­полнения условия (например, считанное число равно 1), программа про­должит свою работу в обычном режиме и перейдет, таким образом, к выполнению ветви номер 1.

В конце ветви номер 1 стоит оператор безусловного перехода. Он слу­жит для того, чтобы программа не начала выполнять ветвь номер 2 сразу после выполнения ветви номер 1. В данном случае выполнение перехода обязательно и никакого условия не требуется.

Технически переход выполняется путем записи в регистр адреса нового значения. Изменение значения регистра адреса возможно только при помощи команд передачи управления.

Команда организации цикла

Циклическое выполнение группы команд — очень эффективное сред­ство для сокращения программного кода. Иногда требуется выполнить одну и ту же группу команд несколько раз. Вместо того, чтобы много раз записывать одни и те же команды, можно заставить любой участок про­граммы выполняться многократно. Для этого и служат команды органи­зации цикла.

Допустим, мы хотим создать простейшую программу, предотвращаю­щую ложное срабатывание кнопки. Допустим, нажатая кнопка при счи­тывании дает единицу, отпущенная — ноль. Для повышения надежно­сти мы будем считывать состояние кнопки не один, а несколько раз. Все полученные таким образом числа мы сложим между собой.

Затем мы легко можем определить, каких результатов было больше: нулевых либо единичных. Допустим, что мы будем производить подряд 20 операций чтения-сложения. Теперь, если полученная сумма окажется больше десяти, то кнопку можно считать нажатой. В противном случае она считается отпущенной. Такой алгоритм называется цифровой инте­грирующий фильтр.

Операции считывания состояния кнопки и сложения полученных результатов удобно оформить в виде цикла. На рис. 2.3 показан ход выполнения подобной программы. Как и на предыдущем рисунке, ква­дратиками обозначены обычные операторы. Кружком с буквой Ц обо­значен оператор цикла. Часть программы, называемая телом цикла, выполняется нужное количество раз. Каждое такое выполнение называ­ется проходом цикла.

Важным элементом оператора цикла служит так называемый параметр цикла. Параметр цикла — это число, которое сначала равно количеству про­ходов. При каждом новом проходе параметр цикла уменьшается. Обычно параметр цикла записывается в один из рабочих регистров процессора. В нашем случае параметр цикла равен 20. На рисунке показаны несколько команд, которые выполняются до начала цикла. Среди этих команд обяза­тельно должна быть команда, записывающая в соответствующий регистр значение параметра цикла. Затем выполняется тело цикла. В нашем случае тело цикла — это команды считывания состояния клавиши и сложения полученных результатов. После выполнения тела цикла наступает очередь оператора цикла.

 

 

Этот оператор выполняет следующие действия:

♦ уменьшает параметр цикла на единицу;

♦ проверяет, не равен ли параметр после уменьшения нулю;

♦ если не равен, то оператор осуществляет переход к началу цикла;

♦ если же параметр равен нулю, переход не производится и выполне­ние программы продолжается в обычном режиме.

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

Команды перехода к подпрограмме

Это полезно запомнить.

Подпрограммаэто некоторый участок программы, к выполне­нию которого программа может возвращаться несколько раз. Такой прием применяется в том случае, если одни и те же действия нужно выполнять в разных местах программы. Для этого любую последова­тельность команд можно оформить в виде подпрограммы. В нужном месте основная программа вызывает подпрограмму. После выполне­ния подпрограммы управление передается в то место, откуда про­изошел ее вызов. Одна и та же подпрограмма может быть вызвана любое количество раз из самых разных мест основной программы.

Для организации подпрограмм любой процессор содержит как мини­мум две специальные команды:

♦ команду перехода к подпрограмме;

♦ команду выхода из подпрограммы.

Существуют также команды перехода к подпрограмме по условию. Процесс обращения к подпрограмме показан на рис. 2.4. Слева от многоточия показана цепочка команд, составляющих основную программу. Точками обозначена та часть основной программы, которая нас сейчас не интересует. Где-то после окончания основной программы в памяти рас­положен текст подпрограммы.

Как и в предыдущих случаях, квадратиками обозначены обычные команды. Элемент с буквой «П» — это команда перехода к подпрограмме. Буквой «В» обозначена команда возврата из подпрограммы. По команде перехода к подпрограмме микропроцессор запоминает текущий адрес (значение счетчика программ). Затем управление передается на начало подпрограммы.

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

Использование подпрограмм позволяет увеличить структурированность вашей программы. При чтении текста незнакомой программы каждая подпрограмма воспринимается как отдельная законченная про­цедура. Каждая такая процедура представляет собой законченный про­граммный блок со своими свойствами и назначением. Из этих блоков, как из кирпичиков, удобно строить основную программу.

Написанная таким образом программа становится удобнее для пони­мания. Поэтому иногда подпрограммы используют даже в том случае, когда в основной программе они используются только один раз.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...