ZX Format
#04
14 июня 1996 |
|
Программистам - изучаем Бейсик (часть 4).
Бейсик (#4) (C) Дм. Рудовский ________________________________ Basic, как и все языки высо- кого уровня имеет несколько не- достатков. И самый главный из них - медлительность. Вот самый простой пример. На- берите программу: 10 FOR I=0 TO 65535 20 NEXT I 30 CLEAR 29999 40 PRINT "STOP TIME" 50 FOR K=30000 TO 30009 60 READ B: POKE K,B 70 NEXT K 80 STOP 100 RANDOMIZE USR 30000 110 GO TO 30 120 DATA 1,255,255,11,120,177 130 DATA 194,51,117,201 Запустите ее командой RUN, засекая время до появления над- писи STOP TIME. Теперь запустите программу вторично, но на этот раз командой RUN 100, проведя аналогичные операции. Теперь сравните. Как правило, первый результат раз в сто боль- ше второго. Для тех, кто не по- нял, объясняю: первый запуск - Basic-интерпретатор "прокрутил" пустой цикл 65536 раз, во второй раз то же самое было сделано из машинных кодов. Итак, Вы убедились, что Basic слишком медлителен. Что же де- лать, если Ваши познания в ас- семблере не позволяют Вам соз- дать в нем какой-нибудь шедевр? Ответ прост: надо совместить возможности Basic со скоростью ассемблера. Вспомнив прошлую статью, Вы восклицаете "Эврика!" и бросае- тесь искать компилятор, но проч- тя его описание, приходите к вы- воду - "Для калькулятора может быть подойдет". Но все-таки не торопитесь чи- тать раздел по ассемблеру, а до- читайте до конца эту статью, так как речь в ней пойдет именно об описанной выше проблеме. Функция USR число возвращает содержимое регистровой пары BC, оставшееся там после выполнения подпрограммы в машинных кодах, расположенной по адресу, указан- ному как параметр функции. Возникает вопрос - неужели элементарные процедуры, вроде скроллинга, придется писать са- мому? Конечно, нет смысла изобре- тать велосипед, - элементарные программы уже придуманы, написа- ны и собраны в библиотеки под названиями: SUPERCODE и NEWSUPERCODE. Все, что Вам нужно, так это найти нужную Вам процедуру, за- писать ее на диск и вставить в свою программу. О том, как вы- полнить эти три пункта и пойдет речь в дальнейшем. Описывать подпрограммы в этих пакетах я буду по порядку их но- меров в Supercode 3.5, давая в скобках номер соответствующей процедуры в Newsupercode. Но пе- ред этим я должен несколько слов сказать о системе управления этими пакетами. Supercode 3.5: Сей пакет состоит из двух частей (подпрограммы 1-74, 75- 150). После загрузки и вводного слова на польском Вы попадаете в меню. Дам расшифровку пунктов, кои выбираются нажатием первой буквы команды. С самого начала Вас подстерегает странная строч- ка внизу экрана: DEMO/PRNTR/QUIT/ANY OTHER KEY где DEMO - демонстрация возмож- ностей программы в целом, PRNTR - распечатка на принтере, QUIT - выход в Basic, ANY OTHER KEY - продолжить. Продолжив, мы попадаем в главное меню: NUMBER - описание процедуры с номером, который Вас попросят ввести. DEMO - см. выше. PRNTR - см. выше. LOCATE - объяснения, как ис- пользовать процедуры по адресам, отличным от тех, которые даны в Supercode. INDEX - на страницу назад. JUMP PAGE# - Переход на страни- цу n(1-4). CONTINUE - переход на следующую страницу. SAVE - запись нужной Вам под- программы на диск. QUIT - см. выше. Нажав "N" и набрав нужный Вам номер подпрограммы, Вы увидите ее описание и очередное меню: EXAMPLE/PRNTR/QUIT/ANY OTHER KEY Из всех пунктов новый только один - EXAMPLE. Для слабо знако- мых с английским объясняю - EXAMPLE - пример, это означает, что выбирая этот пункт Вы увидите пример работы этой подпрограммы. Пакет Newsupercode отличается от Supercode только меньшим ко- личеством подпрограмм и лучшим интерфейсом. Здесь выбор осущес- твляется лишь курсорными клави- шами и "ENTER". Выбираешь нужную процедуру, наводишь на нее кур- сор и нажимаешь "ENTER". Теперь перейдем непосред- ственно к самим подпрограммам. Я приведу пример работы с ними. Итак, Вы хотите чтобы в слу- чае ошибки программа не вывали- валась в Basic с никому не нуж- ной надписью, а переходила на строку Вашей программы, где Вы ее проанализируете. Посмотрим, что нам для этого нужно: 1. Подпрограмма перехвата ошиб- ки. 2. Подпрограмма подачи звуково- го сигнала. Теперь загружаем Supercode и ищем подпрограмму с номером 65. После ее запуска при любом пре- рывании программы (даже О.К.) управление будет передаваться на определенную строку Basic прог- раммы, адрес которой будет задан нами в ячейках памяти 60878/79. С помощью опции SAVE записываем эту процедуру на диск. Если у Вас кассетный вариант,то запиши- те на бумаге адрес и длину этой подпрограммы и, нажав QUIT, вый- дите в Basic. Запишите ее обыч- ным способом, а затем вернитесь в пакет командой GO TO 0 и пов- торите все вышеприведенные мани- пуляции с процедурой номер 42. Теперь, выйдя в Basic, набе- рите нижеприведенную программу: 10 CLEAR 60825 20 RANDOMIZE USR 15619: REM : LOAD "65" CODE 30 RANDOMIZE USR 15619: REM : LOAD "42" CODE 40 POKE 63951,20 50 RANDOMIZE USR 60826 60 INPUT "INPUT N(1-5):";N 70 RESTORE: LET SUM=0 80 FOR I=1 TO N 90 READ A 100 LET SUM=SUM+A 110 NEXT I " 120 PRINT "SUMMA ";N;"NUMBER =";SUM 130 GO TO 60 9495 LET A=USR 63950 9500 LET A=PEEK 23681 9510 IF A=CODE "E" THEN GO TO 9700 9520 PRINT "ERROR, CODE ";A 9530 GO TO 60 9700 PRINT "READ TEXT, PIG!" 9710 PRINT "EXIT?" 9720 LET K$=INKEY$: IF K$="" THEN GO TO 9720 9730 IF K$="D" THEN LET A=USR 0 9740 IF K$="N" THEN GO TO 60 9750 GO TO 9720 Некоторые пояснения. В строке 40 устанавливается длительность звукового сигнала, в строке 50 активизируется подпрограмма пе- рехвата ошибки, в строке 9495, куда происходит переход после ошибки, выдается звуковой сиг- нал. Если Вас не устраивает такой метод,то ждите следующей статьи, где будет объяснено, что делать, когда возможности стандартного Basica Вас не удовлетворяют.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября