Zugriff auf Array / Syntax Problem
-
Hallo, ich habe folgenden Code:
void* ParamAddr = const_cast<Impl::Parameters::st_params*>(&this->Params); bool Active[] = {(this->Params.Param1 == 0), (this->Params.Param2 == 0)}; BYTE Align = __alignof(Impl::Parameters::st_params); size_t Size[] = {sizeof(Impl::Parameters::Parameter1), sizeof(Impl::Parameters::Parameter2)}; __asm { [asm] push esi push edi lea esi, BYTE PTR [ebp+12] mov edi, ParamAddr xor eax, eax mov al, BYTE PTR [Align] mov edx, DWORD PTR [esi] // first param from Stack lea ecx, DWORD PTR [Size] // size of first param from Stack test ecx, 0xFFFFFFFC // look for DWORD align jbe __DWORD __DWORD: mov ecx, eax // alignment repnz movsb pop edi pop esi[/asm] }
Das Problem was ich habe liegt beim Zugriff auf Size. Ich bekomme immer die Fehlermeldung:
error C2400: inline assembler syntax error in 'second operand'; found ']'
-
für lea brauchst du keinen Typen spezifizieren:
lea ecx,Size
Eventuell löst das dein Problem...
-
someonenew schrieb:
für lea brauchst du keinen Typen spezifizieren:
lea ecx,Size
Eventuell löst das dein Problem...
Danke, aber das hatte ich urprünglich auch als
mov ecx, Size
da Size ja sowieso ein Pointer auf das erste Element ist. Aber da kommt die Meldung:
error C2400: inline assembler syntax error in 'second operand'; found 'newline'
-
was für ein compiler verwendest du den?
-
Benenne "Size" doch mal so dass es kein Keyword mehr ist.
-
hellihjb schrieb:
Benenne "Size" doch mal so dass es kein Keyword mehr ist.
"Size" IST kein Keyword. Anders bennenen brauche ich es auch nicht, denn "Active" möchte er ja auch nicht.
-
"Size" IST kein Keyword
Wenn Du meinst...
int tmp; _asm { mov eax, Size tmp };
"Active" möchte er ja auch nicht.
Geht doch:
bool Active[]= {true, false}; _asm { lea ecx, Active mov al, [ecx] };
Offen ist auch immer noch die Frage:
was für ein compiler verwendest du denn?
-
sry, ich sprach von C++-Keywords.
Das mit dem "Active"-Array ging bei mir nicht. Ich kann es aber erst heute Abend wieder testen; vorher keine Zeit.
Compiler ist der VC 9.0.