· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› ООП. Функция-член на АСМ.

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>

Посл.отвђт Сообщенiе


Дата: Сен 23, 2003 21:58:21

Edmond
Sorry, в callback это дело тоже может вызвать исключение. Просто в моём примере исключение почемуто не происходит, но вообще EDI нужно сохранять и в callback, и в тредах. Получается, что главная ф-ция треда - это тоже callback?


Дата: Сен 23, 2003 22:43:36

boozook
Т.е. как я понял, отказаться от соглашений в C и передавать this не через стек, а в регистре ...
Микрософт уже давно от них отказался. Хотя this и помещается в стек но методы предпологают что this им передан через регистр ecx и не загружают его из стека. И такие штуки очень раздражают когда пытаешся сделать ассемблерную вставку.


Дата: Сен 24, 2003 00:19:45

Black_mirror
Хм.. Видимо библиотеки выпускаются по старому, coinvoke же так и работает без копии в ecx...


Дата: Сен 24, 2003 12:23:20

Edmond
Вот она же на ASM

my_function proc

push ebp
mov ebp,esp

this EQU dword ptr [ebp+8] ;; Указатель на структуру
;; класса
param1 EQU dword ptr [ebp+12]
param2 EQU dword ptr [ebp+16]


my_function endp


т.е. я так понял нужно делать указатьль на структуру и потом уже до переменных private: i или j добираться как смещение? т.е. если у нас
this EQU dword ptr [ebp+8]
то i= THIS+4, а j= THIS+8!!! Я так понял?


Дата: Сен 24, 2003 13:42:20

Quantum

useEDI PROC
inc edi
ret
useEDI ENDP


Всё!!! РРРРРРРРРРРРРРРРРРРР
Объясняю подробно.

1. Если у вас есть метод класса.
2. И вы договорились, что метод принимает this = ebx
(У меня кстати есть такое как EXTCALL)
3. То вы можете ВСЕГДА вызывать этот объект ТАКИМ ОБРАЗОМ.

Вопросы?____

Понятно и ЯЖУ, что если Ваша функция вызвана по STDCALL то она должна сохранить ebx....
А что здесь такого?

Но ведь функция-метод не должна этого делать. (или должна в отличии от конвенции).

Что здесь было сложно/непонятно?


Дата: Сен 24, 2003 13:47:31

т.е. я так понял нужно делать указатьль на структуру и потом уже до переменных private: i или j добираться как смещение? т.е. если у нас
this EQU dword ptr [ebp+8]
то i= THIS+4, а j= THIS+8!!! Я так понял?


Ну конечно.
(Всё, кидаю всё.. и пишу статью о ООП.. Ужассс!!!!
Это же просто ужасс. :))))


Дата: Сен 24, 2003 14:13:28

Edmond
в какой книге про это все написано!!!??? Интересно тоже если будет КЛАСС на С написан а ФУНКЦИЯ ЧЛЕН в отдельном файле на асме!!!! Это очень интересно!!


Дата: Сен 24, 2003 14:33:14

emergenter
в какой книге про это все написано!!!???

В моей :)))) видимо :)))
Это написано в голове.. когда понимаешь что такое ООП.

Это очень интересно!!

Да будет СВЕТ!!!


Дата: Сен 24, 2003 15:03:12

БЛИН!!! ХОЧУ ЧИТАТЬ ТВОЮ КНИГУ КАК МОЖНО СКОРЕЕ!!! Когда статья появится???


Дата: Сен 24, 2003 15:12:40

Edmond
Если можешь растолкую подробно!!! Я хочу врубиться в эту тему!!! Пожалуйста


Дата: Сен 24, 2003 15:23:13

emergenter
Эхх, работу что ли бросить? :))))


Дата: Сен 24, 2003 15:31:38

emergenter
Если ты хочешь разобратся сам, то посмотри топик, в котором я оставил объяснение сути ООП.
Он тут где-то.
Там мол пример с FAT


Дата: Сен 24, 2003 15:41:13


Дата: Сен 24, 2003 21:21:50

Edmond
Надеюсь, следующий пример прояснит ситуацию:
  • Нахожусь я в WndProc, DlgProc, в треде (нужное подчеркнуть).
  • Вызываю myObject.myMethod

На асме это будет выглядеть примерно так:
   SET_THIS myObject, myClass
   METHOD myMethod1, args
   METHOD myMethod2, args
   METHOD myMethod3, args
   RELEASE_THIS
Что делают макросы?
   push ebx ; SET_THIS
   mov ebx,myObject
   assume ebx:PTR myClass
   invoke ebx.myMethod1,ebx,args
   invoke ebx.myMethod2,ebx,args
   invoke ebx.myMethod3,ebx,args
   assume ebx:nothing
   pop ebx ; RELEASE_THIS
Примерно так работает OOP by NaN.

Но ведь функция-метод не должна этого делать.
Конечно нет. Но это должен знать макрос, который вызывает метод.

Создаётся впечатление, что мы с вами зря спорим, защищая одну и туже идею OOP. Кстати, я в этой ветке ничего не спрашивал про OOP, а наоборот пытался ответить. С callback я уже разобрался экспериментальным путём. Кто-то кого-то неправильно понял...


Дата: Сен 24, 2003 21:45:22

Quantum
'Получается, что главная ф-ция треда - это тоже callback?'
---
Попал в самую точку!
---
Любая функция адрес которой передаётся к Win32. (наважно как, через WNDCLASS или через параметр(ы)) должна сохранять EBX, ESI, EDI - В точности как это делает компилятор С для Win32. Функция треда - это один из таких случаев.

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063