В последнее время я занимаюсь программированием на ассемблере. Это кажется хорошим, пока у меня не было такого рода упражнений:
Напишите программу на ассемблере (intel 8086), которая определяет количество символов в строке X, которых нет в другой строке Y.
Пример: X = jason и Y = бекон -> отображает 2 (потому что только символы 'j' и 's' в X не в Y).
Пример: X = Тони и Y = Энтони -> отображает 0 (потому что все символы X существуют в Y).
У меня возникают трудности при инициализации edi после нахождения общего символа между двумя строками для сравнения символов X с Y (от начала Y) или после не нахождения, увеличивая ebx и переходя к другому символу X, чтобы сравнить со всеми Y (с первого символа)
int _tmain(int argc, _TCHAR* argv[])
{
char string[20] = "jason";
char string1[20] = "bacon";
char* c;
char* p;
c = string1;
p = string;
int x = strlen(string);
int y = strlen(string1);
__asm
{
mov esi, p;
mov edi, c;
mov al, [esi];
mov ebx, 0;
look:
scasb;
jz exist;
cmp[edi], '\0';
jz nonexist;
jmp look;
exist:
dec x;
mov al, [esi + 1];
cmp [esi], '\0';
jz end;
jmp look;
nonexist:
inc ebx;
dec x;
mov al, [esi + 1];
cmp [esi], '\0';
jz end;
jmp look;
end:
push ebx;
call Display;
pop eax;
}
getchar();
return 0;
}