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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Структура словарной статьи в СПФ
СообщениеДобавлено: Пн мар 26, 2007 09:42 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Хотелось бы увидеть подробную структуру словарной статьи в СПФ. Кто имеет информацию, поделитесь, плиз.


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

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Исходники имеют. src/compiler/spf_wordlist.f в районе 96-ой строки. Не очень подробно, но зато из первых уст :)

_________________
http://forth.org.ru/~ygrek


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Подходит, только объясните что обозначают.
\ -5 -- cfa
\ -1 -- flags
\ 0 -- NFA
\ 1 -- name
\ n -- LFA

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


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

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Баранов, глава 2.2 писал(а):
NFA - Name Field Address - адрес поля имени
LFA - Link Field Address - адрес поля связи
CFA - Code Field Address - адрес поля кода
PFA - Parameter Field Address - адрес поля параметров

_________________
http://forth.org.ru/~ygrek


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
Подходит, только объясните что обозначают.
\ -5 -- cfa
\ -1 -- flags
\ 0 -- NFA
\ 1 -- name
\ n -- LFA


Запускаешь spf4.exe

HEX
Ok
' MAX \ получаем адрес поля кода - CFA
Ok ( 54234C )
100 - 200 DUMP \ распечатывам содержимое словаря-кодофайла

Код:
54224C   FF FF 68 22  54 00 00 0D  43 4F 4E 53  54 41 4E 54 яяh"T...CONSTANT
54225C   2D 43 4F 44  45 2F 22 54  00 00 00 00  E8 CF FD FF -CODE/"T....иПэя
54226C   FF 3C 20 54  00 E8 8E FE  FF FF 8C 22  54 00 00 0C я< T.иЋюяяЊ"T...
54227C   54 4F 56 41  4C 55 45 2D  43 4F 44 45  53 22 54 00 TOVALUE-CODES"T.
54228C   E8 AB FD FF  FF 04 21 54  00 E8 6A FE  FF FF B4 22 и«эяя.!T.иjюяяґ"
54229C   54 00 00 0F  55 53 45 52  2D 56 41 4C  55 45 2D 43 T...USER-VALUE-C
5422AC   4F 44 45 7B  22 54 00 00  E8 83 FD FF  FF 9C 20 54 ODE{"T..иѓэяяњ T
5422BC   00 E8 42 FE  FF FF E0 22  54 00 00 11  54 4F 55 53 .иBюяяа"T...TOUS
5422CC   45 52 2D 56  41 4C 55 45  2D 43 4F 44  45 9F 22 54 ER-VALUE-CODEџ"T
5422DC   00 00 00 00  E8 57 FD FF  FF 30 21 54  00 E8 16 FE ....иWэяя0!T.и.ю
5422EC   FF FF FC 22  54 00 00 03  44 55 50 C7  22 54 00 00 яяь"T...DUPЗ"T..
5422FC   8D 6D FC 89  45 00 C3 00  14 23 54 00  00 04 32 44 Ќmь‰E.Г..#T...2D
54230C   55 50 F3 22  54 00 00 00  8B 55 00 89  45 FC 89 55 UPу"T...‹U.‰Eь‰U
54231C   F8 8D 6D F8  C3 00 00 00  34 23 54 00  00 04 44 52 шЌmшГ...4#T...DR
54232C   4F 50 09 23  54 00 00 00  8B 45 00 8D  6D 04 C3 00 OP.#T...‹E.Ќm.Г.
54233C   4C 23 54 00  00 03 4D 41  58 29 23 54  00 00 00 00 L#T...MAX)#T....
54234C   3B 45 00 7C  E3 8D 6D 04  C3 00 00 00  68 23 54 00 ;E.|гЌm.Г...h#T.
54235C   00 03 4D 49  4E 41 23 54  00 00 00 00  3B 45 00 7F ..MINA#T....;E.
54236C   C7 8D 6D 04  C3 00 00 00  84 23 54 00  00 04 55 4D ЗЌm.Г...„#T...UM
54237C   41 58 5D 23  54 00 00 00  3B 45 00 72  AB 8D 6D 04 AX]#T...;E.r«Ќm.
54238C   C3 00 00 00  A0 23 54 00  00 04 55 4D  49 4E 79 23 Г... #T...UMINy#
54239C   54 00 00 00  3B 45 00 77  8F 8D 6D 04  C3 00 00 00 T...;E.wЏЌm.Г...
5423AC   BC 23 54 00  00 05 32 44  52 4F 50 95  23 54 00 00 ј#T...2DROP•#T..
5423BC   8B 45 04 8D  6D 08 C3 00  D4 23 54 00  00 04 53 57 ‹E.Ќm.Г.Ф#T...SW
5423CC   41 50 B1 23  54 00 00 00  8B 55 00 89  45 00 8B C2 AP±#T...‹U.‰E.‹В
5423DC   C3 00 00 00  F0 23 54 00  00 05 32 53  57 41 50 C9 Г...р#T...2SWAPЙ
5423EC   23 54 00 00  8B 4D 00 8B  5D 04 8B 55  08 89 4D 08 #T..‹M.‹].‹U.‰M.
5423FC   89 45 04 89  55 00 8B C3  C3 00 00 00  18 24 54 00 ‰E.‰U.‹ГГ....$T.
54240C   00 04 4F 56  45 52 E5 23  54 00 00 00  8D 6D FC 89 ..OVERе#T...Ќmь‰
54241C   45 00 8B 45  04 C3 00 00  34 24 54 00  00 05 32 4F E.‹E.Г..4$T...2O
54242C   56 45 52 0D  24 54 00 00  8B 55 08 89  45 FC 89 55 VER.$T..‹U.‰Eь‰U
54243C   F8 8B 45 04  8D 6D F8 C3  54 24 54 00  00 03 4E 49 ш‹E.ЌmшГT$T...NI


