Й.Янсен Курс цифровой электроники. Том 4. Микрокомпьютеры (1987) (1092084), страница 54
Текст из файла (страница 54)
Остальные биты будут равны 0 независимо от значений других битов в верхнем байте. Можно присвоить переменной и восьмеричное значение, используя цифровой ряд с предшествующим знаком Ь, например Х=8г237. 6.4. Команды перехода и ветвления По аналогии с машинным языком в языке Бейсик имеются также команды перехода и ветвления. Команда 3МР совпадает с оператором бОТО Н, где Н указывает номер строки, в которую происходит данный переход.
ззо Глава б Этот оператор можно .проиллюстрировать с помощью следующего примера: МЕ% !О 1.ЕТ А=О 20 т'=Ар2 30 РК11ч1Т у 40 1.ЕТ А=А+1 50 бОТО 20 К1ЛЯ Здесь оператор ЕЕТ присваивает начальное значение А=О. Затем вычисляется квадрат А и печатается результат с помощью Ррч11ч1Т.
Далее А получает приращение, равное 1, затем происходит обратный переход от строки 50 к строке 20 и вычисление повторяется. Таким образом, при каждом прохождении через цикл А увеличивается на 1 и в результате получается таблица квадратов. Оператор бОТО 20 осуществляет возврат в начало подпрограммы. Часто бОТО встречается в форме 01ч1 Х ПОТО 100, 150, 300, 480; при этом Х указывает, по какому адресу происходит безусловная передача управления после ООТО. Если Х=2, то происходит переход в строку 150, если Х=4, то в строку 480.
На Х накладывается следующее ограничение: Х не должна быть отрицательным числом и превышать 255. При Х=О оператор ООТО не выполняется и программа продолжается со следующей строки. Если Х не является целым числом, то дробная часть, находящаяся после десятичной точки, отбрасывается. Условный переход имеет форму 1Р...ТНЕУ.... После ТНЕ1ч1 указывается номер строки, в которую происходит переход, если выражение, находящееся после 1Р, оказывается истинным. В выражениях, располагающихся после 1Р, можно использовать следующие символы: Символ Значение Пример равно А = В <> ие равно А( ) В > больше, чем А ) В < меньше, чем А ( В )= больше или равно А) = В <= меньше илн равно А(=В Если выражение, находящееся после 1Р, оказывается ложпым, то программа продолжается со следующей строки.
В приведенном выше примере вычисления таблицы квадратов отсутствует останов. Такой останов можно «встроить», Явыки программирования высокого уровня — Бейсик 331 превратив безусловный переход СОТО в условный переход (см. строку 50) типа 1Р А<!00 СОТО 20. Переходы будут происходить до тех пор, пока А не станет равным 100. Если заковчить цикл при А=99, то программа перейдет в строку 60, и если поместить здесь оператор ЕН)У, то выполнение программы закончится.
Оператор 1Р...ТНЕ!4... можно использовать в комбинации с оператором СОЯ)В, а также с оператором, например, РК1НТ. Используя этот оператор, можно выполнять (или не выполнять) соответствующую операцию вычисления, например 1Р...ТНЕг! Б=У)2. Этот оператор может быть связан не только с цифрами, но и с текстом, например 1Р Ав=«ЗА» ТНЕУ СОТО....
Вполне допустимы ситуации, в которых некоторое условие встречается в одной строке несколько раз. Так, например, 1Р Х<1 ОК Х)10 ТНЕУ РК!МТ ЕККОК показывает, что если Х меньше 1 или больше 10, то программа выведет на экран дисплея или отпечатает на принтере ЕККОК (ОШИБКА). В некоторых программах часто бывает необходимо обращаться к какой-либо подпрограмме многократно. Такую подпрограмму можно назвать циклической. Чтобы вызвать подпрограмму требуемое число раз, необходимо использовать счетчик, который при каждом вызове получает приращение на 1 до тех пор, пока не станет равным некоторой константе. Для выполнения этой операции в Бейсике используется оператор РОК...НЕХТ (РОК определяет начало цикла, НЕХТ вЂ” конец). После ГОК можно указать, например, Х=1 ТО М; при этом 5! будет задавать число повторений цикла.
В начале соответствующей программы помещается оператор Х=1 ТО М, а в конце — оператор БРЕХТ Х. После считывания оператора МЕХТ Х величина Х увеличивается на 1 и сравнивается с М. Если она равна Н, то программа продолжается, т. е. переходит к строке, следующей после МЕХТ Х; если не равна, то происходит обратный переход в строку с РОК и соответствующий цикл продолжается. Этот оператор показывает, что здесь отсутствует необходимость в подготовительной работе для программирования цикла в противоположность машинному языку, где для реализации указанных выше операций требуется использовать большое число команд.
Применение оператора РОК...МЕХТ иллюстрирует следующий пример: 5)ЕЮ 10 1.ЕТ !1=100 20 РОК Х=! ТО г! 30 1 ЕТ У=Х~2 40 РК15!Т У Глава 6 50 ИЕХТ Х 60 ЕИР К1)И еоа х гонт мехт т ИЕХТХ Здесь снова рассматривается программа вычисления таблицы квадратов. Программа начинается с оператора присваигоах вання 5)=100. В строке 20 переменной Х Ф присваивается значение 1, после чего в гонт строке 30 вычисляется квадрат Х.
В строке 50 переменная Х увеличивается на 1 и вы- С ясняется, не равна ли она 1ч = 100. Если не вехтер равна, то происходит обратный переход в строку 20 и цикл повторяется. Этот процесс повторяется до тех пор, пока переменная Х не станет равной 100, после чего в™ программа переходит к выполнению опенехт т ратора Е)чР. В случае оператора РОК...ИЕХТ с пе- С-- ременной Х=1 ТО К подразумевается, что Х постоянно увеличивается на 1.
Такой режим называется режимом «по умолчанию», нехтх т. е, без указания величины приращения. Однако если требуется другое приращение, в в «» «и а ы х ц а х т о е о м о ж н о з а д а т ь с п о м о Ш ы о о п е р а т о р а вов. эти конфагурв- 1 ТО М ЗТЕР У, где У определяет величицаи допустимы, так ну приращения. Если У=2, то Х будет кажкак ливии не пересе- дый раз увеличиваться на 2 вместо 1, как в приведенном примере. При использовании операторов ЕОК...
...ИЕХТ в циклах следует обращать внимание на связь между разными циклами. Циклы могут выполняться в программе, входя в состав других циклов, а также могут содержать внутри себя меньшие циклы. Наконец, циклы могут быть «вложепными» друг в друга. В этой ситуации один цикл является частью другого цикла, а последний в свою очередь является частью цикла в основной программе (рис.
6.3). Описанные циклы выполняются правильно, так как соответствующие линии переходов в них не пересекаются. На рис. 6.4 приведен пример связи между циклами, которая недопустима, так как линии переходов здесь взаимно пересекаются. В следуюшем примере приведена программа, в которой один цикл является частью другого. 1)Е% 10 1.ЕТ Х=О 20 ЕОК Х=О ТО 100 ЬТЕР 10 Языки ирогриимировиния высокого уровня — Бейсик 333 еой х гонт мект х мект т Рис.
6.4. Конфигурация вложенных циклов, которая недопустима. Линии пересекаются. н получится совершенно другой результат. При замене строки 70 на строку 80 печатаются числа О, 10,..., 100, после чего появляется сообщение «1ч'ЕХТ ту)1)топ1 РОК !и 80». Структурная схема этой программы приведена на рис. 6.5.
Другим оператором с подобным функциональным назначением является РО...Ы1чТ1Ь. После 110 следует выполняемая процедура, в которой переменная Х увеличивается при каждом выполнении цикла на )К). В конце цикла помещается оператор 1))т)Т!Ь и проверяется не превзошла ли переменная Х определенную величину (константу). До тех пор пока выражение, находящееся после Ы1К)Т1Ь, будет ложным, происходит обратный переход в строку с 110. Если же это выражение становится истинным, будет осуществлен переход в строку, находящуюся после строки с Ы)К)Т1Ь. Пример: МЕЖ 100 1.ЕТ Х=О 110 130 120 Х= (Х+1) «2 130 РК!ХТ Х 140 1)МТ1Ь Х) =20 150 ЕИ11 КЫХ 30 1 ЕТ У=О 40 РОК У=О ТО 5 50 ЬЕТ Х=Х+ т' 50 РК1)к)Т Х 70 )к)ЕХТ У 80 )к)ЕХТ Х 90 Ерчхт КЫ)к) В этой программе используются совместно переменные Х и т', причем Х может принимать значения О, 10, 20...100, а т' принимает значения 0 — 5 во внутреннем цикле.
В результате будет напечатан набор цифр от 0 до 5, от 10 до 15, от 20 до 25 и т. д. вплоть до 100 — 105. ИЕХТ т' и )к)ЕХТ Х в строках 70 и 80 нельзя поменять местами, иначе произойдет пересечение Глава б В строке 100 Х присваивается значение 0 н выполняется процедура в пределах, заданных 110.. Л)ХТ11. Эта процедура начинается со строки 120, где вычисляется переменная Х, которая затем печатается с помощью РК1ХТ (строка 130). В строке 140 проверяется, не превзошла ли переменная Х константу 20.
При отрицательном ответе (Нет) происходит обратный переход, а при положительном ответе (Да) программа переходит к следующей строке 150 с оператором ЕХО, который ее останавливает. Печатаются числа 2, 6 и 14, после чего выполнение программы заканчивается. Рис. 6.5.
Структурная схема участка программы, где дважды встречается оператор Юд,. ЫЕХТ. Здесь циклы являются вложенными. Переходы к подпрограммам, осуществляемые на машинном языке с помощью команд СА(.1. и КЕТ, реализуются в языке Бейсик с помощью операторов ООБ()В...КЕТь)рта. Оператор ООЯ)В...используется как в основной программе, так и в подпрограмме. Например, можно перейти из основной программы в какую-либо подпрограмму, а затем из этой подпрограммы в другую и т.
д., что позволяет выполнить автономно ряд отдельных специальных операций в процедурах, к которым имеют доступ и другие части программы. Для возвращения в исходную процедуру или основную программу в операторе КЕТ()ЙМ не надо указывать адрес возврата. При выполнении оператора ООЯ)В необходимая адресная информация, в частности следующий адрес из исходной программы (адрес возврата), запоминается в стеке. После считывания оператора Явыки арограммирования высокого уровня — Бейсик КЕТ()КМ возврат происходит именно в этот адрес.