|
Часть 7
Оператор CALL INTERRUPT
-----------------------
Функция CALL INTERRUPT вызывает системное прерывание
-------
Синтаксис CALL INTERRUPT n
---------
Замечания Целым выражением n представляется прерывание для
--------- вызова в диапазоне от 0 до 255. Как раз перед
получением управления обработчиком прерываний регистры процессора
загружаются значениями из буфера машинных регистров. При
возврате, осуществляемом обработчиком прерываний, буфер принимает
значения из процессорных регистров. В любое данное время буфер
содержит состояние регистров процессора в том виде, в котором
находились эти регистры при компилировании самого последнего
внешнего вызова или оператора REG.
В справочном руководстве по технике DOS содержится полная
информация о многих функциях, доступных через механизм CALL
INTERRUPT. Программист ответственнен за защиту регистров
стекового сегмента (SS) и стекового указателя (SP). Ограничения
Перед исполнением оператора CALL INTERRUPT подходящие регистры
центрального процессора должны быть возбуждены через оператор
REG. После исполнения оператора CALL INTERRUPT к значениям
процессорных регистров должен быть обеспечен доступ через функцию
REG.
см также CALL ABSOLUTE
REG
Пример: 'call interrupt исполняет обслуживание DOS прерываний
$include "regnames.inc"
reg %ax &H0200
'ah=02 шестнадцатиричная функция станд. DOS-вывода
'литерала
reg %ox,reg(%ox)and&HFF02
'DL=02 шестнадцатиричное DH остается тем же
'DL:=литера для вывода
call interrupt &H21 'вызов прерывания 21
Функция CDBL
------------
Функция CDBL преобразует число в формат двойной точности
-------
Синтаксис y=CDBL(числовое выражение)
---------
Замечания CDBL преобразует числовыю переменную или
--------- числовое выражение в формат двойной точности.
Используйте CDBL для исключения случаев переполнения целых в
выражениях, где комбинируются целые операнды и операнды с
плавающей точкой, например: y#=(z%+x%)/a#.
Это выражение будет приводить к переполнению, если (z%+x%)
больше 32767. Чтобы избежать этого, используйте CDBL для
принудительного преобразования одной из целых переменных в форму
двойной точности. Это вызовет оценку всего выражения в двойной
точности.
y=(CDBL(z%)+X%)/a#
Ограничения Диапазон выражения, подаваемого в CDBL должен
----------- находится в пределах законного диапазона для
числа двойной точности.
см. также CINT
CLNG
CSNG
Пример: 'CDBL полезен для предотвращения ошибок периода прогона
x%=2000
y%=2000
z#=cdbl(x%)*y%
print x%,y%,z#
end
Функция CEIL
------------
Функция CEIL возвращает наименьшее целое, которое больше
------- или равно аргументу
Синтаксис y=CEIL(числовое выражение)
---------
Замечания Функция CEIL преобразует числовыю переменную
--------- или выражение в целое, возвращая наименьшее
целое, которое больше или равно аргументу.
Различия Этой функции в Интерпретаторном Бейсике нет.
--------
см. также CINT
FIX
INT
Пример: for i!=-2.5 to 2.5 step 0.5
print using "CEIL-значение ### есть ###":i!,ceil(i!)
next i!
end
Оператор CHAIN
--------------
Функция CHAIN возбуждает модуль цепочек Турбо Бейсика
------- (создаваемой как .TBC или .EXE-файл)
Синтаксис CHAIN файласпец
---------
Замечания Файласпец-это строчное выражение, которое
--------- следует стандартным DOS-соглашениям об
наименовании файлов, и представляет модуль цепочек Турбо Бейсика
(расширение .TBC). Если расширение опускается, предполагается
.TBC. Поэтому, если вы хотите специфицировать .EXE-файл, к имени
файла необходимо добавить .EXE. Переменные перечисляемые как
COMMON (общие), подаются и текущей программой, и программой
назначения в программу назначения.
В фазе тестирования вызывающая программа должна
компилироваться в .EXE -файл, так как вы не можете реализовать
цепочку из самого Турбо- Бейсика. Вызываемая программа должна
компилироваться на диск как модуль цепочек (.EXE или .TBC-файл) .
Если аргументы в операторе COMMON в вызывающей и вызываемой
программах не совпадают (например, переменные с плавающей точкой
в одном месте и целые в другом), возникает ошибка периода
прогона. Турбо-Бейсик не поддерживает опции CHAIN
Интерпретаторного Бейсика, ориентированные на нумерацию строк,
включая DELETE (стереть), MERGE (соединить) и CHAIN (цепочка)
номер строки. Поскольку вы не можете специфицировать номер строки
в модуле цепочек назначения, исполнение начинатися всегда от
начала. При трансляции обработанной CHAIN системы программ
Интерпретаторного Бейсика на Турбо-Бейсик, вы можете обнаружить,
что расширенное использование памяти Турбо-Бейсиком позволяет
консолидировать отдельные модули в единую программу, исключая
необходимость реализации цепочек.
Ограничения Образование цепочек возможно, только когда
----------- программа используется из DOS; т.е. из
.EXE-файла. MERGE, DELETE, ALL и CHAIN по номеру строки не
поддерживаются.
Различия В Турбо-Бейсике образование цепочек делается из
-------- одной компилирующей программы в другую, которая
уже компилирована в .TBC или .EXE-файл.
см. также COMMON
Пример: 'рассмотрим PROG1 ,которая образует цепочку к PROG2:
prog1.bas
'заявить переменные, подлежащие подаче в организуемую
'цепочкой программу: скалярные переменные единичной
'точности a и b и целый массив с%
dim c%(3000)
a=65:b=13:c%(2000)=12
common a,b,c%(1)
'специфицировать #размеров в массиве
chain "prog2"
'заявить переменные, подлежащие приему из возбуждающей
'программы. Они должны быть в том же порядке, иметь
'тот же тип, но не обязательно то же имя
common x,y,z%(2000)
когда prog1.exe возбуждается из DOS, она будет
автоматически вводить модуль prog2.tbc и исполнять его,
распечатывая значения, назначенные в prog1. Когда prog2
оканчивается, возврат осуществляется в DOS, а не в prog1.
Оператор CHDIR
--------------
Функция CHDIR изменяет текущий справочник (DOS-команда
CHDIR или CD)
Синтаксис CHDIR проход
---------
Замечания Проход-это строчное выражение, соответствующее
DOS -соглашениям о проходах (описанных в разделе
"Файлы" глава 4).
Если проход не указывает какой-то законный справочник,
возникает ошибка 76 периода прогона, "Проход не найден". Оператор
CHDIR изменяет текущий (задействованный по умолчанию справочник).
Это аналогично действию команды CHDIR из DOS, за исключением
того, что невозможна аббревиатура, подобная CD. Прогоном
программы, которая меняет справочник, из Турбо-Бейсика также
меняет задействованный справочник Турбо-Бейсика.
Пример: INPUT "Новый справочник :",Проход$
CHDIR Проход$
end
Функция CHR$
------------
Функция CHR$ преобразует ASCII-код в однолитерную строку
-------
Синтаксис s$=CHR$(целое выражение)
---------
Замечания CHR$ возвращает однолитерную строку,единственная
--------- литера которой имеет целое выражение в
ASCII-коде со значением от 0 до 255. CHR$ дополняет функцию ASC,
которая возвращает ASCII -код первой литеры строки. CHR$ удобна
для создания литер, которые трудно ввести с клавиатуры, таких как
графические литеры экранного вывода и управляющие
последовательности для вывода на печать. Значение целого
выражения, подаваемое в CHR$, должно лежать в диапазоне от 0 до
255. Использование аргумента вне этого диапазона вызывает ошибку
5 периода прогона, вызов незаконной функции.
см. также ASC
Пример: 'CHR$ отображает на экране литерный набор ASCII
for i%=0 to 255
print using "i":chr$(i%):
'отобразить ascii литеру ,представляемую i%
next i%
end
Функция CINT
------------
Функция CINT преобразует свой аргумент в целое
-------
Синтаксис y=cint(числовое выражение)
---------
Замечания Функция CINT преобразует числовую переменную
--------- или выражение в целое, округляя дробную часть
числового выражения. Если числовое выражение находится вне
диапазона от -32768 до 32767, то возникает ошибка переполнения
(ошибка 6 периода прогона). Это преобразование выполняется
косвенным путем, посредством назначения целой переменной или
вызовом процедуры, либо функции, которая принимает целый
аргумент.
Различия В отличии от Интерпретаторного Бейсика, Турбо-
-------- Бейсик не всегда округляет дробную часть числа в
сторону увеличения. Если дробная часть числа равна 0.5,
округление осуществляется в сторону четного числа.
см. также CDBL
CEIL
CLNG
CSNG
Пример: for i!=0.0 to 5.0 step 0.2
print using "cint числа #.#=#":i!,cint(i!)
next i!
end
Оператор CIRCLE
---------------
Функция CIRCLE обеспечивает вычерчивание окружности или
------- части окружности.
Синтаксис CIRCLE (x,y),радиус[,цвет[,начало,конец[,вид]]]
---------
Замечания (x,y)-координаты центра окружности, которые
--------- могут специфицироваться в абсолютной или
относительной форме (с использованием STEP.). (Более детальную
информацию об абсолютных и относительных координатах см. в
разделе о графике Главы 3 ).
Радиус -это числовое выражение, задающее размер окружности.
Цвет - целое выражение, определяющее цвет окружности.
Приемлемыми значениями являются 0-3 в графике средней разрешающей
способности (по умолчанию - 3) и 0 - 1 в графике с высокой
разрешающей способностью (по умолчанию - 1). Цветом по умолчанию
является наивысший возможный цвет того режима, в котором вы
находитесь. Использование цветового аргумента вне этих диапазонов
дает ошибку 5 периода прогона, вызов незаконной функции. (Более
подробную информацию о выборе цветов см. в описании оператора
COLOR).
Начало и конец являются опциональными числовыми параметрами,
определяющими начальную и концевую точки подлежащей вычерчиванию
дуги, которые специфицируются в радианах (см. описание радианов в
описании оператора ATN). Используйте их, когда желаете вычертить
только часть окружности. Если начало и конец опускаются,
вычерчивается целая окружность . Например:
SCREEN 1:pi=4*atn(1)
CIRCLE (160,100),50,3,0,pi
обеспечивает вычерчивание белого полукруга от 0 радиан до п
радиан.
Отрицательные значения начало и конец вызывают вычерчивание
торто-образных; т.е. кромки дуги автоматически соединяются с
центральной точкой. Например :
SCREEN 1:pi=4*atn(1)
CIRCLE (160,100)50,,-pi/4,-pi/2
обеспечивает вычерчивание 45-градусного куска торта от п/4
радиан до п/2 рад. Чтобы начать клин на положительной X-оси,
используется отрицательное число, несколько меньше нуля, а не
просто -0 (например ..0001).
Вид - это числовое выражение, управляюшее тем, насколько
круглой или овальной будет окружность. По умолчанию в средней
разрешающей способности его значение равно 5/6 (0.833333), а в
зависимости от вышей конкретной комбинации дисплейной
платы/видео-монитора, вам может потребоваться повозиться с этими
значениями (либо отрегулировать ваш монитор) для получения
круглых окружностей. LPR после вычерчмвания окружности находится
в ее центре.
Пример: 'Эта программа демонстрирует возможности CIRCLE
'изменение местоположения радиуса, цвета, видового
'отношения. С помощью CIRCLE можно также вычерчивать
'дуги и клинья, полезные для игр "пак-ман"
pi#=4*atn(1)
screen 1
for радиус%=1 to 20 'увеличивать размер окружности
колер%=радиус%mod4 'рассчитать цвет изображения
circle (250,150),радиус%,колер% 'центр в 250,150
next радиус%
circle (220,60),50,1,-(pi#*5/4),-pi#*3/4) 'тело
'пак-ман и глаз
circle step (-5,-25),5,1
радиус%=50
'эллипс может давать иллюзию сферы ...
for вид=0 to 2.0 step 0.09
circle (90,100),радиус%,,,,вид
next вид
end
Оператор CLEAR
--------------
Функция CLEAR очищает переменную память
-------
Синтаксис CLEAR
---------
Замечания CLEAR - это команда без параметров, которая
--------- устанавливает числовые переменные в ноль, а
строчные переменные в нуль-строку. CLEAR выключает любое
отслеживание событий, которое находтся во включенном состоянии
(такие как музыка, которая может быть задействована оператором
PLAY) и повторно возбуждает массивную и строчную память.
Примечание: Оператор CLEAR внутри цикла будет очищать
счетчик, вызывая бесконечный цикл.
Для выборочного освобождения массивов в памяти пользуйтесь
оператором ERASE.
Ограничения Турбо-Бейсик не поддерживает динамическую
----------- установку стека и сегментов данных; в этом
операторе нет поэтому соответствующих параметров.
Различия Различия между операторами CLEAR Интерпрета-
торного Бейсика и Турбо-Бейсика происходит,
главным образом , из различий между компиляторами и
интерпретаторами. Интерпретаторный Бейсик дает вам возможность
динамически устанавливать пространство стека и данных там, где
пространство стека и данных Турбо-Бейсика фиксируется во время
компилирования.
см. также ERASE
$STACK
Пример: 'эта программа демонстрирует что может делать CLEAR
dim массив$(1) 'заявить массив строк
play "mb l1 efgabcdef" 'играть музыку в фоне
on pen gosub ПераДержатель 'настроить отслеживание
'светового пера
on strig(0) gosub КнопкиДержатель 'настроить отсле-
'живатель ручки управления
'возбудить строчные данные
Массив$(0)="это строка в Массиве$(0)"
Массив$(1)="это строка в Массиве$(1)"
'отобразить строчные данные
print using "Массивный элемент 1:&":Mассив;(0)
print using "Массивный элемент 2&":Массив$(1)
print
input "нажмите
|