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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: вызов ф-ций из DLL
СообщениеДобавлено: Вс мар 04, 2007 20:26 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Код:
CODE api-call ( addr --> x )
                        PUSH EDI
                        XCHG ESP, EBP
                        CALL EAX
                        XCHG ESP, EBP
                        POP EDI
                    RET
             END-CODE


а это родной спф-овский
Код:
CODE API-CALL ( ... extern-addr --> x )
              PUSH EDI         \ EDI сохраняем
               PUSH EBP        \ SUBTOP сохраняем
                SUB ESP, # 60  \ выделяем место на стеке возвратов
                MOV EDI, ESP
                MOV ESI, EBP
                MOV ECX, # 15
                CLD REP MOVS DWORD
                MOV EBP, ESP   \ EBP и ESP указывают в одно место
               CALL EAX
                MOV EBX, EBP
                SUB EBX, ESP   \ узнали, сколько параметров сброшено
                MOV ESP, EBP
                ADD ESP, # 60
               POP EBP
               SUB EBP, EBX    \ удаление использованных параметров
              POP EDI
            RET
         END-CODE



мой вариант у меня работает 8) и по-идее он значительно быстрее


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
А зачем выделялся блок памяти с копированием параметров?
Почему сделали так сложно, какая была причина?
Откуда взяли такое решение - сами придумали или срисовали у кого-то?

_________________
With best wishes, in4.


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

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

на это несколько причин. Главная из них-это двухстековость форта.

in4 писал(а):
Почему сделали так сложно, какая была причина?

потому что решили стелать более простой интерфейс ( то есть решили пожертвовать эффктивностью за счет понятности) По-уму нужно для каждой ф-ции указывать необходимое ей кол-во параметров и только их копировать.

in4 писал(а):
Откуда взяли такое решение - сами придумали или срисовали у кого-то?

Решение к сожалению не правильное - оно работает только на ограниченном кол-ве ф-ций и то не очень понятно почему - надо разбираться. Просто я обрадовался, что заработал один из вариантов 8) но рано я обрадовался.
Вся проблема в том, что нужно куда-то на время сохранить содержимое всего одного регистра 8( и это место очень сложно найти (придумать) и именно из-за этого приходится устраивать пляски с бубном 8(


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
mOleg писал(а):
Решение к сожалению не правильное - оно работает только на ограниченном кол-ве ф-ций

Речь идет о том решении, что ты предложил, или о том, как это реализовано в SPF?

_________________
With best wishes, in4.


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

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


конечно о моем предложении 8[
но и родной не блещет. По крайней мере в родном не стоит вызывать ф-ции с более чем 15 параметрами


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

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

Ввести под этот регистр глобальную переменную(user) да и дело с концом.

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


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

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

нельзя из-за многопоточности.


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

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

Код:
CODE api-call ( addr --> x )
              PUSH EDI
              MOV EBX, -4096 [EBP]      \ куда-то в стек возвратов
              PUSH EBX
              XCHG ESP, EBP
              MOV -4096 [ESP], EBP
              MOV EBP, ESP
                CALL EAX                \ после вызова ESP = TOP
              MOV EDI, EBP
              MOV EBP, ESP
              MOV ESP, -4096 [EDI]
              POP EBX
              MOV -4096 [EDI], EBX
              POP EDI
            RET
        END-CODE


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

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


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

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


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

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