Компилятор не понимает MMX

Тема в разделе "WASM.BEGINNERS", создана пользователем cpp_and_wasm, 30 авг 2006.

  1. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Я вот собирался написать программу на асме использующую регистры MMX. Скачал MASM_v90 от hutch'a ( http://www.masm32.com/masmdl.htm ) да и решил проверить работает ли MMX. Но, увы, нифига ничего не получилось! Компилятор выдаёт ошибку:
    MMX.asm(17) : error A2006: undefined symbol : mm0
    А вот содержание моего файла MMX.asm, который упорно не хочет компилироваться:
    Код (Text):
    1. .686
    2. .model flat, stdcall
    3. .xmm
    4. .mmx
    5. option casemap:none
    6.  
    7. .code
    8. start:
    9.  
    10.     emms
    11.     xor eax,eax
    12.     movq mm0,eax
    13.  
    14. end start
    Ещё одна непонятность: при компиляции файла асм (это делалось в редакторе RadAsm, который, как все знают использует MASM32) там была инструкция CVTSS2SI r32,m128, но билд проекта прошёл без ошибок.
    Самое интересное, что в MVC++ 6.0 директива movq mm0, eax работает. Стоит у меня P3 и естественно MMX и SSE поддерживает.
    Вот версия компилятора от hutch'а (MASM9.0): Microsoft (R) Macro Assembler Version 6.14.8444
    ПОДСКАЖИТЕ КАК РЕШИТЬ ЭТУ ПРОБЛЕМУ! (извините, что кричу - я глуховат)
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    emms
    Нужно ставить в канце процедуря для того чтобы сбросить рехистры MMX и перевести в нормальное состояние, нужно что бы процесор мог работать c числами с плавующий точкой на сопроцессоре.

    movq mm0,eax - неправыельная команда.
    -----------------------
    MOVQ mm, mm/m64
    MOVQ mm/m64, mm
    MOVQ xmm1, xmm2/m64
    MOVQ xmm2/m64, xmm1
    ------------------------
    MOVD mm, r/m32
    MOVD r/m32, mm
    MOVD xmm, r/m32
    MOVD r/m32, xmm
     
  3. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Может ты считаешь её неправильной, но MVC++ 6.0 считает её БЕЗОШИБОЧНОЙ. Да и не в этом дело!
    Даже на команду movq mm0, mm1 компилятор MASM32 выдаёт:
    error A2006: undefined symbol : mm0
    Вот сырец:
    Код (Text):
    1. .686
    2. .model flat, stdcall
    3. .mmx
    4. option casemap:none
    5. .code
    6. start:
    7.     movq mm0,mm1
    8. end start
    кричать не надо так, да?
     
  4. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    .686
    .model flat, stdcall
    .mmx
    option casemap:none
    .code
    start:
    movq mm0,mm1
    end start

    Вот рабочий пример :) у меня скомпилилось и запустилось на ура.
    Видать проблемы в настройках.
     
  5. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    А какие настройки у тебя?
    Как настроить?
     
  6. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    а с MM0 работает?
     
  7. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    РАБОТАЕТ!!!
    Я тут немного юзал option casemap:none и оказалось, что моя проблема заключалась именно в этой директиве! Без неё оказывается можно писать mm0 и MM0 (как я не догадался раньше?), но вот с ней только MM0, т.е. ПРОПИСНЫМИ.
    Огромнейшее спасибо masquer!!!
     
  8. IceStudent

    IceStudent Active Member

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