这是我在数组中查找max元素的C ++代码:
#include <iostream>
#include <conio.h>
using namespace std;
extern "C" int Max(int *i, int count);
int main() {
int i[10] = {1, 6, 7, 4, 8, 9, 6, 5 ,8 , 4};
cout<< "Max " << Max(i ,10) << endl;
_getch();
return 0;
}
没有完成,但我在mov eax, [esi]
线上收到了Access违规读取位置错误。
我的ASM代码:
.code
Max proc
mov esi,ecx
mov ecx,edx
mov eax, [esi]
ret
Max endp
end
我怎么解决这个问题?
编辑:这足以让我知道如何获得数组的第一个元素。
我看到的主要问题是你的代码改变了esi并且没有将更改恢复到它,这很危险。你应该在你的功能开始时放一个“推esi”,并在结尾添加一个“pop esi”。
当我在调试模式下检查寄存器的值时,esi
不存在。有rsi
注册而不是它。然后我重写这样的代码;
mov rax,[rcx]
我删除了其他行。现在,这就像一个魅力。我可以得到数组的第一个元素。
感谢@JSF。