Fasm. Мистика

Тема в разделе "WASM.ASSEMBLER", создана пользователем Loger, 21 июл 2005.

  1. Loger

    Loger New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2003
    Сообщения:
    71
    Адрес:
    Minsk
    Если запускать прогу из фасма по F9, то результат получается совершенно не такой, как ожидается. Если же скпомпилить, а потом запустить из эксплорера, то всё ок

    UPD: Сначала заатачил не тот файл. Поправил.
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Давай скриншот чтоли, я разницы не вижу



    14197454024290336768

    14197454024290336768
     
  3. Loger

    Loger New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2003
    Сообщения:
    71
    Адрес:
    Minsk
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    SSE2 нету, скриншот был бы кстати :)
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    fasm 1.56, Win 98SE - разницы никакой

    output.bmp - "шахматная доска" 128x128
     
  6. Loger

    Loger New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2003
    Сообщения:
    71
    Адрес:
    Minsk
    Fasm 1.60, WinXP SP2

    При запуске из эксплорера получается шахматная доска (как и ожидается), а при запуске из фасма получается то, что приатачено

    [​IMG] _1992212345__output.gif
     
  7. leo

    leo Active Member

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

    Может дело в cmpeqpd ?

    На каком основании ты считаешь, что при запуске проги в xmm должны быть валидные вещественные числа ? Возможно при запуске из фасма в некоторых регистрах попадаются инвалидные NaN'ы и результат cmpeqpd = false.

    Лучше все таки делать более надежную инициализацию регистров без сомнительных допущений об их начальном состоянии ;)
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Ну ес-но все дело в cmpeqpd и неинициализированных xmm.

    Запуск из fasm 1.56 под XP SP2 тоже приводит к "неверным" результатам - только вертикальные полосы смещены. А потому что xmm не занулены и часть из них содержит NaN'ы.

    Если сделать явную инициализацию типа
    Код (Text):
    1.     pxor xmm0,xmm0
    2.     cmpeqpd xmm0,xmm0
    3.     por xmm1,xmm0
    4.     ...
    5.     por xmm7,xmm0
    то все работает правильно, что из фасма, что из эксплорера



    PS: еще одно подтверждение того, где нужно искать причины "особенностней" XP ;))
     
  9. Loger

    Loger New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2003
    Сообщения:
    71
    Адрес:
    Minsk
    leo

    Неужели NaN!=NaN ?

    К тому же получается, что изначальное значение xmm-регистров в создаваемом процессе при запуске из Fasm и экслорера разное
     
  10. leo

    leo Active Member

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

    В случае если хотя бы один из операндов NaN, то cmpeqpd выдает false = 0 (см.IA-32 volume 2).

    При запуске из эксплорера все xmm заботливо сброшены в 0, а вот из фасма почему то установлены в какие-то значения, часть из которых = xFF..FFh = NaN. Видимо это прибамбасы винды, но в любом случае лучше инициализировать регистры явным образом