Вопрос к знатокам MASM64. Имеем структуру типа: Код (Text): mystruct STRUCT member1 DWORD ? member2 DWORD ? mystruct ENDS необходимо обратиться, скажем, к member2 через указатель расположенный в RDX. раньше это делалось так: Код (Text): ASSUME EDX:PTR mystruct mov eax,dword ptr [EDX.member2] теперь же, масм 8.00.40904 ругается на строку: Код (Text): ASSUME RDX:PTR mystruct : error A2008: syntax error : rdx Что можно (нужно) сделать?
В черновике статьи Криса Касперски на тему x64 (в соседнем топике лежит архив) написано, что в длинном режиме изменилась адресация. Возможно, это как-то повлияло на "тип" PTR. Или в MS вообще решили отменить поддержку assume, как они собирались отменить макрос invoke в masm64. В любом случае, можно переписать этот код без assume: Код (Text): mov eax,dword ptr [rdx + 4] ЗЫ: А это точно masm64?
Zufyxe 1. "масм 8.00.40904" - это версия с сайта Microsoft или с другого? 2. "error A2008: syntax error : rdx" - может есть что-то вроде PTR64, LPTR, или другое. Возможно в справке что-нибудь написано. PS: Кстати, Zufyxe, ты первый кого я увидел в работе с masm64. Расскажи что-нибудь про него: что поменялось, можно ли его использовать как masm32, ...
Vasil Он есть в последнем PSDK, но архив очень тяжёлый и тянуть его ради одного ml64.exe нет желания.
Quantum Слушай, подскажи что делать: У меня есть "Visual Studio 2005 Professional +msdn". Устанавливаться не хочет на Windows 2003 Server - просит SP1. Может что-нить в реестре поменять?
Vasil А будет ли он работать без SP? Кстати, где-то в форуме была тема по изменению версии билда. Если правильно помню, то простого решения для этого нет.
Мне оттуда ничего, кроме *.h файлов, MSDN и может быть ml64 не надо "простого решения для этого нет" - просто SP1 весит 394 Мбайт, качать ломает, а покупать целый диск с другими версиями 2003 не хочется.
Можно попробовать перехватить GetVersionEx или лучше даже распаковать инсталлер, если это оффлайновая версия. Или попросить кого-то выложить нужные файлы.
Помню я этот инсталлер в InstallShield открывал, но без упешно. Каталоги с файлами он показывает, а как их вытащит я не знаю...
А по кабам отдельно нельзя вытащить? Я не смотрел (дёрнул img), но раньше можно было. Кстати, в PSDK 2k3sp1 ml-то есть, а справки к нему нет. Надо вкупе и MSDN тянуть - несерьёзно.
Странно, но MS никак не коментирует странное поведение ASSUME: http://msdn2.microsoft.com/en-us/library/kx3dscek(VS.80).aspx Кроме того, ASSUME RDX: NOTHING тоже выдает ошибку...
Zufyxe У меня с английским плоховато. Но мне кажется, что регистры RXX использовать для индексирования в отдельности нельзя. Их используют в комбинации с EXX регистрами. Ты посмотри внимательнее в пункте "32-Bit Address Mode (Address Size Override)" по моему там написано также. Вот ссылка на страничку: http://msdn2.microsoft.com/en-us/library/hb5z4sxd(VS.80).aspx
Ну как же это нельзя? Теперь все указатели 64-битные. Значит mov rax,[rdx] корректно компилится и работает. И mov eax,dword ptr [rdx], тоже работает. А вот ASSUME не работает
похоже что masm64 не поддерживает директиву assume. Например ml64 (в отличие от ml) спокойно компилит такой код: Код (Text): assume equ 0 end