Я должен написать некоторый код на ассемблере для классов.Я хочу передать три массива 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;
}
Есть ли какой-нибудь хороший метод для решения этой проблемы?Я только начал изучать сборку.