Й.Янсен Курс цифровой электроники. Том 4. Микрокомпьютеры (1987) (1092084), страница 59
Текст из файла (страница 59)
В следующей программе показано, как с помощью оператора СНВ3 (Х) можно напечатать таблицу АВС1!-кода. В колонках с цифрами представлены эквивалентные десятичные значения наборов битов в АЗС11-коде, с помощью которых определяются символы, приведенные в таблице. е 1О Е Дэит "дзатт".тдв31О7'СИМВОЛ гтдо1 а1 "ДЗС11",тио(аа1 СИМВОЛ . ОХ 1=11 эа 7=7 ° 1 (о тг=сид9131 ,а 9-.1-33 о ит=снвтгл (а Егд17111 сдосэогтв,тдосэагэ тдв1эощв оо 171с=таоосоэа чо еио СИМВОЛ символ с а Г Д". '.
11 "с 1 3 -ь а 1 э ь 7 9 ва З1 Еь ОЬ 89 9О 91 В строке 20 переменной Х присваивается значение 64, которое в строке 30 увеличивается на 1. Затем в строке 40 оператор СНРЕЕ (Х) определяет символ 1'$. Далее Х уменьшается Н 1 '1 К н и о о а с О Ц ДОС11 3 ээ 3'» 3Ь 37 эе 39 ьа 93 'ь" д сь дг 19 а 51 '53 59 53 5Ь 57 .5В Глава б на 33 и это значение присваивается переменной У. Оператор СН)хв (Х) определяет соответствующие символы для Ч.
Наконец, в строке 70 напечатаются АБСП-цифры и символы в колонках. Преобразова .ие в десятичные цифры, равные Х+1, продолжается с помощью оператора 1Р...ТНЕМ бОТО, который обеспечивает обратный переход в строку 30. Этот цикл повторяется до тех пор, пока Х не превысит величину 90, после чего программа переходит к оператору ЕМЭ. 6.10. Обработка байтов данных Как уже отмечалось, в случае ввода и вывода данных с помощью клавиатуры, видеодисплея и принтера появляется возможность вывода данных через шины данных, адресов и управления, для того чтобы осуществлять связь с более избирательными средствами ввода и вывода данных. При этом подразумевается управление процессами, обработка измеренных данных, а также такие операции, как управление игрушечной железной дорогой, системой центрального отопления и т. д.
При использовании языка Бейсик управление работой ЗУ осуществляет система. Пользователь системы не знает, где именно в ЗУ хранится информация, которую он обрабатывает. Интерпретатор обеспечивает адресацию этой информации и с его помощью можно получить к ней доступ. Хотя пользователь и не имеет прямого доступа к ЗУ, он тем не менее может производить обработку байтов данных, используя для этой цели операторы РЕЕК и РОКЕ. Оператор РЕЕК, после которого следует десятичный адрес ЗУ, заключенный в скобки, обеспечивает считывание содержимого соответствующей ячейки ЗУ.
Оператор РОКЕ с последующим десятичным адресом и соответствующей переменной обеспечивает запись байта информации в ЗУ. РОКЕ имеет сходство с командой ЯТОКЕ, а РЕЕК— с командой 1.ОАЭИ на машинном языке. Тот факт, что программа обрабатывает байтовые данные в десятичной форме, является несущественным, так как результат оказывается в обоих случаях одним и тем же. При тестировании и отладке программы это может приводить к затруднениям, если промежуточные результаты требуются в десятичной форме, поэтому некоторые диалекты Бейсика обеспечивают возможность печати данных в шестнадцатеричном коде. Такие данные можно вводить и с клавиатуры, при этом для шестнадцатеричных переменных и чисел необходимо использовать определенные кодируюшне символы, такие, как ЬН. РОКЕ и РЕЕК можно также применять для обмена данными между программами, написанными на Бейсике и машинном языке.
359 Явики программирования високого уровня — Бейсик Для иллюстрации применения РОКЕ и РЕЕК можно привести следующий пример: г! Е% 10 1.ЕТ А=15 20 РОКЕ 35001,А 30 Х=РЕЕК(35001) 40 РК1ИТ НЕХ3 (Х) 50 Е5)Р КОН ?255 ООГР ? 1023 ОЗРР Еще один пример, в котором реализуется операция У= =НОТ Х: ХЕ%' 10 1Ь!Р1?Т Х 20 РК1ХТ НЕХ5 (Х) 30 У=НОТ Х 40 РК1 ХТ НЕХЗ (У) 50 ЕМР К~ЗХ ? О 0 ГГГГ Х = 0000 0000 0000 0000 'У = !111 1111 1111 1111 К1) Н ?7 7 ГГГ8 0000 0000 0000 0111 11!1 1111 1111 1!ЮО К1?Н ? 255 255 ГГОО 0000 0000 1111 1111 1111 1111 0000 0000 Число 15 с помощью команды РОКЕ передано в ячейку 35001.
В строке 30 это число считывается из ЗУ, и в строке 40 оно выводится на печать оператором РК1.'МТ НЕХ3 (Х) в шестнадцатеричной форме (Г). Оператор НЕХ$ (Х) преобразует переменную Х в шестнадцатеричный набор цифр, оператор ОСТе (Х) — в восьмеричный набор цифр. Другой пример применения оператора НЕХ3 (Х): 5) ЕЮ 10 1НР1?Т Х 20 РК!ИТ НЕХ3 (Х) 30 ЕНР К()Н К()И Глава б Если в этой программе Х, У и 2 заданы в виде десятичных переменных, то результат будет выражен в дополнительном коде, т, е. в виде 1)ОТ Х= — (Х+1). 1ЧЕ% 10 11ЧР1ЗТ Х 20 РК1ХТ Х 30 т'=1ЧОТ Х 40 РК11ЧТ Х 50 ЕМР К1ЛЧ К 131Ч ?О ?7 0 7 — 1 — 8 К 13Х К 13М ?255 ? — 1 255 — 1 — 256 0 6.11.
Индексированные переменные Кроме численных переменных, обозначаемых одной буквой (А) или буквой и цифрой (А1), и текстовых переменных, задаваемых одной буквой и знаком доллара (А3), используются также индексированные переменные, которые представ- Связь между программами, написанными на языке Бейсик и машинном языке, осуществляется с помощью специальных команд. В предыдущих разделах обсуждалась «функция, определенная пользователем», 17$К(Х), которая предназначена для решения этих проблем.
В системах с дисковыми ЗУ или кассетными магнитофонами должна быть предусмотрена возможность реализации связи с указанными устройствами. Как известно, для связи с кассетным магнитофоном применяются, в частности, операторы СБАЧЕ (запись данных) и С).ОА13 (считывание данных). После этих операторов в скобках указывается имя файла. Первая буква имени является обычно идентифицирующим символом, который позволяет отыскать на ленте соответствующий файл в процессе считывания, поэтому на одной и той же ленте нельзя использовать имена файлов „ААР" и „АХТОй)", так как они оба начинаются с одной и той же буквы А.
Явмки ирограииирования ввгсокого уровня — Бейсик ЗБЬ ляются в Бейсике одной буквой или буквой с цифрой, после которых в скобках помещается целое число (А!(2)). Эти переменные являются элементами массива чисел; целое число, заключенное в скобки, указывает место индексированной переменной в данном массиве. Общее число элементов в массиве указывается с помощью команды Р1М, например в виде Р1М А(5), В(5), которая появляется до начала каких-либо операций с этими элементами.
Интерпретатор заказывает столько ячеек ЗУ, сколько требуется для размещения данного массива чисел в ЗУ. Когда используется оператор Р1М, система резервирует определенное число ячеек ЗУ, например 10. Если заказать с помощью Р1М число ячеек, превышающее размерность массива, то та часть ЗУ, которую можно было бы использовать для других целей, останется неиспользованной. Если число элементов массива превышает размерность, указанную в Р1М, и объем ЗУ„ зарезервированный системой, то те элементы, которые попадают за пределы этого объема, будут отброшены. Таким образом, по указанным выше причинам следует всегда с помощью команды Р1М резервировать такой объем ЗУ, который точно соответствует размерности массива индексированных переменных.
На практике массивы индексированных чисел часто используются для хранения таб.чиц в ЗУ. Возьмем в качестве примера ценник для транзисторов разных типов с ценами, указанными для партий по 10, 100, 500, 1000 и 2500 шт. В результате получим двумерную матрицу, в которой можно обозначить строки (тип транзистора) одной буквой и одной цифрой, а различные колонки — с помощью числа, заключенного в.
скобки. При вычислении цен, когда требуется произвести оценки на основе объема продажи, потребуется именно этот метод хранения информации, используемый в процедурах вычисления и оформления накладных соответствующих изделий, в данном случае транзисторов. С другой стороны, если потребуется обработать данные в матричной форме в более широких масштабах, то в расширенном варианте Бейсика можно найти для этой цели ряд дополнительных команд, выполняющих действия над матрицами, которые отличаются от стандартных функций приставкой МАТ..., означающей, что здесь мы имеем дело.
со специальной матричной функцией. 362 Глава 6 6.12. Многократное применение переменных Переменные можно использовать в любой программе многократно, если при этом не возникают какие-либо осложнения. В частности, переменную 1ч, которая используется в одном цикле, можно применить и в другом цикле при условии, что ее числовое значение выбрано соответствующим образом. Эту операцию можно осуществить с помощью оператора 1.ЕТгЕЕТ 51=.... Пример: допустим, что из файла данных необходимо считать последовательно пять элементов. С этой целью можно использовать следующую программу: 150 РОК 1ч=1 ТО 5 150 КЕАО Р(И) 170 ИЕХТ Х Если потребуется затем произвести считывание из того же массива с определенным числом Оставшихся элементов, то для этого придется переопределить И, например в виде .РОК И=8 ТО 10; 200 РОц 1ч=8 ТО 10 210 КЕАО Р(51) 220 ИЕХТ Х 300 ПАТА 2,23,— 1,345, 01 и т. д. Можно использовать И и для другой цели, например в качестве переменной результата или входной переменной для какого-либо конкретного расчета.
В последнем случае эту переменную придется каждый раз переопределять так, как показано в следующем примере: 110 1.ЕТ 5(=А 120 2=И75 130 РИ5(Т Е Языки программирования высокого уровня — Бейсик 6.13. Представление чисел ХЕ% 10 1)к)РЦТ А% 20 1ХРУТ А% 30 Е)к(Р К()Н К1)Х ?32768 ПЕРЕПОЛНЕНИЕ ЦЕЛОГО ДЕСЯТИЧ- НОГО ЧИСЛА ?10000 10000 После второй команды КЦ)к( происходит превышение численного диапазона +32767, что приводит к появлению диагностического сообщения «переполнение целого десятичного числа». Если тип чисел или переменных явно не задан, то интерпретатор предполагает («по умолчанию»), что эти числа или При обработке чисел используются следующие численные выражения: а) целые числа (положительные нли отрицательные), представленные двумя байтами в диапазоне от — 32768 до +32767; б) числа с десятичной точкой и одинарной точностью в диапазоне от †9999 до +999999; в) числа с двойной точностью в диапазоне от — 10"+ 1 до +10» — 1.