PDA

Просмотр полной версии : Операторы бейсика. Сколько тактов?



captain cobalt
05.08.2006, 18:22
Сколько тактов занимают машинные команды знают все.

А сколько тактов занимают операторы бейсика? Где почитать?

James DiGreze
06.08.2006, 18:27
Не знаю где почитать, но каждый раз по-разному ;)
Н-р все что связано с арифметикой, будет зависеть от инициализированности переменных и калькулятора.

Vitamin
06.08.2006, 22:10
Не знаю где почитать, но каждый раз по-разному ;)
Н-р все что связано с арифметикой, будет зависеть от инициализированности переменных и калькулятора.
Не только с арифметикой. Если посмотреть список команд калькулятора, то видно, что туда умещается также работа со строками и прочие вычисления.

fk0
07.08.2006, 08:35
А сколько тактов занимают операторы бейсика? Где почитать?

Много и больше. Типичный оператор -- несколько мс. Где почитать не знаю, разве что измерить
самостоятельно.

rasmer
13.08.2006, 20:35
Сколько тактов занимают машинные команды знают все.

А сколько тактов занимают операторы бейсика? Где почитать?Вот ты извращенец....

GriV
21.08.2006, 17:52
Берёшь программу вида -
1 LET A=A+1: GOTO 1
99 LET A=1: GOTO 1

Запускаешь сие (при помощи RUN 99) на протяжении, скажем, 10 минут (засекать по таймеру). Останавливаешь. Смотришь А. Делишь [10 (минут)*60 (секунд)*50 (фреймов)*69998 или 71998 (в зависомости от модели)] на полученное число. Вот тебе и будет почти точное количество тактов на цикл вида LET A=A+1: GOTO XXX

Далее, усложняешь её до вида:

1 <НУЖНЫЙ_ОПЕРАТОР>: LET A=A+1: GOTO 1
99 LET A=1: GOTO 1

Так как ты уже знаешь сколько тактов занимает предыдущая конструкция в тактах, то сможешь вычислить размер в тактах (так как было абзацем выше) новой конструкции. Вычитаешь из полученного числа тактов для текущей конструкции то число, которое получено ранее. Вот и будет почти то число тактов которое занимает твоя команда в басике - <НУЖНЫЙ_ОПЕРАТОР>.

Что не учитывает такой подход: дело в том, что бейсик транслятор мягко говоря туповат, и каждую строчку он ищет от первой. Потому - в целях снижения этих затрат - запуск начинает с 99 строки, которая делает переход на первую - самую быструю строчку, тем не менее даже первую строчку ему приходиться искать.

Кроме того, у тебя обязательно будут затраты на переход от оператора к оператору внутри строки, которые в общем то трудно учесть.

Более точный результат ты сможешь получить только если проанализируешь работу машинного кода, обрабатывающего команды басика, да и то - это будет сильно зависеть от того какие были начальные условия. Т.е. условные операторы могут работать быстрее медленнее в зависимости от начальных условий - я думаю тут даже объяснять не надо почему.

GriV
21.08.2006, 17:55
мне не совсем понятно зачем нужна длительность выполнения операторов басика. Может быть сравнивать производительность разных басик-трансляторов?
Скорей всего точную информацию по времени работы операторов ты нигде не найдёшь - просто потому что это никому не надо.

Raider
22.08.2006, 09:06
В фирменном спектрумовском бейсике, насколько я это помню (все-таки лет 13 ничего не писал на нем :) ), есть есть одна неприятная вещь -
бейсик очень тормозно переходит по строкам, он ищет очередную подлежащую выполнению строку. то есть начинает в памяти от начала бейсик-программы, и перебирает строки пока не найдет нужную.
Именно поэтому, кстати, большие "коммерчески-серьезные" бейсик-программы стремились писать так, чтобы в каждой строке было как можно больше операторов бейсика - эдакими гигантскими строками-кусками. ..

Выполнение операторов бейсика сильно разное. Особенно тормоза начинаются там, где внутренний бейски-калькулятор что-то считает с помощью других "слов" калькулятора и с помощью полиномов Чебышева (синус какой-нибудь или какаую-нибудь другую функцию). Вы посмотрите книгу О'Хары и Логана (откомментированные исходники 48-й прошивки) - там можно получить представление что происходит внутри бейсика...

fenix
13.09.2006, 02:49
Сколько тактов занимают машинные команды знают все.

