Forum » Programiranje » [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'
 
 
  
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…
- spremenilo: Randomness ()
 
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | Delo za datotekami in zbirkami v zbirniku...Oddelek: Programiranje | 990 (858) | Brane2 | 
| » | [ASM] Pomoč, ne najdem napakeOddelek: Programiranje | 1223 (1099) | c0dehunter | 
| » | asm - vnos stevilk s tipkovniceOddelek: Programiranje | 1416 (1272) | scarymovie | 
| » | [C++ & asm] najhitrejša inicializacija 2D matrikeOddelek: Programiranje | 1899 (1539) | Fury | 
| » | [C/C++] Variadic MacrosOddelek: Programiranje | 2246 (2071) | OwcA |