Й.Янсен Курс цифровой электроники. Том 4. Микрокомпьютеры (1987) (1092084), страница 57
Текст из файла (страница 57)
Затем нажимается 1-клавиша и вводится требуемый текст. Замена одного текста другим заканчивается после нажатия клавиши КЕТс)КХ. Таким образом, указанные операции выполняются следующим образом: Замена символов а) вводится команда ЕР1Т п, после чего нажимается клавиша КЕТ1)КИ; б) курсор подводится под заменяемый символ; в) нажимается С-клавиша (при этом положение курсора не изменяется); г) вводится требуемый символ; д) нажимается клавиша КЕТ1)КХ. Ввод текста а) вводится команда ЕР1Т п, после чего нажимается клавиша К ЕТ1) КЫ; б) под соответствующий символ подводится курсор; в) нажимается 1-клавиша (позиция курсора при этом не изменяется); г) вводится требуемый текст; д) нажимается клавиша КЕТ1)КХ. После ввода ЕР1Т п можно, если потребуется, нажать ).-клавишу, что позволит увидеть всю строку и положение курсора.
При удалении символов строка также выбирается с помощью команды ЕР1Т п, а курсор подводится под позицию, занимаемую последним символом. Затем с помощью клавиатуры вводится число удаляемых символов, после чего нажимается Р-клавиша, Удаление ненужных символов из выбранной стро- Глава а з46 ки заканчивается после нажатия клавиши КЕТ1)Я51. Если вместо Р-клавиши нажать Н-клавишу, то исчезнут все символы, расположенные справа от курсора, Для выключения действия команды ЕР1Т во время ввода данных с клавиатуры достаточно нажать Я-клавишу.
В результате интерпретатор вернется в режим исполнения команд. Нажатие А-клавиши возвращает курсор в режим ЕР!Т, например, в начало строки, т. е. в позицию, расположенную непосредственно после номера строки. Описанные здесь возможности ЕР1Т реализуются, например, в рамках «расширенного Бейсика» М!сгозоВ. 6.8. Функции, определяемые пользователем При программировании часто оказывается, что определенные операции применяются многократно в самых различных частях программы.
Можно ввести такую операцию как определенную процедуру или же превратить ее в отдельную подпрограмму, которую при необходимости можно вызывать из разных частей данной программы. Бейсик позволяет реализовать эту возможность с помощью оператора РЕГ Г Х... (Х, У). После ГК следует еще одна буква для обозначения данной определяемой функции. В основной программе будет осуществляться обращение к этой функции с помощью например, оператора 1.ЕТ Х=Г51... (Р,Е), где Р и Е обрабатываются функцией ГН. Эта функция может состоять из одной или нескольких строк текста. В последнем варианте функция заканчивается оператором ГМЕНР, который отделяет ее от других частей программы.
Если для описания функции требуется большое число строк, то говорят о «многострочной функции». Обычно же большинство формул удается разместить на одной строке и тогда говорят об «однострочной функции». Как уже отмечалось выше, определяемые функции различаются с помощью буквы, следующей после Г(ч. Иногда после этой буквы может следовать еще одна цифра. Переменные, заключенные в скобки, являются фиктивными параметрами.
В ходе вычислений эти фиктивные параметры заменяются значениями тех «реальных» переменных, которые появляются в подпрограмме или в соответствующих формулах. Поясним применение функции РЕГГИ с помощью ряда примеров. Пример «однострочной» функции: ХЕ% Определение (одна строка) 10 РЕГ ГХЕ(Х) =ЕХР( — Хт2+5) 100 1.ЕТ У=Г5)Е(.2) Языки ирограммировакия высокого уровяя — Бейсик 341 Выполнение (1) 110 РК1ИТ У 200 1.ЕТ Х=ГИЕ(3.45) Выполнение (2) 210 РК1ХТ Е КЫХ 142.594 ! .00527Е-03 Функция описана здесь на одной строке 10 и затем применена в строке 100, а также в строке 200 с другим значением Х.
После вычисления результат можно распечатать, например, с помощью оператора РК15)ТУ, как это сделано в приведенном примере. Пример «многострочной» функции: )ч ЕЪЧ 10 РЕГ РХМ (Х, У) 20 К=З«Х+У вЂ” УЗ~Э 30 1 ЕТ РАЕМ=К(2+ЕХР(К) 40 Г)йЕХР Определение (несколько строк) 100 КЕАР Р 110 КЕАР Е 120 1.ЕТ Р=Р5)М(Р, Е) 130 РК)ЫТ Р 140 РАТА 7.8, 9?65.4 Выполнение 270 КЫХ Отсутствие знака равенства в строке 10 показывает, что здесь используется «многострочная» функция. Сама функция определена в строках 20 и 30.
Определение функции завершается оператором Р5)Е)чР. Результат выполнения этой «многострочной» функции в строке 120 распечатывается оператором РК11»Т (строка 130). В строках 100 и 110 производится считывание чисел из ПАТА-файла (строка 140), которые вводятся затем в строку 120 для последующих вычислений. Ниже приведены еще два интересных примера применения, из которых следует, что подобная функция может включать не только арифметическую обработку.
Пример: 10 РЕР ГНМ(Х, г') 110 1.ЕТ У=ГАМ (А, В) Определенне20 ЬЕТ РХМ=Х (несколько 30 1Г У<=Х ТНЕУ) ООТО 50 строк) 40 1 ЕТ РАЕМ=У 50 ГЫЕ1)Р 848 Глава б 10 ПЕР Рг(Р(И) 20 1.ЕТ Р5(Р=1 30 РОК К=1 ТО И 40 1.ЕТ РЯР=К+РХР 50 РК11чТ РИР 60 МЕХТ К 70 ЕИР КШЧ 1 2 6 24 120 Определение (несколько строк) Эта программа производит следующие вычисления: цикл 1: 1Х1 = 1 цикл 2: 2Х1=2 цикл 3: 3;ч',2=6 цикл 4: 4Х4=16 цикл 5: 5х',24=120 Если 5(=о, то после окончания вычислений Р5)Р=120. Следует отметить, что в большинстве Бейсик-диалектов многострочные функции отсутствуют. Если же попытаться в них реализовать такую функцию, то система выдаст диагностику с указанием о синтаксической ошибке.
Особое место занимают так называемые функции, определяемые пользователем, которые пользователь использует для связи между языком Бейсик и машинным языком. Такие функ- В этом примере в строке 20 определена функция Р5(М=Х и если Х больше илн равно У, то происходит переход программы в строку 50.
Если же указанное выражение ложно, то Р5(М=У. Описанный здесь метод обработки можно использовать также и в других местах для программирования Р5(М с последующими переменными, которые требуется обработать в соответствующей части программы. Такими переменными могут быть, например, А и В, и запрос на выполнение можно осуществить по команде (,ЕТХ=Р5)М(А,В). Во всех остальных подпрограммах Р5)М можно применять, просто присваивая вычисленную величину Р5(М другим переменным.
Следующий пример иллюстрирует цикл, при каждом повторении которого изменяется величина определенной переменной Языки программирования высокого ировня — Бейсик ции особенно необходимы при осуществлении связи через шины адресов, данных и управления периферийными схемами, такими, как аналого-цифровой и цнфро-аналоговый преобразователи, а также сложными схемами управления исполнительными устройствами при реализации различных процессов. Без использования ПЕР(зЗК-функций такую связь реализовать невозможно, так как программист не знает, каким именно образом интерпретатор управляет ЗУ и где хранятся требуемые данные.
Программируя ПЕР ПЗК-функции с последую- шими номерами от О до 9 включительно, можно вызывать из Бейсик-программ подпрограммы, написанные на машинном языке. Если программа встречает РЕР ПЬК-оператор, то ее дальнейшее выполнение продолжается по адресу, который определяется заранее с помощью оператора, расположенного, например, в начале программы. Если программируется ПЕР ()ЬКО=АНР9РО, то в случае считывания в программе Х= =ПЬКО(Х) происходит переход в подпрограмму с номером О, написанную на машинном языке и имеющую первую команду, которая находится по адресу Р9РОгв. В момент перехода Х помещается в аккумулятор с плавающей точкой, адрес которого находится в регистре Н(. В регистр А сообщается, какое числовое представление имеет Х: в виде двухбайтового целого числа (А=2), десятичного числа с одинарной точностью (А=4) или десятичного числа с двойной точностью (А=8). Если переменная представляет собой строку символов, то А=З.
Кроме того, имеется возможность ввести с помощью оператора РОКЕ на соответствующие места в подпрограмме данные, которые в дальнейшем, когда выполнение Бейсик-программы будет продолжено, считываются из подпрограммы с помощью оператора РЕЕК. Эти операторы более подробно будут рассмотрены в следующем разделе, где пойдет речь об обработке байтовой информации. Возврат из Бейсик-подпрограммы можно осуществить, помещая в конце ее команду возврата НЕТ. При таком способе возврата подразумевается, что результат обработки попадет в регистр Н( .
После возврата Бейсик-программа считывает из НЕ соответствующие данные и присваивает числовое значение переменной, которая указана в операторе ()ЗК. Перед вводом подпрограммы следует зарезервировать требуемое количество ячеек в оперативном ЗУ. Это можно сделать с помощью оператора С( ЕАЙ и, ш, где первая ячейка ЗУ задается гп, а число ячеек — и. Оперативное ЗУ необходимо резервировать в области со старшими адресами, так как область с младшими адресами требуется для обеспечения работы Глава б интерпретатора.
Интерпретатор использует ЗУ оптимальным образом, поэтому для резервирования ЗУ под одну или несколько подпрограмм обычно применяется оператор С1ЕАР. Один из примеров связи Бейсик-программы с подпрограммой, написанной на машинном языке, выглядит следующим образом: 10 Р =Ф1Р РРО ! Ре!! нАчАльныЙ АДРес О СЕЕВР !ОО Р: РЕН РЕЗЕРВИРОВАНИЕ ЗО РЕН Х Р 1 ВЫПОЛНЯЕТСЯ ПОЛПРОГРАММОЙ 90 ОР!Рвналн!ен н! ° ! —. ОР!!1нсв:аесн ме! ОО Р!!Рс=! !ОР .
90 РЕЛОН !аа !Ри О.:н Л:О !1Е ! о и Р аз!01 = Р 130 1=0 !Ла 1в19НО ! 190 РН!Н!1 1)о !Р <!васам 190 1'О ЕН! Структурная схема этой программы приведена на рис. 6.6. В строке 1О для Р присваивается значение адреса первой ячейки ЗУ. В строке 20 для Р с помощью оператора С1.ЕАК 100, Р резервируется 100 байт.
В строках 40 — 80 располагаются после. довательно отдельные команды подпрограммы, оформленные в виде файла данных. Эта подпрограмма производит кодирование в шестнадцатеричном коде. Такое кодирование можно реализовать и в восьмеричном варианте. Как показано в этом примере, при шестнадцатеричном вводе данных перед кодом необходимо помещать АН. Команды записываются в требуемые ячейки ЗУ с помощью оператора КЕАО, который считывает их одну за другой из файла данных.
Оператор РОКЕ переписывает данные в ЗУ. Увеличение адреса на 1 происходит в строках 80 — 110. С помощью оператора РОК...НЕХТ переменная 1', начиная с Р, увеличивается каждый раз на 1 и достигает значения Р=Р+2. Переменная !' снова появляется в операторе РОКЕ в строке 100. При каждом прохождении цикла, которое совершает эта короткая подпрограмма, оператор КЕАП считывает из файла данных последовательные байты, которые затем записываются оператором РОКЕ в требуемые ячейки ЗУ. В строке 120 указано, что первая команда находится в ячейке ЗУ, заданной через Р в строке 10.
В данном примере подпрограмма является достаточно простой и состоит только из команды Н) =Н1.+1, после которой следует КЕТ. Основная программа начинает выполняться со строки 130, где фиксируется Х=О. В строке 140 оператор Х=Т)ЗК01Х) Языки орогриммироеания высокого уровня — Бейсик 351 осуществляет переход в подпрограмму, где Х увеличивается на 1. После возвращения Х распечатывается и, если Х( 100, в строке 160 происходит обратный переход в строку 120, откуда затем осуществляется повторный переход в подпрограмму, где Х снова увеличивается на 1.