MASM: перебрать 3 массива - PullRequest
       9

MASM: перебрать 3 массива

0 голосов
/ 19 ноября 2018

Я должен написать некоторый код на ассемблере для классов.Я хочу передать три массива char в функцию asm.Затем я хочу сделать некоторые операции над двумя из них и сохранить в третьем.Я уже нашел один ответ: передача массивов в функции в x86 asm , но мне кажется, что это не работает, потому что у меня не осталось регистров для выполнения вычислений.

.model flat, stdcall
.386

.stack 4096
.data

.code
MyProc1 proc plainTab: DWORD, resultTab: DWORD, keyTab: DWORD ,len: DWORD

    xor ecx, ecx
    xor edx, edx
    xor ebx, ebx
    xor eax, eax
    xor esi, esi


    mov ebx, plainTab
    mov edx, resultTab
    mov eax, keyTab
    mov ecx, len

myloop: mov bl, [ebx]
    add bl, [eax]
    mov [edx], bl

    inc ebx
    inc edx
    inc eax

    dec ecx
    jnz myloop
  ret 
MyProc1 endp
end

И вот как это выглядит в c ++ main:

int main() {

    typedef char* (WINAPI *MYPROC1)(char*, char* ,char* ,int);
    MYPROC1 MyFunc1;
    HMODULE hLib;
    const int n = 9;
    char plainText[n] = { 'm', 'e', 's', 's', 'a', 'g', 'e', 'e', 'e' };
    char key[n] = { 'k', 'e', 'y', 'k', 'e', 'y', 'k', 'e', 'y' };
    char result[n] = {'\0'};
    if ((hLib = LoadLibrary(L"Asm.dll")) != NULL) {
        MyFunc1 = (MYPROC1)GetProcAddress(hLib, "MyProc1");
        if (MyFunc1 != NULL)
        {
            MyFunc1(plainText, result, key, n);
            for (int i = 0; i < n; i++)
                std::cout << result[i] << " ";
            std::cout << std::endl;
        }           
        FreeLibrary(hLib);
    }
    return 0;
}

Есть ли какой-нибудь хороший метод для решения этой проблемы?Я только начал изучать сборку.

...