MASM:遍历3个数组

时间:2018-11-19 20:31:27

标签: arrays assembly masm

我必须在汇编中为这些类编写一些代码。我想将三个char数组传递给asm函数。然后,我要对其中两个进行一些操作,然后保存到第三个操作。 我已经找到了一个答案:passing arrays to functions in 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;
}

有什么好的方法可以解决这个问题?我刚刚开始学习汇编。

0 个答案:

没有答案