А сколько тактов занимают операторы бейсика? Где почитать?
На мой взгляд, без разницы. Только для самообразования. Я уже убедился: чтобы написать что-то стоящее, нужно изучать assembler. Остальные или тормозят или оптимизация страдает (читай "тоже тормозят"). Но это лично мое мнение... :smile:

Raider
13.09.2006, 21:22
10 PAUSE 1: BORDER 0 : BORDER 1 : BORDER 2 : BORDER 3 : BORDER 4 : BORDER 5 : BORDER 6 : BORDER 7 : GO TO 10

SAM style
13.09.2006, 21:51
10 PAUSE 1: BORDER 0 : BORDER 1 : BORDER 2 : BORDER 3 : BORDER 4 : BORDER 5 : BORDER 6 : BORDER 7 : GO TO 10
border жрёт >5300 тактов??? (ширина полосы=3 строки=24 линии=24*224=5376 тактов). OMG!!!
Где же родное это...
ld a,4
out (254),a
...

SGO
27.12.2006, 15:05
Существует эмулятор BASin, у когорого есть функция, которая рисует некую диагрмамму, так сказать для каждого оператора свой столбик, прекрасно видно где программа пролетает, а где затормаживается на вычисления

Sonic
27.12.2006, 15:13
border жрёт >5300 тактов??? (ширина полосы=3 строки=24 линии=24*224=5376 тактов). OMG!!!
Где же родное это...
ld a,4
out (254),a
Ну во-первых BORDER n - это не только OUT (#FE), A. Это еще и закраска оным цветом нижней части экрана (которая область командной строки). А это куда хуже будет.

SAM style
27.12.2006, 17:17
Ну во-первых BORDER n - это не только OUT (#FE), A. Это еще и закраска оным цветом нижней части экрана (которая область командной строки). А это куда хуже будет.Закраска и очистка нижней части происходит когда туда что-то выводится. Сам border ее не закрашивает (сделай border 0 : pause 0). А вот на поиск оператора в строке бейсик-проги уходит действительно много. Плюс еще преобразование числа через тормознутый калькулятор.

psndcj
27.12.2006, 19:43
А еще в Бейсике время выполнения команды зависит от номера строки в программе - то есть чем дальше от начала, тем дольше выполняется "оператор"...

Romanich
28.12.2006, 02:47
Сколько тактов занимают машинные команды знают все.

А сколько тактов занимают операторы бейсика? Где почитать?

Гы-ы! Очень много. Убило наповал то, что вывод символов в цикле - ощущаем глазами :v2_laugh:

Где-то в умной книге видел:
1) Басик - язык для дебилов
2) Паскаль - язык для сосунков
3) Си - язык для профессионалов
4) Ассемблер - для маньяков ;)

TomCaT
28.12.2006, 06:57
Четыре альтернативы? Голосуем по всем пунктам оптом? :)

Romanich
28.12.2006, 07:11
Четыре альтернативы? Голосуем по всем пунктам оптом? :)

отдаю голос последним двум ;)

Sinus
28.12.2006, 16:56
бейсик однозначно тормоз.
ибо я когда-то писал демки на бейсике, так вот,

одну точку можно нарисовать во фрейм.
две точки - только если нет сильных вычислений.
три точки - и всё тормозит :)

так что правильно писал fk0 по поводу того сколько тактов занимают операторы бейсика - "Много и больше"

Jack Ketch
04.11.2007, 10:53
Сколько тактов занимают машинные команды знают все.

А сколько тактов занимают операторы бейсика? Где почитать?

Они зависят от процедур которые опять таки можно посчитать !!!! Имею ввиду по тактам в коде в пзу !!!! Это раньше были такие извраты - ставили медленную память, линейка криво выполнена (Magik 5), и.т.д. а потом вы 1996 году сделали "стандарт" пентагон и пости все стали на него ровняться, а блин еще скорпион со своим теневым пзу (кривым ксати!)
Так-чо шура пилите-пилите она золотая !!!! :v2_wink2:

ARTi
20.12.2007, 17:07
Они еще зависят от того, были ли нажаты в момент выполнения клавиши или нет, а также от того, сколько прерываний произошло во время выполнения. Также, насколько я понимаю, иногда зависят от содержимого переменных транслятора. И еще куча всего, о чем было ранее сказано в теме...