Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 22:20

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: работа с адресами, как к VALUE переменными
СообщениеДобавлено: Сб янв 17, 2009 20:31 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Иногда просто неудобно создавать VALUE переменную, или уже создана VARIABLE или USER переменная, а хочется к ней иметь удобный интерфейс, как с VALUE переменной. Для таких случаев предназначена данная либа.

<pre>
\ 2009-01-16 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ работа с адресами, как c VALUE переменными

\ методы работы с обычными переменными
: (rdval) ( --> n ) R> A@ @ ; \ чтение содержимого переменной
: (toval) ( n --> ) R> 0x09 - A@ ! ; \ запись в переменную
: (frval) ( --> a ) R> 0x0E - A@ ; \ получение адреса переменной

\ связать указанный адрес с именем VALUE подобной переменной name
: >VALUE ( addr / name --> )
NEXT-WORD SHEADER
COMPILE (rdval) A,
COMPILE (toval)
COMPILE (frval) ;

\ методы работы с user переменными, как с USER-VALUE
: (rduval) ( --> n ) R> @ TlsIndex@ + @ ;
: (touval) ( n --> ) R> 0x09 - @ TlsIndex@ + ! ;
: (fruval) ( --> a ) R> 0x0E - @ TlsIndex@ + ;

\ связать указанный адрес USER переменной с именем USER-VALUE подобной
\ переменной name
: >UVALUE ( user-addr / name --> )
NEXT-WORD SHEADER
COMPILE (rduval)
TlsIndex@ - ,
COMPILE (touval)
COMPILE (fruval) ;
</pre>
примеры использования:
<pre>
VARIABLE test
test >VALUE sample

1234 test ! sample . CR \ sample должен вернуть 1234 (значение из test)
5635 TO sample test @ . CR \ в test должно лежать 5635
FROM sample . test . CR \ должен быть один и тот же адрес

\ то же самое и с USER переменными
USER tst
tst >UVALUE proba

4958 tst ! proba . CR \ должно вернуть 4958
5943 TO proba tst @ . CR \ должно вернуть 5943
FROM proba . tst . CR \ должны вернуть одинаковые адреса
</pre>

интересно, что такие слова, созданные с помощью >VALUE и >UVALUE можно
связать с произвольным адресом, например с адресом начала массива, и
использовать, к примеру, значение первой переменной, как указателя
внутрь массива:

CREATE array 100 CELLS ALLOT

array >VALUE index

... array index CELLS + B@ ...

при этом элементы массива будут адресоваться с 1 (единицы).
Впрочем, для работы с массивами лучше создать свой собственный
(более удобный) синтаксис.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Последний раз редактировалось mOleg Сб янв 17, 2009 20:55, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 17, 2009 20:53 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
очень хорошо


в заглавиии темы падежи не согласованы ИМХО работа с адресами, как при обращении к VALUE переменным

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 17, 2009 20:56 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вопрос писал(а):
в заглавиии темы падежи не согласованы ИМХО работа с адресами, как при обращении к VALUE переменным

спасибо, исправил :)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB