Каким образом запихнуть вещественное число в стек? К примеру, функция gluPerspective требует вещественные числа в качестве аргументов, но в архитектуре IA-32 нет функции помещения вещественного(64bit) числа в стек, так как мне быть? Заранее спасибо за памошь.
Помещать в стек как два 32-ух битных. Например Код (Text): .data align 4 r REAL8 1.1 ... foo proc v:REAL8 fld v ret foo endp ... invoke foo, r ... транслируется в Код (Text): foo proc v:REAL8 55 * push ebp 8B EC * mov ebp, esp DD 45 08 fld v ret C9 * leave C2 0008 * ret 00008h foo endp ... FF 35 00000004 R * push dword ptr r+000000004h FF 35 00000000 R * push dword ptr r E8 FFFFFFE3 * call foo ...
Спасибо, но хотелось бы это исполнить в качестве макроса. К пимеру так: pushflat 1.1 Но вот я никак не могу разбраться с препроцессором masm'а... Т.е как расформировать QWORD на 2 DWORD'а посредствам препроцессорной обработки? Или нужно как то предопределить как структуру QWORD? И вообще, QWORD в данном случае - это правильно или нет?
OlegA11 хотелось бы это исполнить в качестве макроса Afaik макросом непосредственный операнд не получится. И вообще, QWORD в данном случае - это правильно или нет? REAL8 == DQ == 64 бита. Возьми любой исходник, использующий opengl, на Си, сгенерируй асм-листинг и посмотри.
Вобщем получился вот такй макрос: rpush MACRO r .data val1 dq r .code fld QWORD ptr[val1] sub esp,8 fstp QWORD ptr[esp] EndM Вызываю так, rpush 10.11f Но при повтороном вызыве, т.е дальше по коду, масм ругается, говорит что такой символ уже есть(symbol redefinition : val1) Как это можно обойти?
OlegA11 Код (Text): rpush MACRO r local val1 ;; !!! .data val1 dq r .code fld QWORD ptr[val1] sub esp,8 fstp QWORD ptr[esp] ENDM