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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Реализация словарных статей в СПФ
СообщениеДобавлено: Ср янв 30, 2008 20:00 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Организация словарных статей просматривается на рисунке:

Изображение
Словарная статья в СПФ имеет следующие поля в памяти:
'CFA - адрес начала словарной статьи, его содержимое 4 байта, равные адресу начала исполняемого кода этой статьи, этот адрес называется CFA.
Сразу за 4-мя байтами 'CFA идет байт флагов статьи - его адрес называется FFA.
За байтом флагов идут байты поля имени. Адрес первого байта этого поля называется
NFA. В этом байте находится число, равное числу символов в имени слова. Дальше идут байты ascii-символов имени. За ними начинается поле связи - всего 4 байта. Адрес первого байта поля связи называется LFA. Эти байты равны адресу NFA предыдущей словарной статьи. Порядок байт в словарной статье Little-Endian - в байте памяти с младшим адресом находится младший байт числа. После поля связи идут байты выравнивания (ALIGN-BYTES). Затем байты исполняемого кода, начинающиеся с адреса CFA.

Для просмотра организации словарных статей:
Код:
REQUIRE SEE       lib\ext\disasm.f
: SHOW
HEX CR CR
' >R R@ WordByAddr 2DUP ." NAME " TYPE CR CR
SWAP DUP DUP DUP 6 - DUP  ." 'CFA " 8 .0 ."  ['CFA] " @  8 .0 CR
2- DUP DUP                ."  FFA " 8 .0 ."  b[FFA] " C@ 0x2 BASE ! 8 .0 0x10 BASE ! CR
SWAP 1- DUP               ."  NFA " 8 .0 ."  B[NFA] " C@ 2 .0 CR
-ROT + DUP                ."  LFA " 8 .0
@                         ."   [LFA] " 8 .0 CR
R@                        ."  CFA "    8 .0 CR
C@ &IMMEDIATE AND         ."  IMM "    . CR
CR ." CODE" R> REST
DECIMAL
;
STARTLOG
SHOW _CREATE-CODE
SHOW _CONSTANT-CODE

: idup DUP ; IMMEDIATE

SHOW idup
\ зная устройство словарной статьи например, создадим слово
\  которое обнуляет признак IMMEDIATE у слова немедленного исполнени
: UN-IMM     
' WordByAddr    \ NFA+1 U
DROP            \ NFA+1
2-              \ FFA
DUP C@          \ FFA [FFA]
0xFE AND        \ FFA ~[FFA]
SWAP            \ ~[FFA] FFA
C!
;

UN-IMM idup

SHOW idup

лог
Код:
NAME _CREATE-CODE

'CFA 00552005 ['CFA] 0055201C
FFA 00552009 b[FFA] 00000000
NFA 0055200A B[NFA] 0C
LFA 00552017  [LFA] 00000000
CFA 0055201C
IMM 0

CODE
55201C 8D6DFC           LEA     EBP , FC [EBP]
55201F 894500           MOV     0 [EBP] , EAX
552022 58               POP     EAX
552023 C3               RET     NEAR
END-CODE

NAME _CONSTANT-CODE

'CFA 00552024 ['CFA] 0055203C
FFA 00552028 b[FFA] 00000000
NFA 00552029 B[NFA] 0E
LFA 00552038  [LFA] 0055200A
CFA 0055203C
IMM 0

CODE
55203C 8D6DFC           LEA     EBP , FC [EBP]
55203F 894500           MOV     0 [EBP] , EAX
552042 58               POP     EAX
552043 8B00             MOV     EAX , [EAX]
552045 C3               RET     NEAR
END-CODE

NAME idup

'CFA 00592310 ['CFA] 00592320
FFA 00592314 b[FFA] 00000001
NFA 00592315 B[NFA] 04
LFA 0059231A  [LFA] 0059205B
CFA 00592320
IMM 1

CODE
592320 8945FC           MOV     FC [EBP] , EAX
592323 8D6DFC           LEA     EBP , FC [EBP]
592326 C3               RET     NEAR
END-CODE

NAME idup

'CFA 00592310 ['CFA] 00592320
FFA 00592314 b[FFA] 00000000
NFA 00592315 B[NFA] 04
LFA 0059231A  [LFA] 0059205B
CFA 00592320
IMM 0

CODE
592320 8945FC           MOV     FC [EBP] , EAX
592323 8D6DFC           LEA     EBP , FC [EBP]
592326 C3               RET     NEAR
END-CODE

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


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

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


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

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


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

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