Меню

FasmWorld Программирование на ассемблере FASM для начинающих и не только

FasmWorld Программирование на ассемблере FASM для начинающих и не только

Учебный курс. Часть 16. Условные и безусловные переходы

Автор: xrnd | Рубрика: Учебный курс | 27-04-2010 | Распечатать запись

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

Безусловные переходы

Безусловный переход – это переход, который выполняется всегда. Безусловный переход осуществляется с помощью команды JMP. У этой команды один операнд, который может быть непосредственным адресом (меткой), регистром или ячейкой памяти, содержащей адрес. Существуют также “дальние” переходы – между сегментами, однако здесь мы их рассматривать не будем. Примеры безусловных переходов:

jmp metka ;Переход на метку jmp bx ;Переход по адресу в BX jmp word[bx] ;Переход по адресу, содержащемуся в памяти по адресу в BX

Условные переходы

Условный переход осуществляется, если выполняется определённое условие, заданное флагами процессора (кроме одной команды, которая проверяет CX на равенство нулю). Как вы помните, состояние флагов изменяется после выполнения арифметических, логических и некоторых других команд. Если условие не выполняется, то управление переходит к следующей команде.

Существует много команд для различных условных переходов. Также для некоторых команд есть синонимы (например, JZ и JE – это одно и то же). Для наглядности все команды условных переходов приведены в таблице:

Команда Переход, если Условие перехода
JZ/JE нуль или равно ZF=1
JNZ/JNE не нуль или не равно ZF=0
JC/JNAE/JB есть переполнение/не выше и не равно/ниже CF=1
JNC/JAE/JNB нет переполнения/выше или равно/не ниже CF=0
JP число единичных бит чётное PF=1
JNP число единичных бит нечётное PF=0
JS знак равен 1 SF=1
JNS знак равен 0 SF=0
JO есть переполнение OF=1
JNO нет переполнения OF=0
JA/JNBE выше/не ниже и не равно CF=0 и ZF=0
JNA/JBE не выше/ниже или равно CF=1 или ZF=1
JG/JNLE больше/не меньше и не равно ZF=0 и SF=OF
JGE/JNL больше или равно/не меньше SF=OF
JL/JNGE меньше/не больше и не равно SF≠OF
JLE/JNG меньше или равно/не больше ZF=1 или SF≠OF
JCXZ содержимое CX равно нулю CX=0

У всех этих команд один операнд – имя метки для перехода. Обратите внимание, что некоторые команды применяются для беззнаковых чисел, а другие – для чисел со знаком. Сравнения “выше” и “ниже” относятся к беззнаковым числам, а “больше” и “меньше” – к числам со знаком. Для беззнаковых чисел признаком переполнения будет флаг CF, а соответствующими командами перехода JC и JNC. Для чисел со знаком о переполнении можно судить по состоянию флага OF, поэтому им соответствуют команды перехода JO и JNO. Команды переходов не изменяют значения флагов.

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

use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov al,[x] ;AL = x add al,[y] ;AL = x + y jo error ;Переход, если переполнение mov ah,09h ;\ mov dx,ok_msg ; > Вывод строки ‘OK’ int 21h ;/ exit: mov ah,09h ;\ mov dx,pak ; > Вывод строки ‘Press any key. ‘ int 21h ;/ mov ah,08h ;\ int 21h ;/ Ввод символа mov ax,4C00h ;\ int 21h ;/ Завершение программы error: mov ah,09h ;\ mov dx,err_msg ; > Вывод сообщения об ошибке int 21h ;/ jmp exit ;Переход на метку exit ;———————————————————- x db -89 y db -55 err_msg db ‘Error: overflow detected.’,13,10,’$’ ok_msg db ‘OK’,13,10,’$’ pak db ‘Press any key. $’

Команды CMP и TEST

