我对汇编程序中的代码有一些问题,该代码负责将一个数组复制到另一个数组(整数数组)。
这就是我在 C++ 中创建数组的方式:
int *myArray=new int[myFunctions::getCounter()];
int *newArray;
int *newArray = new int[counter+1]; // I have some information in [0]
这就是我声明汇编程序功能的方式
extern int copy(myArray[], int *newArray, int howManyElements, int howManyProcesses, int indexOfProcess);
关于流程:这是项目的一部分。过程(循环中)的工作方式如下:
在示例中,我们在数组中有 3 个进程和 10 个元素
第一个进程复制到新的数组元素中:[1] [4] [7] [10] 第二 [2] [5] [8] 第三 [3] [6] [9]
在 c++ 中:
for (int i=indexOfProcess; i<=howManyElements; i+=howManyProcess){
newArray[i] = myArray[i];
}
在 c++ 中它工作正常。在汇编程序中我遇到了麻烦。只有第一个元素被正确复制。其余元素不变。MASM 代码:
copy proc uses ebx ecx edx esi edi myArray:DWORD, newArray:DWORD, howManyElements:DWORD, howManyProcesses:DWORD, indexOfProcess:DWORD
local ahowManyProcesses:DWORD
local ahowManyElements:DWORD
local adressOfArray:DWORD
mov eax, howManyElements
mov ahowManyElements, eax
mov eax, howManyProcesses
mov ahowManyProcesses, eax
xor eax, eax
mov ecx, indexOfProcess
mov ebx, myArray
mov edx, newArray
mov adressOfTab, edx
add ebx, ecx
add edx, ecx
add eax, ecx
loop:
mov eax, [ebx]
mov [edx], eax
add ebx, ahowManyProcesses
add edx, ahowManyProcesses
add eax, ahowManyProcesses
cmp eax, ahowManyElements
jbe loop
mov eax, adressOfArray
ret
copy endp
end
例如:
我的数组 [1] = 10 [2] = 11 [3] = 3 [4] = 13...
程序前的 newArray [1] = 0 [2] = 0 [3] = 0 [4] = 0...
newArray 在过程 [1] = 10 [2] = 0 [3] = 0 [4] = 0...
我认为 DWORD/BYTE 存在一些问题。我尝试将 ecx 更改为 [ecx+4] 和其他组合,但我不知道如何修复代码。
谢谢您的帮助 :)