Преобразование чисел

Тема в разделе "WASM.ASSEMBLER", создана пользователем aaleksander, 16 сен 2004.

  1. aaleksander

    aaleksander New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    11
    Научите, как преобразовать целое число в вещественное.

    Такой вариант не прокатывает, их стека возвразается целое число:

    fild [x]

    fstp [x]



    Как правильно делается?

    Компилятор - FASM.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    aaleksander

    Конкретно по FASM сказать не могу. Но общий совет - не полагаться на компилятор и явно указывать размер операндов:

    fild dword ptr [offset i] ;dword

    fst dword ptr [offset f] ;float\single 4 байта

    fst qword ptr [offset d] ;double 8 байт

    fstp tbyte ptr [offset t] ;extended 10 байт

    Это должно работать всегда и везде.



    А почему у тебя возвращается целое число:

    1) либо "умный" компилятор заменяет fstp на fistp, если у тебя x определено как целое (хотя должен бы выдать Error)

    2) либо fstp выдает все-таки double или extended, первый dword которых ты воспринимаешь как целое; если это так, то попробуй отрицательное число - результат должен измениться.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Вот код который компилируется FASM'ом и работает без проблем:
    Код (Text):
    1.   fild  [foo]
    2.   fstp  [foo]
    3.  
    4.   foo   dd -2




    А вот так можно сразу загружать вещественные числа:
    Код (Text):
    1.   fld  [foo]
    2.  
    3.   foo   dd -2.0