Тема 4.6 Программирование ветвлений
Определение. Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма. Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий - простые и составные. Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков: < - меньше, чем... > - больше, чем... < = - меньше, чем... или равно > = - больше, чем... или равно < > - не равно = - равно
В общем случае полная форма конструкции условного оператора имеет вид: if < логическое выражение> then < оператор 1> else < оператор 2>
Условный оператор работает по следующему алгоритму. Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется < оператор 1>, расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется < оператор 2>. Рассмотрим пример. Задача. Вывести на экран большее из двух данных чисел. Var x, y: integer; {вводимые числа} Begin writeln('Введите 2 числа '); {вводим два целых числа через пробел} readln(x, y); if x> y then writeln (x) {если х больше y, то выводим х} else writeln (y) {иначе выводим y} End. Можно также использовать и сокращенную (неполную) форму записи условного оператора. Эта форма используется тогда, когда в случае невыполнения условия ничего делать не надо.
Неполная форма условного оператора имеет следующий вид. if < логическое выражение> then < оператор> Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются. Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай. Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin... End называется составным оператором. if < логическое выражение> then begin оператор 1; оператор 2; ... end else begin оператор 1; оператор 2; ... end; Определение. Составной оператор - объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end). begin оператор 1; оператор 2; end; Перед служебным словом Else разделитель (точка с запятой) не ставится.
38. Команды условного и безусловного перехода.
Команда безусловного перехода имеет следующий синтаксис: JMP < операнд> Операнд указывает адрес перехода. Существует два способа указания этого адреса, соответственно различают прямой и косвенный переходы. Прямой переход Если в команде перехода указывается метка команды, на которую надо перейти, то переход называется прямым. jmp L ... ... L: mov eax, x Косвенный переход При косвенном переходе в команде перехода указывается не адрес перехода, а регистр или ячейка памяти, где этот адрес находится. Содержимое указанного регистра или ячейки памяти рассматривается как абсолютный адрес перехода. Косвенные переходы используются в тех случаях, когда адрес перехода становится известен только во время работы программы.
jmp ebx Команды условного перехода В системе команд процессора архитектуры x86 не предусмотрена поддержка условных логических структур, характерных для языков высокого уровня. Однако на языке ассемблера с помощью набора команд сравнения и условного перехода вы можете реализовать логическую структуру любой сложности. В языке высокого уровня любой условный оператор выполняется в два этапа. Сначала вычисляется значение условного выражения, а затем, в зависимости от его результата, выполняются те или иные действия. Проводя аналогию с языком ассемблера, можно сказать, что сначала выполняются такие команды, как CMP, AND или SUB, влияющие на флаги состояния процессора. Затем выполняется команда условного перехода, которая анализирует значение нужных флагов, и в случае если они установлены, выполняют переход по указанному адресу. Что касается команд условного перехода, то их достаточно много, но все они записываются единообразно: Jxx < метка> Все команды условного перехода можно разделить на три группы. В первую группу входят команды, которые обычно ставятся после команды сравнения. В их мнемокодах указывается тот результат сравнения, при котором надо делать переход.
Во вторую группу команд условного перехода входят те, которые обычно ставятся после команд, отличных от команды сравнения, и которые реагируют на то или иное значение какого-либо флага.
И, наконец, в третью группу входят две команды условного перехода, проверяющие не флаги, а значение регистра ECX или CX: JCXZ < метка> ; Переход, если значение регистра CX равно 0 JECXZ < метка> ; Переход, если значение регистра ECX равно 0 Однако эта команда выполняется достаточно долго. Выгоднее провести сравнение с нулём и использовать обычную команду условного перехода.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|