我必须在汇编中为这些类编写一些代码。我想将三个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;
}
有什么好的方法可以解决这个问题?我刚刚开始学习汇编。