[Inline ASM] Invalid Operand

Status
Niet open voor verdere reacties.

w00tare

Gebruiker
Lid geworden
10 jul 2009
Berichten
216
Hallo,

Ik krijg de volgende error(x2):
Code:
1>.\main.cpp(164) : error C2415: improper operand type

bij:

Code:
#define ADR_TOZERO 0x0047EF0E
DWORD jJump = ADR_TOZERO  ;
_declspec(naked) void To0(){
	__asm{
		cmp ecx, 0
		jz jJump // hier
		jmp again
again:
		dec ecx
		cmp ecx, 0
		jz jJump // en hier
		jmp again
	}
}

iemand?

EDIT:

Oke, intussen heb ik een andere code gemaakt, die ook werkt, toch zou ik nog wel willenweten waarom dit niet werkt.

dit werkt wel;

Code:
#define ADR_TOZERO 0x0047EF0E
DWORD jJump = ADR_TOZERO  ;
_declspec(naked) void To0(){
	__asm{
		xor ecx, ecx 
		jz jJump 
	}
}
 
Laatst bewerkt:
Het is vreemd dat je tweede code wel werkt, daar het gebruikte type hetzelfde is. Hier compileert je code dan ook niet (VS2010). De jmp instructie levert geen problemen op:

[cpp]
_declspec(naked) void To0()
{
__asm
{
cmp ecx, 0
jz make_jump
decr_ecx:
loop decr_ecx;
make_jump:
jmp jJump
}
}

_declspec(naked) void To1()
{
__asm
{
xor ecx, ecx
jmp jJump
}
}
[/cpp]
 
Hmm, Ik ga er morgen nog even naar kijken, maar als ik het goed heb maakt xor ecx, ecx de waarde van ecx ook 0.
Dit weet ik niet helemaal zeker.
 
Hmm, Ik ga er morgen nog even naar kijken, maar als ik het goed heb maakt xor ecx, ecx de waarde van ecx ook 0.
Dit weet ik niet helemaal zeker.

Als je een gelijke waarde xor't dan levert dit altijd 0 op, want xor levert alleen een 1 op wanneer de bits niet gelijk aan elkaar zijn, en dat is nooit het geval als ze hetzelfde zijn. Dan staan de bitjes allemaal op 0.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan