![]() |
Операторы бейсика. Сколько тактов?
Сколько тактов занимают машинные команды знают все.
А сколько тактов занимают операторы бейсика? Где почитать? |
Не знаю где почитать, но каждый раз по-разному ;)
Н-р все что связано с арифметикой, будет зависеть от инициализированности переменных и калькулятора. |
Quote:
|
Quote:
самостоятельно. |
Quote:
|
Измерить чрезвычайно просто.
Берёшь программу вида -
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 строки, которая делает переход на первую - самую быструю строчку, тем не менее даже первую строчку ему приходиться искать. Кроме того, у тебя обязательно будут затраты на переход от оператора к оператору внутри строки, которые в общем то трудно учесть. Более точный результат ты сможешь получить только если проанализируешь работу машинного кода, обрабатывающего команды басика, да и то - это будет сильно зависеть от того какие были начальные условия. Т.е. условные операторы могут работать быстрее медленнее в зависимости от начальных условий - я думаю тут даже объяснять не надо почему. |
И ещё,
мне не совсем понятно зачем нужна длительность выполнения операторов басика. Может быть сравнивать производительность разных басик-трансляторов?
Скорей всего точную информацию по времени работы операторов ты нигде не найдёшь - просто потому что это никому не надо. |
В фирменном спектрумовском бейсике, насколько я это помню (все-таки лет 13 ничего не писал на нем :) ), есть есть одна неприятная вещь -
бейсик очень тормозно переходит по строкам, он ищет очередную подлежащую выполнению строку. то есть начинает в памяти от начала бейсик-программы, и перебирает строки пока не найдет нужную. Именно поэтому, кстати, большие "коммерчески-серьезные" бейсик-программы стремились писать так, чтобы в каждой строке было как можно больше операторов бейсика - эдакими гигантскими строками-кусками. .. Выполнение операторов бейсика сильно разное. Особенно тормоза начинаются там, где внутренний бейски-калькулятор что-то считает с помощью других "слов" калькулятора и с помощью полиномов Чебышева (синус какой-нибудь или какаую-нибудь другую функцию). Вы посмотрите книгу О'Хары и Логана (откомментированные исходники 48-й прошивки) - там можно получить представление что происходит внутри бейсика... |
Quote:
|
10 PAUSE 1: BORDER 0 : BORDER 1 : BORDER 2 : BORDER 3 : BORDER 4 : BORDER 5 : BORDER 6 : BORDER 7 : GO TO 10
|
| All times are GMT +4. The time now is 21:18. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.