» »

[c++] MVS koda __asm v makroju ne deluje

[c++] MVS koda __asm v makroju ne deluje

goranv ::

Zakaj mi v spodnji kodi v funkciji dva macro ARG_NEXT javi napako ce pa gre za isto asm kodo kot v funkciji ena.

Compiler vrne:

warning C4405: 'mov': identifier is reserved word
error C2400: inline assembler syntax error in 'second operand'; found 'register'


#define ARG_START\
				int	arg_count	= 0,\
					arg_data	= 0;

#define ARG_NEXT\
				__asm\
				{\
					mov ecx,	[i]\
					mov eax,	[ebp+8+ecx*4]\
					mov [arg_data],	eax\
				}



void ena( int a, ... )
{
	int arg_data;

	for( int i = 0; i < a; i++ )
	{
		__asm
		{
			mov ecx,	[i]
			mov eax,	[ebp+8+ecx*4]
			mov [arg_data],	eax
		}

		printf( "[%d] = %d\n", i, arg_data );
	}
}


void dva( int a, ... )
{
	ARG_START

	for( int i = 0; i < a; i++ )
	{
		ARG_NEXT

		printf( "[%d] = %d\n", i, arg_data );
	}
}



int main()
{
	ena( 4, 5, 6, 7 );
	dva( 4, 8, 9, 10 );

	return 0;
}

Ahim ::

Kaj se zgodi, ce makru ARG_NEXT dodas parameter i, in ta makro klices kot ARG_NEXT(i) z lokalno variablo i v funkciji dva() ?

Randomness ::

ARG_NEXT makro spremeni tako:
#define ARG_NEXT __asm \
    { \
        __asm mov ecx, [i] \
        __asm mov eax, [ebp+8+ecx*4] \
        __asm mov [arg_data], eax \
    }

Zgodovina sprememb…

goranv ::

Dodal sem obe i in arg_data pa ista napaka. Drug primer deluje.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Delo za datotekami in zbirkami v zbirniku...

Oddelek: Programiranje
11851 (719) Brane2
»

[ASM] Pomoč, ne najdem napake

Oddelek: Programiranje
51105 (981) c0dehunter
»

asm - vnos stevilk s tipkovnice

Oddelek: Programiranje
51289 (1145) scarymovie
»

[C++ & asm] najhitrejša inicializacija 2D matrike

Oddelek: Programiranje
311802 (1442) Fury
»

[C/C++] Variadic Macros

Oddelek: Programiranje
122115 (1940) OwcA

Več podobnih tem