Использовать то можно, и иногда очень даже эффективно, особенно если заюзать вставки маш.кода.
Использовать то можно, и иногда очень даже эффективно, особенно если заюзать вставки маш.кода.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
весь basic vs assembler свелся к тому что пишем на ассемблере но калькулятор юзаем басиковый
Сам противостояние имхо неверное... нельзя так противопоставлять.
Бейсик это бейсик - ЯВУ если угодно, со всеми своими достоинствами и недостатками. А сранивать ЯВУ и машинный код, коим в целом и является ассемблер можно бесконечно очевидно одно - машинный код быстрее, ЯВУ более удобный для написания программ (ну вот вывести симвом на экран это показатель этих двух средств).
Сильно сомневаюсь чтобы спекковский басяк сильно отличался от общего прототипа ЯВУ.
Зато вот что интересно, так это использование в бейсик программах вставок маш. кода, но не таким дурацким способом как это делалось, а через вызов посредством USR и DEF FN (который насколько я знаю редко пользовался программисткой братвой). Откройте Ревюшки от 95 года и статьи Вадима Бодрова по растровой графике - там он предлагал эффективно соединять бейсик и маш. код - первый делает обсчёты (которые, при всём желании, быстрее никак не сделать) второй выводит графику, и можно в итоге получить нечто не очень слабое. Вроде как одна из фирменных игрушек использовала такой подход - когда все тексты выводится и рассчёты проводятся через басик а графика через маш. код.
если писать на ассемблере даже при использовании чисто ПЗУшных процедур (печать символа, векторная графика, рассчеты на калькуляторе) - разница с бейсиком на порядок, если не больше... единственное, что - конечно на басике гораздо проще чтонить накидать и глянуть, что получится... я вот к примеру простые таблички для дем до сих пор на бейсике рассчитываю =)
но когда я все еще сидел на реале, я специально такие рассчеты делал в асме с использованием ПЗУшного калькулятора - это в UNREAL есть NUMLOCK =), а на реале 5 минут вместо 1 сидеть очень тяжко - особенно на этапе экспериментирования, когда не знаешь толком что надо получить...
эффективно соединить бейсик с машкодом это не эффективно =) слишком слабый проц - и слишком неэффективно бейсик работает... простой пример "1 BORDER 1:BORDER 0:GO TO 1" и "ld a,1: out (#fe): ld a,0: out (#fe): jr $-8" - сравните количество полосок
при необходимости возможно написание быстрой математики в ассемблере - только каких человекозатрат это потребует? в нашей последней деме есть 2 части, где рассчитывается расстояние отрезков ( len=sqr(x*x + y+y) ) - для каждой из 16 точек выссчитываются расстояния до всех остальных - 240 вычислений отрабатываются меньше чем за 30К тактов =) но эт конечно чисто демошный частный случай
Про компиляторы бэйсика забыли (Tobos FP, Softek, MCoder2)
Теоретически, если в бэйсик был бы заложен компилятор и ключи запуска, такие как:
1. Выполнить в режиме интерпретации (возможен останов и отладка).
2. Выполнить, предварительно скомпилировав (адрес такой-то).
то вопрос быстродействия не стоял на первом месте.
Тогда бы обсуждалось качество встроенного компилера.
Затем, в бэйсике нет вставки ассемблерных команд. Можно, конечно, вводить цифры (например в STC1), но это уже не то (как упоминал выше Nomy Graphics).
А вот неплохой бы вариант:
<...>
20 BORDER 0
30 PRINT PAPER 3; INK 6; AT 5,8;"Loading, don't stop the tape please..."
40 LD IX,16384
50 LD DE, 6912
60 LD A,255
70 SCF
80 CALL 1366
<...>
8-)
зы: ну, я опускаю тот момент, что текст асма нужно как-то отделить.
Spectrum Basic
Vovoi, ну, в принципе можно написать некий "компилятор" асма для работы из-под бейсика в стиле:
10 RANDOMIZE USR address_of_compiler: REM "LD IX,16384: LD DE,6912: LD A,255: SCF: CALL 1366"
ЗЫ: Кстати, было бы прикольно!
А если так:
<...>
310 REM asmstart
320 REM LD A,2; kommenty rulyat
340 REM CALL 5633
350 REM ;nu i tak dalee
310 REM asmend
<...>
... для удобочитаемости.
хотя, наверное ерунда это все... проще на асме написать
Добавлено через 1 час 1 минуту
А,.. я понял в чем была фишка строки "10 RANDOMIZE USR address_of_compiler:". В том, чтобы в "Basic RealTime", т.е. в процессе интерпретации уже выполнялась только что скомпиленная часть программы (бэйсик-строка), которая впоследствии будет просто размещена в теле будущей программы. Но эти сладости увеличат объем компилятора
Кстати, о расширителе бэйсика "Laser Basic" говорилось, что кроме интерпретации, сей продукт может компилировать также листинги зашитого бэйсика. Таким образом, программа управлялась со смесью SpectrumBasic и LaserBasic.
Н.Родионов, А.Ларченко "Диалекты Бэйсика для ZX Spectrum". Компилятор. Стр186.
ЗЫ:
В моем bas-примере не было одной фишки: POKE 23606,64256. Помню, как-то надоело делить на 256 (в оперативке было 4 разных шрифта), да потом еще что-то прибавлять. Так что взял, да влючил в компилер новый оператор.
Последний раз редактировалось Vovoi; 12.05.2008 в 15:34.
Spectrum Basic
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)