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 | 1417 (1273) | scarymovie |
| » | [C++ & asm] najhitrejša inicializacija 2D matrikeOddelek: Programiranje | 1899 (1539) | Fury |
| » | [C/C++] Variadic MacrosOddelek: Programiranje | 2248 (2073) | OwcA |