Просмотр полной версии : Что-то я Басиц подзабыл, расскажите плиз
Shadow Maker
09.01.2009, 08:46
Вот Басиц-переменные во время работы, они вот где храняться? Ну то есть вот в программе где-то табличка этих переменных есть, а где соответствие переменной названию? Ну то есть грубо говоря вот работает у меня Басиц, как мне прямо в коде узнать не прерывая его чему у меня какая переменная равна. Типа она там в программе уже где-то определена например LET L=123, вот как мне просматривая память узнать что именно L равен 123.
http://trd.speccy.cz/book/ZXSPECTR.ZIP
стр.35-37
Вот Басиц-переменные во время работы, они вот где храняться? Ну то есть вот в программе где-то табличка этих переменных есть, а где соответствие переменной названию? Ну то есть грубо говоря вот работает у меня Басиц, как мне прямо в коде узнать не прерывая его чему у меня какая переменная равна. Типа она там в программе уже где-то определена например LET L=123, вот как мне просматривая память узнать что именно L равен 123.
Сразу за бейсик-программой располагаются переменные Бейсика. Их начало можно определить, прочитав значение системной переменной VARS по адресу 23627/23628.
Давайте все таки учиться отвечать на вопрос
Привожу один из вариантов решения твоей задачи, может пригодиться в других подобных случаях. :rolleyes:
И так, у меня нет литературы или мне лень в ней копаться, тогда поступаю просто - пишу :speccy: простенькую тест программу и проверяю, как организуются переменные.
Вот для примера листинг такой программы:
http://pic.ipicture.ru/uploads/090118/26555/arRrU5DH6e.gif (http://ipicture.ru/)
Первые строки 10-30 задают для теста переменные, строка 40 вычисляет адрес начала размещения бейсик переменных, который нам любезно подсказали форумчани, в строках 50-70 в цикле печатается область ОЗУ где размещены переменные.
Вот результат выполнения программы:
http://pic.ipicture.ru/uploads/090118/26555/WzoWcW24Vw.gif (http://ipicture.ru/)
Думаю не нужно иметь семь пядей во лбу, чтобы понять, что каждый 7 байт - это имя переменной, вернее код символа переменной 97=a, 98=b, 99=c, там встречается 110 - это n, которую мы помимо тестовых переменных задали при вычислении адреса. Далее после имени идут пять байт, в этих байтах значение переменной для числовых оно, наверное, в 5-ти байтной форме, так как мы выбрали целые числа, не превышающие 255, мы их видим напрямую - это 1, 2, 3. Про организацию 5-ти байтной формы представления чисел можно прочесть в любой книжке или поэкспериментировать с заданием переменных и самому разобраться, также можно поступить и со стринговыми значениями переменных. :rolleyes:
Shadow Maker
18.01.2009, 23:09
Так, хорошо, теперь пишем длину переменной например 3 символа, и теперь у нас почему-то название переменной получается совсем не такое, как надо, а буквы b и с совсем даже не 98 и 99. Как же поступить пользователю в этом случае, учитывая тот факт, что пользователь-то не знает, какие именно нормальные названия у переменных, он их подгрузил вместе с сохраненной басиц-программой, где нет их задания?
Как же поступить пользователю в этом случае?
Для числовых переменных все просто, перебираешь каждый 7-й байт, а для стринга надо подумать там получается разная длина , щас я задам две переменные посмотрю, покумекаем.
Добавлено через 4 минуты
Ха-ха все просто, как на паскале прям...:v2_lol:
Короче первый байт будет имя, только заглавной буквой, следующие два байта - это длина стринга, далее сам стринг...:v2_laugh:
В тест программу задал:
a="123456"
b="1234567"
http://pic.ipicture.ru/uploads/090118/26555/1I37WZUFEf.gif (http://ipicture.ru/)
Вся задача, жду пятерку по информатике :v2_yahoo:
Добавлено через 50 минут
1. Если код символа имени лежит в области заглавных букв - это стринг.
2. Если код символа имени лежит в области прописных букв - это числовая переменная.
Для стринга все просто у него имя только однобуквенное, поэтому 2, 3 байт - это длина, зная длину вычисляешь адрес следующей переменной.
Для числовой переменной известно, что сразу после имени идет либо 0, либо +/-, по ним определяешься сколько символов в имени переменной, делается это путем последовательной проверки, дальше все ясно...
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot