masm:проблемма с числами с плавающей запятой

Тема в разделе "WASM.BEGINNERS", создана пользователем uckuht, 20 июн 2010.

  1. uckuht

    uckuht New Member

    Публикаций:
    0
    Регистрация:
    11 май 2010
    Сообщения:
    8
    Задача у меня такая:
    Нужно разложить вещественное число на целую и дробную часть, и поместить в eax, в ah- целую в al- дробную.
    Нашел описание вещественных чисел, но что-то я не пойму как это в двоичной системе работает.
    В дебагере число 1.0f - F380 0000 (1111 0011 1000 0000 0000 0000 0000 0000), 2.0f - 4000 0000, 3.0f - 4040 0000 ,
    1.1f 3F8CCCCD. Где мантиса? Где знак и степень? И еще почему команда fild вместо -1.0 в регистре сопроцессора
    показывает 1065353216.0000000000 а fld правильное 1.0. Отладчик ollyDbg10.
    Извините за нубство.
    Спасибо заранее.
     
  2. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Там, где им и положено быть. 1.0f := 0x3F800000 == /*знак*/ 0<<31 | (/*экспонента*/ 0+/*смещение*/ 127)<<23 | /*мантисса без лидирующей единицы*/ 0

    Потому что fild, как и сказано в мурзилке, грузит целое число со знаком. 0x3F800000 == 1065353216.