Часто для формирования условий переходов используются команды CMP и TEST. Команда CMP предназначена для сравнения чисел. Она выполняется аналогично команде SUB: из первого операнда вычитается второй, но результат не записывается на место первого операнда, изменяются только значения флагов. Например:

cmp al,5 ;Сравнение AL и 5 jl c1 ;Переход, если AL $’ hello db 13,10,’Hello!’,13,10,13,10,’$’ go_away db 13,10,’Go away!’,13,10,13,10,’$’ ;———————————————————- start: mov ah,09h ;\ mov dx,menu ; > Вывод меню int 21h ;/ select_loop: mov ah,09h ;\ mov dx,select ; > Вывод строки ‘Select>’ int 21h ;/ mov ah,01h ;Функция DOS 01h — ввод символа int 21h ;Введённый символ помещается в AL cmp al,’1′ ;Сравнение введённого символа с ‘1’ je c1 ;Переход, если равно cmp al,’2′ ;Сравнение введённого символа с ‘2’ je c2 ;Переход, если равно cmp al,’0′ ;Сравнение введённого символа с ‘0’ je exit ;Переход, если равно jmp select_loop ;Безусловный переход c1: mov ah,09h ;\ mov dx,hello ; > Вывод строки ‘Hello’ int 21h ;/ jmp start ;Безусловный переход c2: mov ah,09h ;\ mov dx,go_away ; > Вывод строки ‘Go away’ int 21h ;/ jmp start ;Безусловный переход exit: mov ax,4C00h ;\ int 21h ;/ Завершение программы

Читайте также:  Тест насколько ты хорошая любовница

Скриншот работы программы:

Упражнение

Упражнение простое. Напишите программу для сравнения двух переменных со знаком a и b. В зависимости от результатов сравнения выведите “a b” или “a = b”. Проверьте работу программы в отладчике. Результаты можете выкладывать в комментариях.

Источник

Операторы условных и безусловных переходов.

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

Для удобства, а не по необходимости, в C++ есть три разных оператора цикла — while, do while и for.

1) Цикл с предусловием имеет вид: while (выражение) оператор.

Рис.1 Структурная схема цикла с предусловием

Выражение определяет условие повторения тела цикла, представленного про­стым или составным оператором. Выполнение оператора начинается с вычисле­ния выражения. Если оно истинно (не равно false), выполняется оператор цик­ла. Если при первой проверке выражение равно false, цикл не выполнится ни разу.

Пример (программа находит все делители целого положительного числа):

2) Цикл с постусловием имеет вид: do оператор while (выражение).

Рис.2 Структурная схема цикла с постусловием

Сначала выполняется простой или составной оператор, составляющий тело цик­ла, а затем вычисляется выражение. Если оно истинно (не равно fаlse), тело цик­ла выполняется еще раз. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управле­ния.

Пример (программа осуществляет проверку ввода):

3) Цикл с параметром.

Цикл с параметром имеет следующий формат: for (инициализация: выражение: модификации) оператор. Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько опе­раторов, разделенных запятой (операцией «последовательное выполнение»).

Пример (оператор, вычисляющий сумму чисел от 1 до 100):

Областью действия переменных, объявленных в части инициализации цикла, яв­ляется цикл. Инициализация выполняется один раз в начале исполнения цикла. Выражение определяет условие выполнения цикла. Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла.

Операторы условных и безусловных переходов.

1) Условный оператор if

Данный оператор используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рис. 3. Формат оператора: if (выражение) оператор_1; [else оператор_2;].

Оператор if позволяет определить действие при истинном условии, т.е. если логическое_выражение имеет значение true, выполняется составной_оператор_1, а если логическое_выражение имеет значение false, то управление передается следующему оператору после оператора if.

Рис.3 Структурная схема оператора if

2) Условный оператор двойного выбора if…else

Оператор if…else применяется для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение двух разных составных операторов. Структурная схема оператора приведена на рис. 4. Формат оператора: if (логическое_выражение) <составной_оператор_1;>else <составной_оператор_2; >.

