Определяет количество символов в строке X, которых нет в другой строке Y в коде сборки - PullRequest
0 голосов
/ 04 мая 2020

В последнее время я занимаюсь программированием на ассемблере. Это кажется хорошим, пока у меня не было такого рода упражнений:

Напишите программу на ассемблере (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;
}
...