вот в статье http://www.wasm.ru/article.php?article=OpenGLbyTylerDurden собственно её сегодня и разбирал идёт такой вызов с помощью макроса glcall gluPerspective,90.0,ratio,0.1,100.0 тк я программирую на масме с помощию отладчика переделал на invoke gluPerspective,00000000h ,040568000h ,00000000h , 03FF00000h ,09999999Ah ,03FB99999h ,00000000h,040590000h проблема как выразить например 90.0 как 00000000h ,040568000h? может калькуляторы какие нужны
и ещё в вызовах допустим 1.0 можно какнибудь использовать? а то приходится их сначала в память сохранять
MASM не позволяет напрямую использовать float числа в вызовах. Я сделал макросы: Код (Text): ;--- mv_float EQU mv_ffloat ;- mv_ffloat MACRO x, y mov x, 12345678h ORG $-4 real4 y ENDM ;--- psh_float MACRO x LOCAL tx1, x1 tx1 equ <x> x1 SIZESTR tx1 tx1 SUBSTR tx1, x1, 1 IFIDNI tx1, <d> psh_dfloat x ELSE psh_ffloat x ENDIF ENDM ;--- psh_ffloat MACRO x IF $x_float(x) db 68h ;push real4 x ELSE push PD x ENDIF ENDM ;--- psh_dfloat MACRO x IF $x_float(x) real8 x ORG $-8 db 90h, 90h, 90h, 68h ;nop, nop, nop, push ORG $+4 db 68h ;push real8 x ORG $-4 ELSE nop nop nop nop push PD x[4] push PD x ENDIF ENDM Можно писать типа psh_float 1.0 или psh_float 1.0d ;это уже 64 битное. или mv_float eax, 5.0 Соответственно если хочешь использовать invoke, то надо написать свой макрос типа inv_ogl который делает обычный push/ lea eax, .. push eax/psh_float и call ...
Вот тебе конвертер (из nehe брал) если хочешь без макросов, а вообще лучше пиши на fasm 1981739256__conv.zip
Хочу заметить, что если после такого макроса идёт вызова API функции, то случается трабла, вместо например call gluPerspective компилируется call [00000000h] или вообще мусор вместо адреса. Это всё последствия от ORG $-4, компилятор вычисляет адреса импортируемых функций заранее, а последовательность dq и ORG $-4 сдвигает адрес на 4 байта. поэтому я пользуюсь своим макро Код (Text): pushd MACRO Val:REQ db 0B8h ; mov eax, imm32 dq Val org $-4 dq Val org $-8 db 8Dh, 49h, 00h ; lea ecx, [ecx+0] db 068h ; push imm32 org $+4 ; [mov eax][1][2][3][4][lea ecx][ecx][0][push][5][6][7][8] push eax ENDM