Я вот собирался написать программу на асме использующую регистры MMX. Скачал MASM_v90 от hutch'a ( http://www.masm32.com/masmdl.htm ) да и решил проверить работает ли MMX. Но, увы, нифига ничего не получилось! Компилятор выдаёт ошибку: MMX.asm(17) : error A2006: undefined symbol : mm0 А вот содержание моего файла MMX.asm, который упорно не хочет компилироваться: Код (Text): .686 .model flat, stdcall .xmm .mmx option casemap:none .code start: emms xor eax,eax movq mm0,eax 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 ПОДСКАЖИТЕ КАК РЕШИТЬ ЭТУ ПРОБЛЕМУ! (извините, что кричу - я глуховат)
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
Может ты считаешь её неправильной, но MVC++ 6.0 считает её БЕЗОШИБОЧНОЙ. Да и не в этом дело! Даже на команду movq mm0, mm1 компилятор MASM32 выдаёт: error A2006: undefined symbol : mm0 Вот сырец: Код (Text): .686 .model flat, stdcall .mmx option casemap:none .code start: movq mm0,mm1 end start кричать не надо так, да?
.686 .model flat, stdcall .mmx option casemap:none .code start: movq mm0,mm1 end start Вот рабочий пример у меня скомпилилось и запустилось на ура. Видать проблемы в настройках.
РАБОТАЕТ!!! Я тут немного юзал option casemap:none и оказалось, что моя проблема заключалась именно в этой директиве! Без неё оказывается можно писать mm0 и MM0 (как я не догадался раньше?), но вот с ней только MM0, т.е. ПРОПИСНЫМИ. Огромнейшее спасибо masquer!!!
Странно. Судя по справке, , распространённые опции (:none) и ключи командной строки (Cp) не противоречат друг другу. Попробовал с различными ключами, ничего не указывая в сорце - всё скомпилировалось. С другой стороны, при указании :none и ничего не указывая в ключах ругается на mm0.