Я работаю в Visual Studio 2010, и вот небольшой код, с которым у меня проблемы:
void main()
{
int x;
char c1[100]="cd";
char c2[100]="abcdef";
_asm {
lea edx,c2
lea ecx,c1
push edx
push ecx
call subsir
add esp, 8
mov x, eax
}
}
char subsir (char *c1, char *c2)
{
_asm {
mov ecx, c1
mov edx, c2
mov edi, 0
mov esi, 0
start: cmp [edx + edi], 0
je end
mov esi, 0
mov eax, [edx + edi]
cmp eax, [ecx + esi]
.....
Это первая часть программы, которая предназначена для сравнения 2 слов.
У меня проблема в том, что когда я делаю
mov eax, [edx + edi]
eax получает адрес, а не фактическое значение.
Я проверил это, выполнив
cmp eax, 97
, которая должна активировать инструкцию JE (97 является кодом ASCII для 'a'), но это не так. Если я сделаю
cmp [edx + edi], 97
активирует прыжок JE.
Буду очень признателен, если вы скажете мне, что я делаю не так, и как я могу указать фактическое значение в EAX вместо адреса.