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.


Anmelden zum Antworten