; (c) 2007 Пример работы с инструкциями MMX SSE .data AnyQword dq 1234567890ABCDEFh sse_data dq 000000000000000fh .code start: ; MMX mov eax,0ffffffffh movq MM1,[AnyQword] movd MM1,eax pxor MM0,MM1 movd MM2,eax movd MM3,eax movd MM4,eax movd MM5,eax movd MM6,eax movd MM7,eax ; SSE movss XMM(0),[sse_data] movss XMM(1),[sse_data] movss XMM(2),[sse_data] movss XMM(3),[sse_data] movss XMM(4),[sse_data] movss XMM(5),[sse_data] movss XMM(6),[sse_data] movss XMM(7),[sse_data] invoke ExitProcess,NULL ; Выход из программы. end start
Кстати, вот интересно "By default the PIII will NOT run SSE instructions, the OS, DOS Extender, or whatever must check using CPUID features bit to determine if SSE is supported by the CPU and then set bit 9 of CR4 to enable SSE & FXSR, bit 10 of CR4 deals with SSE fault handling. If bit 9 is NOT set FXSAVE, FXRSTOR and the SSE opcodes will trap. The PREFETCHxx instructions are the ONLY ones that will not, as they are treated as NOP's on all P6 CPUs that don't decode them to specific instructions." Это что, получается, если я работаю на PIII под вин98, то обязательно должен колдовать с CR руками (ведь вин98 разрабатывалась до появляения PIII и SSE)?
Ну если вы такой умный то почему в Гугль сразу не залезли ? Недостаточно ! В мануалах пишут: movss XMM,[sse_data] а в асме нужно писать: movss XMM(0),[sse_data]
Я умный, только вот с поисками нужной информации у меня проблема - поисковики вечно не понимают, что я хочу найти. Они, собаки, мне все учебники по SSE подсовывали, а как директива в масме называется - молчали как партизаны. Вы вот тоже ведь меня не поняли - код привели, а директиву - нет. Видать и здесь я не так спросил Более того, я этих директив (.mmx, .xmm) не нашел даже в хелпах самого масма, откопал только .mmx в примере. Да и через гугл я эту информацию нашел не в технической документации, а в какой-то форумной переписке! Какая то тайна за семью печатями :-/ Хмм, интересно. Я на шару писал xmm0 (без скобок) - как в инстракшн сете было написано. И работает. Со скобками тоже работает. Да, и загадочным образом SSE под вин98 работает без всякой инициализации CR-регистров.
Все mm0,mm(0),Mm0,mM0,... xmm0,xmm(0) это всё алиасы - можете посмотреть сами, сгенерив листинг микрософтовским ассемблером - там в низу листинга увидите как это всё определено через <equ> afair