Рис.4 Структурная схема оператора if…else

Оператор if else позволяет определить программисту действие, когда условие истинно и альтернативное действие, когда условие ложно, т.е. если логическое_выражение имеет значение true, то выполняется составной_оператор_1, а если логическое_выражение имеет значение false, то выполняется составной_оператор_2. Так как логическое_выражение не может одновременно иметь значения true и false, то составной_оператор_1 и составной_оператор_2 не могут выполняться оба. После выполнения составной_оператор_1 или составной_оператор_2 управление передается следующему оператору после оператора if.

3) Оператор безусловного перехода

Оператор goto имеет формат: goto метка. В теле той же функции должна присутствовать ровно одна конструкция вида: метка: оператор.

Оператор goto передает управление на помеченный оператор. Метка — это обыч­ный идентификатор, областью видимости которого является функция, в теле ко­торой он задан.

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

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

Структура множественного выбора (switch) применяется для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение множества разных составных операторов. Структурная схема оператора приведена на рис. 3. Формат оператора:

Рис.3 Структурная схема оператора выбора

Оператор switch позволяет определить программисту действие из списка возможных вариантов, т.е. если значение выражения совпадает со значением константное_выражение_1, то выполняется составной оператор_1, если со значением константное_выражение_2, то выполняется составной оператор_2 и т.д. Если совпадения не произошло, выполняется составной_оператор_по_умолчанию, расположенный после слова default. Выполнение не может переходить на следующий раздел switch.

Читайте также:  Тест болею ли я депрессией

Пример (программа реализует простейший калькулятор на 4 действия):

Источник



Тест по теме «Условный оператор»
тест по информатике и икт (9 класс) на тему

Цель работы: проверить знания учащихся по теме «Условный оператор»

Скачать:

Вложение Размер
Проверка знаний учащихся по теме «Условный оператор» 28.48 КБ

Предварительный просмотр:

Тест по теме: «Условный оператор»

Цель работы: проверить знания учащихся по теме «Условный оператор»

А1. Какое значение S будет на экране в результате выполнения следующего алгоритма?

  1. 10;
  2. 24;
  3. 1.5;.
  4. 6.

А2. Сколько вариантов действий можно осуществить при наличии одного разветвления в программе?

А3. Найдите ошибки в операторах и отметьте правильный вариант ответа.

  1. if a >
  2. if a>b then c: = a-b;
  3. if a > b c: = a + b else c: = a — b;
  4. if a > b then c:= a — b else c: = a + b.

А4. Когда вы используете выражение, в котором есть слово then, то в выражении обязательно должно быть слово:

  1. else;
  2. readln;
  3. if;
  4. writeln.

А5. При каком исходном значении переменной X результатом выполнения команды Х:=Х mod 3 будет 0?

  1. при любом, кратном 3;
  2. 5;
  3. 4;
  4. 2.

В заданиях части В1 и С1 показать решения

В1. Составьте программу вычисления значения функции по формуле: y= на языке программирования.

С1. Составьте программу на языке программирования, которая определяет, делиться ли заданное целое число n на 11.

Тест по теме: «Условный оператор»

А1. Какое значение будет иметь переменная b при значении a := -20, в примере:

if а > = 15 then b:= а * 2 else b:= а — 10?

  1. 40 ;
  2. 30;
  3. 20;
  4. -30 .

А2. Сколько существует видов разветвленного алгоритма?

  1. 5;
  2. 2;
  3. 1 ;
  4. 3.

А3. Найдите ошибки в операторах и отметьте правильный вариант ответа.

  1. if a > b else c: = a — b then c: = a + b;
  2. if a > b then c: =a-b else c: =a + b;
  3. if a > b then c: = a + b eise c: = a — b ;
  4. if a > b then goto else c: = a — b .

А4. Какое значение y будет на экране в результате выполнения следующего алгоритма?

  1. -16;
  2. 6;
  3. 4;
  4. -6.

