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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: 2>R и 2R>
СообщениеДобавлено: Пн янв 15, 2007 08:29 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Понятно что эта игра со стеком возвратов, но вот не могу представить где это может понадобиться, хочу эти команды опробовать на опыте, и не могу придумать пример.


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

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

Код:
\ такой пример подойдет?
: something ( asc # wid --> addr|0)
                 ROT 2>R
                 BEGIN DUP WHILE  \ пока не конец списка
                           DUP COUNT \ взяли имя слова
                           2R@ COMPARE WHILE
                          CDR
                 REPEAT  ." слово найдено " \ --> addr 
                THEN  ." слово не найдено " \ --> 0
                RDROP RDROP ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 15, 2007 08:47 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Подойдет если распишете входные данные.
Только что то я непойму, стек же возратов служит для хранения адресов возврата из подпрограмм (слов). Причем тут параметры???

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 15, 2007 10:33 
Pretorian писал(а):
Только что то я непойму, стек же возратов служит для хранения адресов возврата из подпрограмм (слов).

Внутри одного слова стек возвратов разрешается использовать. Стек возвратов традиционно (и удобно) используется как хранилище для промежуточных значений, которые если оставлять их на обычном стеке, затрудняют маневрирование и ориентирование.

Пример: обмен значений двух ячеек памяти:

Код:
: XCHG ( addr1 addr2 -- )
DUP @ >R         \ кидаем значение addr2 в R-стек, 2->R
OVER @ SWAP !    \ 1->2
R> SWAP ! ;      \ R->1



VARIABLE a  1 a !
VARIABLE b  2 b !

:NONAME
a @ CR ." a=" .
b @ CR ." b=" .
a b XCHG CR ." XCHG"
a @ CR ." a=" .
b @ CR ." b=" .
; EXECUTE


Само собой, что кол-во положенных и снятых значений на/со стек возвратов должно совпадать. Иначе это уже bac4th получится... Если получится...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 15, 2007 15:04 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
profiT писал(а):
Внутри одного слова стек возвратов разрешается использовать. Стек возвратов традиционно (и удобно) используется как хранилище для промежуточных значений

Вот теперь точно уж понятно для чего и как.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 26, 2007 08:33 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Получается что R> и _CREATE-CODE одно и тоже в спф, или я ошибаюсь???

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 26, 2007 13:51 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Pretorian писал(а):
Получается что R> и _CREATE-CODE одно и тоже в спф, или я ошибаюсь???


Ошибаешься но мыслишь в верном направлении.

Слово содержащее один R> будет тоже что _CREATE-CODE
: MICREATE-CODE R> ;

Код:
: MICREATE1 HEADER POSTPONE MICREATE-CODE ;
: MICREATE2 HEADER POSTPONE _CREATE-CODE ;

MICREATE1 XX1 5 ,
XX1 @ .
MICREATE2 XX2 5 ,
XX2 @ .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 26, 2007 14:02 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
: a R> ;
SEE a
Код:
MOV     FC [EBP] , EAX
POP     EAX
LEA     EBP , FC [EBP]
RET     NEAR

SEE _CREATE-CODE
Код:
LEA     EBP , FC [EBP]
MOV     0 [EBP] , EAX
POP     EAX
RET     NEAR


Чет одно и то же

Но R> компилит само себя по ходу ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 26, 2007 14:49 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Pretorian писал(а):
Но R> компилит само себя по ходу ?


R> компилит, вернее осуществляет инлайн-подстановку слова C-R>.
В данном случае, инлайн-подстановка обязательна, т.к. CALL изменит уровень стека возвратов.
C-R> уже тоже, что и _CREATE-CODE

смотри src\compiler\spf_inline.f


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 26, 2007 14:59 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
: a _CREATE-CODE ;

SEE a
Код:
560670 E8A719FEFF       CALL    54201C  ( _CREATE-CODE ) Size of data: ~1
560675   C3 55 55 00  00 00 00 00  00 00 00 00  00 00 00 00 ├UU............. Ok

SEE R>
Код:
547118 8D6DFC           LEA     EBP , FC [EBP]
54711B 894500           MOV     0 [EBP] , EAX
54711E 5B               POP     EBX
54711F 58               POP     EAX
547120 FFE3             JMP     EBX


: b R> ;

SEE b
Код:
560690 8945FC           MOV     FC [EBP] , EAX
560693 58               POP     EAX
560694 8D6DFC           LEA     EBP , FC [EBP]
560697 C3               RET     NEAR


Теперь все даже понятно! Оказывается вещь то разная если приглядется!

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 26, 2007 15:42 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Pretorian писал(а):
SEE R>
Теперь все даже понятно! Оказывается вещь то разная если приглядется!


SEE показывает содержимое слова R> определенного в src\compiler\spf_nonopt.f
из словаря NON-OPT-WL который неявно открывается словом ' .
смотри src\compiler\spf_translate.f
Однако, INTERPRET вызывает R> определенный в src\compiler\spf_inline.f

Это немного разгружает оптимизатор. Вообще, мне это не очень нравится, т.к.
неявное открытие словаря черевато коллизиями. Однако, вроде никто не нарвался.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 26, 2007 15:48 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
SEE R> я показал просто так, оно не нужно что бы увидеть разницу 1-го и 3-го кода.

_________________
Меня нет, не будет и не было.


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

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


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

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


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

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