我正在使用汇编代码实现选择排序。在选择排序功能中,在我将寄存器推入堆栈后,参数值就会发生变化 这是主要的呼叫,SIZE = 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
我的代码有什么问题吗?
答案 0 :(得分:0)
编译器假定您的参数位于堆栈上的特定位置。当你推送到堆栈时,你改变了堆栈指针的值,因此搞乱了编译器的假设。
答案 1 :(得分:0)
您不会命名编译器,调用约定或其他任何内容。
通过检查生成的汇编程序,调用和生成的函数
,可以回答许多问题