Приветствую. Наткнулся на непонятку: Код (Text): movd mm0,[esi] ; error A2070: invalid instruction operands Почему так? Ведь мнемоника указывает размер, второй операнд должен по идее интерпретироваться как DWORD ptr. И что более интересно: 8.0.40426.16 - ругается (бета) 8.0.40904.0 - не ругается (бета) 8.0.50727.42 - ругается (релиз вроде). 7е версии и меньше не ругаются. Кто прояснит ситуацию? Нужно ли указывать размер или это придирки?
IceStudent Ну что можно ответить на риторический вопрос ? Ему самое место в теме masm vs fasm Ес-но инструкция movd работает только с mem32 и требовать указания размера операнда в данном случае - это "придирка масма" PS: Хотя фиг его знает, надо уточнить - возможно Athlon 64 поддерживает movd mm,mem64
IceStudent Чего молчим ? Атлоновского мануала нет под рукой или и так все ясно ? Действительно для Athlon 64 в 64-битном режиме определена инструкция mov mmx,reg64/mem64 (тот же опкод, что и для 32-бит, но с префиксом REX) Так что одно из двух - либо masm тупой и придирчивый, либо суперпродвинутый
Не сразу понял, как определять по доке, нужно ли указание размера. Да, там только mem32. Ещё штуковина: одна из версий ругается на mm0, MM0 ему подавай.. Насчёт Атлона - что тут скажешь
мало ли, для тестирования на исключение ) В принципе, конечно, это уже избыточно, в начале задано .MMX и точка.
S_T_A_S_ > "И какое это имеет отношение к masm (ml.exe)?" Никакого, просто притянутая за уши отмазка для приверженцев масма PS: "Глубокомысленные" прибамбасы масма наверное уже никого не удивляют. Но вот как AMD додумалось использовать мнемонику movd для пересылки qword'ов не понятно - логичнее было бы movq использовать (пусть даже с опкодом movd, если у них напряг с эти делом)