получить значение регистра MMX

Тема в разделе "WASM.ASSEMBLER", создана пользователем maestro-ant, 4 мар 2007.

  1. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    В регистре mm0 к примеру находится 1.5 нужно получить значение 1 в eax а после запятой в ecx
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    MMX - это целочисленные регистры.
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    ну 3д нау об этом тоже знает;)
     
  4. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    ..мне надо работасть с дробями. Все получается, но немогу вывести результат с этих регистров.. Может как то округлить до целого, потом уже вывести?
     
  5. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    ну они же имеют размеh - double (64бит), я думал значит и хранить могут числа с запятой.
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Как я уже сказал, 3dnow использует mmx для вычислений с плавающей точкой. Вопрос в другом - оно нужно? ибо есть ССЕ. И ещё - плавающая или фиксированая точка нужна, если уж на то пошло.
     
  7. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    Может всетаки FPU заюзать?
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Заваисит от задачи. Если не сложно - можно реализовать все варианты и сравнить. Начинать, думаю, с FPU, затем SSE для scalar значений, потом уж о параллелизме мона задуматься.
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    maestro-ant
    Скажи толком, что нужно. Если преобразовать float или double в строку, то можно 1) юзать масмовскую FloatToStr, надыбать другие готовые реализации или написать свою на основе fbstp и преобразования полученного BCD-числа в строку, 2) выделить на FPU или SSE целую и дробную части числа (с заданным числом десятич.знаков) и затем юзать wsprintf или ltoa
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    3DNow! использует XMM регистры как и SSE.
    Другое дело что физически это одни и те же регистры совмещённые ещё и с FPU.
    Но формат хранения данных в них другой.
    При помощи MMX вещественные числа обрабатывать нельзя.
     
  11. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Точно?
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    насколько я помню, MMX оно использует.. а не XMM.
    MMX отображаются на FPU.
    А XMM сами по себе
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Мда, удержался я от детского соблазна поправить IceStudent'а и видать зря ;)
    Инструкции PF... из набора 3DNow работают с MMX как с двумя single prec. флоатами. Вот только кто сейчас использует эти и другие 3DNow, не вошедшие в SSE\SSE2 ;)
     
  14. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Не не точно :)
    Ошибся.
    XMM действительно отдельные регистры...
    У меня тут вопрос по ходу возник.
    Выходит при переключении задач ОС должна состояние SSE сохранять.
    С этим ясно - есть FXSAVE/FXRSTOR.
    Вот тут http://www.tommesani.com/SSEStateManagement.html прочитал следующее:
    Вопрос в том, что значит сохраняет состояние MMX?
    Расширений MMX появившихся с SSE, или всё состояние?
    Т.е. вопрос в том, что если для сохранения контекста использовать fxsave/fxrstor надо ли кроме этого для сохранения контекста MMX/FPU использовать fsave/frstor или fxsave/fxrstor будет достаточно?
     
  15. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    ..это я понимаю, а как это сделать? дайте линк гдеб почитать или примерчик..
     
  16. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    cppasm
    Да. В IA-32 instruction set все черным по белому расписано с наглядной таблицей memory lаyout ;)

    maestro-ant
    Если общее число знаков целой и дробной части не превышает 8-9, то можно не возиться с разложением числа на целую и дробные части, а сразу использовать wsprintf со вставкой десятичной точки на нужную позицию. Примерно так
    Код (Text):
    1. tenpows dd 1.0,1E1,1E2,1E3,1E4,1E5,1E6,1E7,1E8
    2. fmt db '%.0d',0
    3. ix dd 0
    4.   ;X - число, digs - число знаков после запятой, szStr - ук-ль на вых.строку
    5.   mov ecx,[digs]
    6.   xor eax,eax
    7.   mov [szStr],al
    8.   cmp ecx,8
    9.   jg error
    10.   fld [X]
    11.   fmul [tenpows+ecx*4]  ;умножаем на степень 10-ти в соотв. с digs
    12.   fistp [ix]                    ;сохраняем с округлением до целого
    13.   cmp [ix],80000000h     ;контроль переполнения  
    14.   je error
    15.   add ecx,'1'                 ;задаем мин.число знаков в формат fmt = digs+1
    16.   mov [fmt+2],cl
    17.   invoke wsprintf,szStr,fmt,[ix]
    18.   add esp,3*4
    19.   lea edx,[eax+szStr]
    20.   mov ecx,[digs]
    21.   inc eax
    22.   push eax                   ;сохраняем для return = длина строки
    23. @@:
    24.   mov al,[edx]
    25.   mov [edx+1],al
    26.   dec edx
    27.   dec ecx
    28.   jge @B
    29.   mov byte[edx+1],'.'
    30.   pop eax
    31. error:
     
  17. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Да я и не сомневался :)
    Просто думал быстро кто-нибудь ответит чтоб в мануалы не лезть...
    У меня мануал от pii - там fxsave нету и в помине :)
    Счас буду новые качать.