А5. Когда вы используете выражение, которое начинается со слова if, то обязательно применяете слово:

  1. begin;
  2. else;
  3. wrireln;
  4. then .

В заданиях части В1 и С1 показать решения

В1. Составьте программу вычисления значения функции по формуле : f= на языке программирования.

С1. Составьте программу на языке программирования, которая определяет, делится ли одно целое число на другое целое число, введённые с клавиатуры.

Тест по теме: «Условный оператор»

А1. Какое значение y будет на экране в результате выполнения следующего алгоритма?

  1. 10;
  2. 9 ;
  3. 11;
  4. 8.

А2. Какая из перечисленных операций не является логической?

  1. not;
  2. or ;
  3. mod ;
  4. and .

А3. Найдите ошибки в операторах и отметьте правильный вариант ответа.

  1. if a > b then c: = a – b else c: = a + b;
  2. if a>b tnen c: =a +b; d:= a* b else c: a-b ;
  3. if a > b then c:=a+b goto с: = a — b ;
  4. if a

А4. Числа в языке Pascal различаются как:

а) натуральные и вещественные;

б) натуральные и целые;

в) целые и вещественные;

г) целые и правильные дроби.

А5. При каких исходных значениях переменной X и У в результате выполнения команды X=X^Y-Y значение переменной X станет равным двум?

  1. 4, 1;
  2. 3, 2;
  3. 5, 1;
  4. 2, 2 .

В заданиях части В1 и С1 показать решения

В1. Составьте программу вычисления значения функции по формуле: t= на языке программирования.

С1. Составьте программу на языке программирования, которая увеличивает натуральное число n в три раза, если оно делится на 4.

По теме: методические разработки, презентации и конспекты

Данный тест используется для текущего контроля группы «Оператор ЭВМ» при изучении темы «Базы данныхю Microsoft Access 2010».

Тест в формате exe по программе «Оператор ЭВМ».

Интерактивные тесты по информатике и ИКТ по темам: «Компьютерные сети», «Электронные таблицы Excel», «Операторы программирования на Бейсике».

Архив содержит комплект электронных тестов по информатике и ИКТ, созданные в среде оболочки Айрен, содержание авторское. Тематика тестов: «Компьютерные сети», «Электронные таблицы Excel», «Операторы п.

Тест по теме «Операторы Паскаля» для 9 класса

Тест по теме «Операторы Паскаля».

Тест по теме:»Условный оператор»

Тест для 9 класса по программированию по теме «Условный оператор». Включает вопросы, не только по полному и неполному условному оператору, но и общие вопросы по теме «Паскаль». Тест создан с помощью с.

Тест №1 «Операторы присваивания, вводы, вывода в Паскале», 8 класс

Тест предназначен для учащихся 8 классов, для актуализации знаний по теме «Операторы присваивания, ввода, вывода в Паскале «.

Тесты по профессии оператор котельной

Источник

Pascal. Операторы условного и безусловного перехода

Оператор безусловного перехода:

Большинство программистов считают использование в программе оператора безусловного перехода, знаком дурного тона и редко используют его. Но, не смотря на это, знать его надо, так как может оказаться, что Вы не сможете придумать альтернативного решения проблемы. Имя данного оператора Goto, смысловое значение в программе «перейти к …», а его общий вид такой:

Goto m;

m – метка, заранее заданная в разделе описания меток. Следующая программа показывает как работает оператор безусловного перехода.

В этой программе нет никаких условий, но именно о них будет идти далее речь.

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

В Паскале проверить какую-то часть программы для определения дальнейшего пути, по которому ей следует идти, есть оператор If. В зависимости от выполнения логического условия он указывает, какой блок выполниться следующим. Существует две формы записи: полная и краткая. Вторая отличается от первой тем что в ней имеется ветвь Else (иначе).

Общий вид краткой формы:

Общий вид полной формы:

