我正在使用程序集代码实现选择排序。在选择排序函数中,在我将寄存器推入堆栈后,参数的值将更改为主调用,其大小为15
array_selection_sort(arrayOfNumbers1, SIZE);这是排序函数
void array_selection_sort(int arrayOfIntegers[], int arraySize)
{
__asm{
// BEGIN YOUR CODE HERE
push ebp
mov ebp, esp
push eax
push ebx
push ecx
push edx
push esi
push edi
//assign variables
//ebx = array, ecx = array size - 1, edi = j, edx as temp, esi and edi used for swapping
mov ebx, [ebp + 8]
mov ecx, arraySize
}arraySize在行后从15更改为2130567168
move ebp, esp我的密码有什么问题吗?
发布于 2015-03-03 10:11:59
编译器假定您的参数在堆栈中的特定位置。当您推到堆栈时,您会更改堆栈指针的值,从而扰乱编译器的假设。
发布于 2015-03-03 11:05:01
您不需要命名编译器、调用约定或其他什么。
可以通过检查生成的汇编程序(调用和生成的函数)来回答许多问题。
https://stackoverflow.com/questions/28826681
复制相似问题