трабла с макросом в MASM

Тема в разделе "WASM.BEGINNERS", создана пользователем dimonn, 9 янв 2007.

  1. dimonn

    dimonn New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2006
    Сообщения:
    38
    Адрес:
    Sim-City
    Короче дело вот в чем. Работаю я, занчит, с функциями которые принимают в качестве параметров real32 и real64 значения, и в процессе меня просто "убило", то что масм абсолютно не дружит с floating point форматом чисел (я имею в виду непосредственные операнды-immediate), т. е. такие абсолютно простые вещи как например push 1.0 он не хавает - компилер пишет что-то вроде real or BCD not allowed, хотя определять real в памяти масм умеет (DD 1.0 или DQ 1.0 все ок числа - float), поэтому приходится извращатся, писать макросы для загонки real immediate в стек
    Если с real32 ограничилось все простеньким макро типа:
    pushr32imm MACRO val
    DB 68h
    DD val
    ENDM
    то с real64 у меня че-то ничего невыходит :dntknw: перечитал несколько манов все равно ничего путного не нашел. Знаю как сделать на fasme, но нужно именно masm.
    Для real64 переменных работает такой макро:
    pushr64m MACRO var
    push DWORD PTR var+4
    push DWORD PTR var
    ENDM

    С этого начал. В фасме есть такая фича как виртуальные вычисления для макро,
    а в масме? Если кто знает как сделать, наставьте на путь истинный :)
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Как один из вариантов:
    Код (Text):
    1. pushdl  macro   double1
    2.  
    3.         fld     qword ptr [&double1&]
    4.         sub     esp,8
    5.         fstp    qword ptr [esp]
    6.  
    7. endm
     
  3. dimonn

    dimonn New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2006
    Сообщения:
    38
    Адрес:
    Sim-City
    Я не про переменные в памяти говорил а про непосредственные значения, т.е. чтобы макрос работал так: например pushdl 1.0 сгенерил код
    Код (Text):
    1. push 3ff00000
    2. push 00000000
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А, с непосредственными вроде никак, разве что генерировать по стандарту чисел с плавающей запятой.