Возьми слово MAX. Его имя начинается с адреса 542342, в адресе 542341 находится байт-счетчик с числом символов в слове MAX, равным 3. Перед ним в адресе 542340 находится байт флагов этого слова, равный 00.
Перед байтом флагов находятся 4 байта, которые заняты значением адреса кода этого слова, в этих байтах 4C 23 54 00. Как видим адрес записан в форме когда в старшем байте старший байт. Если посмотреть содержимое по этому адресу увидим 3B 45 00 7C E3 8D 6D 04 C3 - это его исполняемый код(можешь проверить по исходнику). Нулевые байты натыканы для выравнивания до 4-х байт. За байтами имени слова идут 4 байта с адресом поля связи - 29 23 54 00. Этот адрес указывает на адрес имени предыдущего слова в словаре. В данном случае это слово DROP(если посмотреть исходники, то видно, что перед MAX в словарь компилирутся именно DROP. Причем адрес поля связи указывает на байт-счетчик этого слова(в поле имени слова байт-счетчик входит). Вообщем наводку ты получил - дальше сам.

_________________
С уважением, chess


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Вобщем получается вот так:
CFA - адрес кода слова
1 байт - байт флагов слова
NFA - счетчик числа символов в слове (1 байт)
n байт - символы в слове
LFA - адрес предыдущего слова в словаре на количество символов в слове
выравнивание 4
code - код слова
выравнивание 4

А где же PFA? Или он не участвует в созданиях слов?

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
А где же PFA? Или он не участвует в созданиях слов?

Для подпрограммного шитого кода (STC) PFA не нужен - в коде слова будут CALL-ы на слова, которые входят в это слово и все.

_________________
С уважением, chess


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
Вобщем получается вот так:
CFA - адрес кода слова
1 байт - байт флагов слова
NFA - счетчик числа символов в слове (1 байт)
n байт - символы в слове
LFA - адрес предыдущего слова в словаре на количество символов в слове
выравнивание 4
code - код слова
выравнивание 4

А где же PFA? Или он не участвует в созданиях слов?


Вообще-то, если быть точным, есть еще адрес, с которого и начинается словарная статья для слова - это адрес в котором находятся байты адреса начала кода исполнения слова (байты адреса CFA).
Этот адрес, где хранятся байты CFA обозначают в СПФ 'CFA. Для слова MAX, например, 'CFA=54233C.
Формат словарной статьи такой:
Код:
'CFA           FFA             NFA         NAME        'LFA                    CFA
[4 байта = CFA][1 байт = flags][1 байт = n][1 2 3 ...n][4 байта = LFA 00 00 00][code 00 00 00]
-5              -1              0           1                         выравн-е       выравн-е

Как назвать адрес где находятся байты LFA? Пусть будет 'LFA. Этот адрес зависит от количества символов в имени слова. Снизу показано смещение в байтах от NFA.

_________________
С уважением, chess


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
а что обозначение wid это адрес хранящий NFA предыдущей словарной статьи из этого же словаря?
Код:
: +SWORD
  HERE LAST !    \ LAST установить на текущую статью (последнее созданное слово)
  HERE 2SWAP
  S",            \ Записать NFA
  SWAP
  DUP @          \ взять 'wid словаря
  ,              \ записать 'wid после NFA
  !       \ NFA в wid
;


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Берем классический Форт-83 и смотрим...

Словарная статья состоит из:
1. NFA Поле имени - думаю, ясно и понятно.
2. LFA Поле связи - указание на предыдущую словарную статью для получения связанного списка, по которому ведется поиск слов.
3. CFA Поле кода - адрес исполнения слова - сюда делать JMP либо прямо, либо косвенно по адресу, хрянящемуся здесь.
4. PFA Поле параметров - собственно сама словарная статья - тут может быть и ассемблерный код и массив данных и просто пустое место. В частности, в словах, определенных через ":", здесь лежит скомпилированная фортовая программа.


В SPF словарная статья чуть более сложна, но принцип тот же.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Последний раз редактировалось WingLion Вт мар 27, 2007 12:18, всего редактировалось 1 раз.

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 12:24 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Pretorian писал(а):
wid


не понятно, что такое WORD ID? - идентификатор слова, если я что-то понимаю.
Если он в SPF какой-то сильно хитрый, то вряд ли помогу, потому что по настоящему в SPF не разбираюсь.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 12:40 
Pretorian писал(а):
Я спрашиваю про обозначение wid, в словарной статье я еще вчера разобрался.


Если не знать то можно ввести поиск слова wid в файлах spf и узнать,
что wid - это идентификатор словаря!!!
и wid @ - дает NFA последнего слова.

P.S. Поиск конкретного слова, часто очень быстро приводит к прояснению ситуации:)


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

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

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


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

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
wid - часто упоминается в стандарте 94года.

Можно считать принадлежностью многих форт систем:)


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

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


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

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


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

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