Условное выполнение операторов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Условное выполнение операторов



Вторая конструкция управления называется «условным выполнением операторов». Достаточно часто одно или другое действие должно исполняться в зависимости от определенного условия, которое зависит от результатов выполнения предыдущей части программы или от состояния (сигналов) внешних устройств. Блок-схема конструкции управления «условное выполнение операторов» приведена на рис. 21.5.

Рис. 21.5. Блок-схема конструкции управления “условное выполнение операторов”

Как видно из приведенной в листинге 21.9 программы на языке С-51, конструкция условного выполнения операторов реализуется благодаря встроенным средствам самого языка С-51, так как он относится к структурированным языкам программирования. В приведенном примере подпрограммы-заглушки использованы для отображения названий частей условного оператора.

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

Листинг 21.9. Реализация конструкции управления «условное выполнение операторов» средствами языка С-51

/********************************************

Определения подпрограмм

********************************************/

void Deistvie1(void)

{//Пока это только подпрограмма-заглушка!

}

 

void Deistvie2(void)

{//Пока это только подпрограмма-заглушка!

}

 

/*******************************************

Главная программа

********************************************/

...

if(PrinjatByte)//Выражение

Deistvie1();//Реализация ветви 1

else

Deistvie2();//Реализация ветви 2

...

Пример реализации конструкции управления «условное выполнение операторов» на языке программирования ASM-51 приведен в листинге 21.10. Язык программирования ASM-51 не является структурированным, поэтому для реализации конструкции условного выполнения операторов приходится использовать несколько команд микропроцессора (операторов языка программирования ассемблер).

Для реализации блока «логическое выражение», изображенного на рис. 21.5. в виде ромба, можно использовать любую команду условного перехода, входящую в систему команд микропроцессора. При этом в простейшем случае логическое выражение сводится к анализу сигналов на выводах микроконтроллера или его внутренних флагов. Но в отличие от двумерной блок-схемы, память программ микропроцессора одномерна, то есть все команды располагаются друг за другом. Для того чтобы выполнялся только один из операторов (Действие 1 или Действие 2), необходимо после выполнения одного из них обойти другой. Это можно осуществить при помощи команды безусловного перехода.

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

Листинг 21.10. Реализация конструкции управления «условное выполнение операторов» средствами языка ASM-51

;***********************************************************

;Главная программа

;***********************************************************

...

;----------Условное выполнение операторов-------------------

jb PrinjatByte,ElseUsl;Условное выражение

Call Deistvie1;Реализация

jmp EndUsl;первой ветви

ElseUsl:

Call Deistvie2;Реализация ветви 2

EndUsl:;---------------------------------------

...

 

;*************************************************************

;Определения подпрограмм

;**************************************************************

;--Пока это только подпрограмма-заглушка!----------------------

Deistvie1:;Метка относится к следующему оператору

ret

 

;--Пока это только подпрограмма-заглушка!----------------------

Deistvie2:;Метка относится к следующему оператору

ret

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

Рис. 21.6. Размещение различных частей конструкции управления условным выполнением операторов в памяти программ микропроцессора.

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

Блок-схема и примеры реализации конструкции управления условным выполнением одного оператора на языках программирования С-51 и ASM-51 приведены на рис. 21.7 и листингах 21.11 и 21.12. Каждый из исходных текстов содержит очень подробные комментарии, поэтому дополнительные пояснения не понадобятся.

Рис. 21.7. Блок-схема конструкции управления условным выполнением одного оператора

Листинг 21.11. Реализация конструкции управления условным выполнением одного оператора средствами языка С-51

/********************************************

Определения подпрограмм

********************************************/

void Deistvie1(void)

{//Пока это только подпрограмма-заглушка!

}

 

/*******************************************

Главная программа

********************************************/

...

if(PrinjatByte)//Условное выражение

Deistvie1(); //Реализация ветви

...

Листинг 21.12. Реализация конструкции управления условным выполнением одного оператора средствами языка ASM-51

;**************************************************************

;Главная программа

;**************************************************************

...

;--конструкция управления условным выполнением одного оператора----

jb PrinjatByte, EndUsl;Условное выражение

call Operator1; Реализация ветви

EndUsl:;-----------------------------------------------------------

...

;*******************************************************************

; Определения подпрограмм

;*******************************************************************

;-- Пока это только подпрограмма-заглушка!--------------------------

Operator1:; Метка относится к следующему исполняемому оператору

ret



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 231; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.170.17 (0.009 с.)