В краткой форме выполняется оператор 1 тогда, когда условие A истинно, иначе управление переходит к следующему оператору. В полной форме если условие A истинно, то выполняется оператор 1, иначе выполняется оператор 2. Следует запомнить, что перед else точка с запятой не ставится.

Пример программы с условным оператором, записанным в краткой форме:

Пример программы с условным оператором, записанным в полной форме:

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

Оператор выбора:

Когда количество альтернатив больше двух применяется оператор выбора Case. Его вид:

Если селектором оператора If было логическое выражение, то в Case им выступает переменная, которая может быть целого, перечислимого, интервального или символьного типа. В случае совпадения селектора со значения выполняется соответствующий оператор. Задать значение селектору можно тремя способами:

1) перечислением: 1, 10, 100, 1000

2) диапазоном: ‘d’..’k’

3) перечислением и диапазоном: 1..10, 20, 30, 50, 70..100

Выполнятся в операторе выбора, может только одна ветка (идущая раньше), даже когда селектор совпадает с несколькими значениями. Также, в отличие от If в Case можно ставить точку с запятой перед Else.

Рассмотрим программу, в которой условия проверяет оператор выбора.

Программа проверяет селектор на соответствие его с имеющимися значениями. Если совпадений не находится, то выполняется блок Else.

Источник

Тест по теме «Условный оператор»

Тест «Оператор ветвления»

1. Условный оператор применяется для программирования:

a) Сложных алгоритмов

b) Линейных алгоритмов

c) Ветвящихся алгоритмов

d) Циклических алгоритмов

2. Ветвящийся алгоритм подразумевает:

a) Выполнение лишь нескольких, удовлетворяющих заданному условию частей программы

b) Неоднократное повторение отдельных частей программы

c) Последовательное выполнение всех элементов программы

d) Верного ответа нет

3. Верно ли записан условный оператор

If then else end if

a) Верно b) неверно

4. Составьте правильную последовательность написания оператора ветвления: (укажите порядок следования всех 6 вариантов ответа)

a) Оператор 2 b) else c) if d) end if

e) then f) Оператор 1 g) Условие

5. Возможно ли неполное написание условного оператора:

а) Возможно b) Невозможно

6. Где условный оператор написан без ошибок

a) If d >100 and d

c) If c>100 and c

d) If c>100 and c +5>

7. В каком из условных операторов допущена синтаксическая ошибка:

a) If d=0 then Print “Два одинаковых корня” end if

b) If a>b then max = a else: max=b end if

c) If a<>b then c=(a+b)/2 end if

8. Результатом выполнения фрагмента алгоритма

будет следующее значение k:

9. Определите, является ли число N кратным 5. Какое условие можно использовать в этой задаче?

а) N mod 5=0; b) N/5=0; c) N \ 5 =0; d) N=”:5”

10. Входит ли число А в диапазон значений [-7;18)? Какое составное условие нужно поставить в этой задаче?

а) (A =18); b) (A>-7) and (A c) (A>-7) or (A -7) and not (A 11. Соотнесите значение переменной М (левый столбец) с результатом выполнения (правый столбец):

12. Составьте блок схему к следующей задаче:

Дано двузначное число. Определить, какая из его цифр больше: первая или вторая.

13. Напишите программный код к следующей задаче.

Год является високосным, если его номер кратен 4, однако из кратных 100 високосными являются лишь кратные 400 (например, 1700, 1800 и 1900 – не високосные года, 2000 – високосный). Дано натуральное число n. Определить является ли високосным год с таким номером.

Тест по теме «Условный оператор»

(язык программированиия Visual Basic 6.0),

10 класс

На выполнение работы отводится 45 минут.

Ответы к заданиям 1, 2, 3, 5, 6, 7, 8, 9, 10 записываются в виде одной буквы, которая соответствует правильному ответу.

Ответ к заданию 4 записывается в виде последовательности букв.

Решения заданий 12 и 13 записываются на отдельном листе.

Источник