Собственно ситуация: есть MSVS2005. В нем есть наброски класса: Код (Text): #define MY_FLOAT_SIZE 8 #define BYTE unsigned char class MY_FLOAT { private: BYTE value[MY_FLOAT_SIZE]; public: MY_FLOAT(); // .... }; Нужно реализовать примерно следующий код для конструктора: Код (Text): MY_FLOAT::MY_FLOAT() { value = 0; } Делаю так: Код (Text): __asm { fldz fstp value // вот тут и проблема. так ругается } Собственно вопрос: как корректно выполнить данную операцию? Ведь FSTP требует размерности приемника...
Тестирую на коде: MY_FLOAT::MY_FLOAT() { value[0] = 0x11; value[1] = 0x22; value[2] = 0x33; value[3] = 0x44; // для определения, что использую правильный адрес и он меняется при вызове FSTP __asm int 3; // ставлю брейк для отладки в Ольке // BYTE *v = value; // я пробовал разные тупые // BYTE *v = &value[0]; // способы, но ничего не помогло __asm { fldz fstp qword ptr [v] // fstp qword ptr value // прямая задача value выдает error C2415: improper operand type } }
value надо в скобки брать: Код (Text): MY_FLOAT::MY_FLOAT() { __asm { fldz fstp qword ptr[value] } } можно и через eax задать адрес: Код (Text): MY_FLOAT::MY_FLOAT() { BYTE *p = &value[0]; __asm { mov eax,p fldz fstp qword ptr[eax] } }
cresta Со скобками я пробовал с самого начала - как-никак это стандартная запись. Но все-равно компилятор ругался недопустимым типом операнда. Через EAX заработало. Хотя смотрится, ИМХО, весьма коряво... Ну ладно, с этим вроде как проблем больше нет. Спасибо! P.S. если кто может предложить способ лучше, чем через левую переменную - идею в студию
Xerx Приведи сообщение об ошибке, которое выдавал компилятор на fstp qword ptr[value] ? А адресация через eax - это не "левый", а один из стандартных способов
Xerx Эту ошибку компилятор выдаёт на fstp qword ptr value. Если делать fstp qword ptr[value], никаких ошибок нет. Об адресации через регистр: fstp qword ptr[esp] выглядит точно так же, как и fstp qword ptr[eax]...
cresta Да я не об этом! Я про сам факт использования промежуточного регистра. А мой ругается недопустимым операндом и со скобками... Ненавижу MSVS....