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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 93 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7
Автор Сообщение
 Заголовок сообщения: Re: Локальные слова
СообщениеДобавлено: Пт окт 22, 2010 09:51 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
Мне трудно разобраться с твоей программой, но здесь я вижу присвоение
глобальным ячейкам. (Почему-то оптимизатор не сработал.)


Я не могу назвать причину - времени, серьезно разбираться, нет.
... может оптимизатор не любит перескоков указателя компиляции назад по памяти?

вот Михаил тебе для понимания того, как формируется код локально-именованных слов
( и в том числе локально-именованных переменных - на самом деле они конечно глобальны,
но из-за локального их именования доступа к ним как к глобальным переменным - нет)

Код:
\ диагональ треугольника по катетам
: diag ( a b -- d)
  b! a!
  ^2( DUP * )                    \ квадрат числа
  sqrt( $ -4 @P=A   $ -4 0=@P    \ квадр. корень числа
        0SQRT
        $ -4 @P=0-  $ -4 A=@P )
  a ^2 b ^2 + sqrt ;

STARTLOG

lcode DIS
SEE diag

123 456 diag

лог
Код:
5AF574 8945FC           MOV     FC [EBP] , EAX               \ параметр b положить на стек из ячейки памяти
5AF577 A1ACF55B00       MOV     EAX , 5BF5AC  ( ldata+5  )
5AF57C 8D6DFC           LEA     EBP , FC [EBP]
5AF57F C3               RET     NEAR
5AF580 8905ACF55B00     MOV     5BF5AC  ( ldata+5  ) , EAX   \ параметр b снять со стека и положить в ячейку
5AF586 8B4500           MOV     EAX , 0 [EBP]
5AF589 8D6D04           LEA     EBP , 4 [EBP]
5AF58C C3               RET     NEAR
5AF58D 8945FC           MOV     FC [EBP] , EAX               \ параметр a положить на стек из ячейки памяти
5AF590 A1B0F55B00       MOV     EAX , 5BF5B0  ( ldata+9  )
5AF595 8D6DFC           LEA     EBP , FC [EBP]
5AF598 C3               RET     NEAR
5AF599 8905B0F55B00     MOV     5BF5B0  ( ldata+9  ) , EAX   \ параметр a снять со стека и положить в ячейку
5AF59F 8B4500           MOV     EAX , 0 [EBP]
5AF5A2 8D6D04           LEA     EBP , 4 [EBP]
5AF5A5 C3               RET     NEAR
5AF5A6 F7E8             IMUL    EAX                          \ квадрат числа
5AF5A8 C3               RET     NEAR
5AF5A9 8945FC           MOV     FC [EBP] , EAX               \ кв. корень числа
5AF5AC DB45FC           FILD    DWORD FC [EBP]
5AF5AF D9FA             FSQRT
5AF5B1 DB5DFC           FISTP   DWORD FC [EBP]
5AF5B4 8B45FC           MOV     EAX , FC [EBP]
5AF5B7 C3               RET     NEAR

CODE diag
5D0283 8905ACF55B00     MOV     5BF5AC  ( ldata+5  ) , EAX
5D0289 8B4500           MOV     EAX , 0 [EBP]
5D028C 8D6D04           LEA     EBP , 4 [EBP]
5D028F 8905B0F55B00     MOV     5BF5B0  ( ldata+9  ) , EAX
5D0295 8B4500           MOV     EAX , 0 [EBP]
5D0298 8D6D04           LEA     EBP , 4 [EBP]
5D029B 8945FC           MOV     FC [EBP] , EAX
5D029E A1B0F55B00       MOV     EAX , 5BF5B0  ( ldata+9  )
5D02A3 8D6DFC           LEA     EBP , FC [EBP]
5D02A6 E8FBF2FDFF       CALL    5AF5A6  ( lcode+37  )
5D02AB 8945FC           MOV     FC [EBP] , EAX
5D02B3 8D6DFC           LEA     EBP , FC [EBP]
5D02B6 E8EBF2FDFF       CALL    5AF5A6  ( lcode+37  )
5D02BB 034500           ADD     EAX , 0 [EBP]
5D02BE 8D6D04           LEA     EBP , 4 [EBP]
5D02C1 E8E3F2FDFF       CALL    5AF5A9  ( lcode+3A  )
5D02C6 C3               RET     NEAR
END-CODE
( 68 bytes, 18 instructions )

Ok ( 472 )

ps.
1. В область lcode компилируется код локально-именованных слов и переменных,
инлайнер часть этого кода тащит в словарь, часть кода идет в виде CALL addr.
2. Данные лок-именованных переменных лежат в области ldata,
указатель ldhere по мере введения таких переменных ползет в сторону больших адресов.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные слова
СообщениеДобавлено: Пн окт 25, 2010 15:06 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
chess писал(а):
Более быстрая и компактная реализация локально-именованных слов и
и локально-именованных статических переменных и массивов за счет выноса их кода и данных
в другие области памяти

[code]HERE IMAGE-BASE - 0x100000 + TO IMAGE-SIZE \ увеличим размер образа .....
]


Может не в тему, сохранил образ системы с локальными словами в exe-шнике, антивирус Avira страшно заругался. Отключил строчку с увеличением образа - не ругается. На сколько важно увеличивать размер образа?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные слова
СообщениеДобавлено: Пн окт 25, 2010 16:13 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
F-MAP писал(а):
Может не в тему, сохранил образ системы с локальными словами в exe-шнике, антивирус Avira страшно заругался. Отключил строчку с увеличением образа - не ругается. На сколько важно увеличивать размер образа?

При тех размерах, которые у меня отведены под код слов с локальными именами и под данные, IMAGE-SIZE можно не увеличивать.
А если все-таки понадобится, то можно пересобрать spf4.exe с увеличенным IMAGE-SIZE.
пс.
У меня антивирусник AVG - не ругается.

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


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

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


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

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


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

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