Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2008, 17:48   #1
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию DirectX на masm32

Кто нибудь писал DirectX - программы/игры на masm32 ?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 02.01.2008, 06:13   #2
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

Сходи на www.wasm.ru. Там есть уроки Iczelion'а, там об этом подробно написано.
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 07.02.2008, 22:35   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

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

Примечание:
Все вызовы методов интерфейсов организованы ч/з макрос vf, соответственно инклюды с описанием интнрфейсов заточены под этот макрос.

;*** vf macro: use "invoke vf(pInterface,Interface,Function)<, arguments>
Вложения
Тип файла: rar start_DX.rar (375.1 Кб, 79 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 10.03.2008, 07:49   #4
zaqer
Новичок
Джуниор
 
Регистрация: 09.03.2008
Сообщений: 2
По умолчанию

Если кто объяснит как определить смещение в vtbl нужной функции.
Есть ли библиотека типов для DirectX 9?
Как использовать DirectX9 в masm32?
Подскажите плиз.
zaqer вне форума Ответить с цитированием
Старый 10.03.2008, 23:05   #5
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

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

Начнём:

Вот кусок программы -
;# Инициализация видеосистемы
invoke SetWindowPos, [newhwnd], HWND_TOP, 50, 50, \
[Size_Window_X], [Size_Window_Y], SWP_SHOWWINDOW
mov eax, 0
invoke Direct3DCreate8, D3D_SDK_VERSION
mov FD3D, eax

mov [d3ddm.Width2], 0

invoke vf(FD3D, IDirect3D8, GetAdapterDisplayMode), D3DADAPTER_DEFAULT, addr d3ddm
cmp eax, S_OK
jne Init_1
Здесь я специально оставил вызов API функции SetWindowPos и вызов метода GetAdapterDisplayMode
интерфейса IDirect3D8 (базовый интерфейс графической части DirectX)
А вот как выглядит дамп (dumppe.exe -disasm proga.exe >proga.dump) этого куска после компиляции-
00404B75 E840180000 call fn_004063BA
00404B7A B800000000 mov eax,0
00404B7F 6A78 push 78h
00404B81 E852180000 call fn_004063D8
00404B86 A348944000 mov [409448h],eax

00404B9D C7053497400000000000 mov dword ptr [409734h],0

00404BA7 8B1548944000 mov edx,[409448h]
00404BAD 8B12 mov edx,[edx]
00404BAF 6834974000 push 409734h
00404BB4 6A00 push 0
00404BB6 FF3548944000 push dword ptr [409448h]
00404BBC FF5220 call dword ptr [edx+20h]
00404BBF 83F800 cmp eax,0
00404BC2 0F85E8030000 jne loc_00404FB0

call fn_004063BA - это вызов API функции SetWindowPos
"При компоновке все вызовы API-функций преобразуются к вызову типа CALL адрес1.
При этом адрес, так же как и вызов, находится в секции кода (.text).
По адресу же стоит команда jmp dword ptr [Адрес2], где [Адрес2] находится в
секции .idata (импорта) и содержит двойное слово - адрес фуекции в динамической
библиотеке" - цитата "Ассемблер для WINDOWS" В. Пирогов.

Аналогично происходит вызов функции Direct3DCreate8:
00404B7F 6A78 push 78h - передача параметра ч\з стек
00404B81 E852180000 call fn_004063D8 - собственно вызов функции
А вот дальше интересно, функция Direct3DCreate8 возвращает указатель на базовый интерфейс,
я так понимаю что это есть указатель на таблицу адресов функций этого интерфейса.
Т.е. я дальше вызываю метод GetAdapterDisplayMode - это девятый по счёту метод интерфейса IDirect3D8,
соответственно его адрес будет находится по смещению 8*4байта = 32 =20h от базового адреса

call dword ptr [edx+20h] - это вызов метода GetAdapterDisplayMode.

Отсюда вытекает несколько выводов :
1 - очень важен порядок перечисления методов в описании интерфейса,
попробуйте поменять в описании две функции местами - перестанут работать.
2 - вроде адреса этих функций получаются динамически, т.е. их нет в vtbl ???

Блин, прочитал всю эту ересь, самому страшно стало.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно отлаживать в masm32? Minimus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 12.08.2008 10:54
masm32 v9. не линкует программу Alcash Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 23.06.2008 09:57
Random на MASM32 Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 02.05.2008 16:00
обновление в блоге - MASM32 и DELPHI - битва за размер… Pblog Обсуждение статей 0 19.09.2007 14:40