Вещественый числа и стек.

Тема в разделе "WASM.BEGINNERS", создана пользователем OlegA11, 13 мар 2006.

  1. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Каким образом запихнуть вещественное число в стек?

    К примеру, функция gluPerspective требует вещественные числа в качестве аргументов, но в архитектуре IA-32 нет функции помещения вещественного(64bit) числа в стек, так как мне быть?

    Заранее спасибо за памошь.
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Помещать в стек как два 32-ух битных. Например
    Код (Text):
    1. .data
    2.   align 4
    3.   r REAL8 1.1
    4.  
    5. ...
    6.  
    7. foo proc v:REAL8
    8.   fld v
    9.   ret
    10. foo endp
    11.  
    12. ...
    13.   invoke foo, r
    14. ...
    транслируется в
    Код (Text):
    1.               foo proc v:REAL8
    2.    55          *        push   ebp
    3.    8B EC       *        mov    ebp, esp
    4.    DD 45 08         fld v
    5.                 ret
    6.    C9          *        leave  
    7.    C2 0008     *        ret    00008h
    8.               foo endp
    9. ...
    10.    FF 35 00000004 R *       push   dword  ptr r+000000004h
    11.    FF 35 00000000 R *       push   dword  ptr r
    12.    E8 FFFFFFE3     *        call   foo
    13. ...
     
  3. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Спасибо, но хотелось бы это исполнить в качестве макроса.

    К пимеру так:

    pushflat 1.1



    Но вот я никак не могу разбраться с препроцессором masm'а...

    Т.е как расформировать QWORD на 2 DWORD'а посредствам препроцессорной обработки?

    Или нужно как то предопределить как структуру QWORD?

    И вообще, QWORD в данном случае - это правильно или нет?
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    OlegA11

    хотелось бы это исполнить в качестве макроса

    Afaik макросом непосредственный операнд не получится.



    И вообще, QWORD в данном случае - это правильно или нет?

    REAL8 == DQ == 64 бита.

    Возьми любой исходник, использующий opengl, на Си, сгенерируй асм-листинг и посмотри.
     
  5. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Вобщем получился вот такй макрос:

    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)

    Как это можно обойти?
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    OlegA11
    Код (Text):
    1. rpush MACRO r
    2.   local val1  ;; !!!
    3.   .data
    4.     val1 dq r
    5.   .code
    6.     fld QWORD ptr[val1]
    7.     sub esp,8
    8.     fstp QWORD ptr[esp]
    9. ENDM
     
  7. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Спасибки:) Буду пробовать...