Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 冒泡排序后的访问冲突写入位置 /* 对于i=0到n-1 do 对于j=n到i+1 do if(向量[j-1]错误准确地发生在哪里?您是否尊重编译器使用的调用约定?我确实想知道为什么您会费心用汇编优化冒泡排序…由于排序算法是最慢的,我相信编译器自己会做得很好_Assembly_Visual C++_X86_Bubble Sort - Fatal编程技术网

Assembly 冒泡排序后的访问冲突写入位置 /* 对于i=0到n-1 do 对于j=n到i+1 do if(向量[j-1]错误准确地发生在哪里?您是否尊重编译器使用的调用约定?我确实想知道为什么您会费心用汇编优化冒泡排序…由于排序算法是最慢的,我相信编译器自己会做得很好

Assembly 冒泡排序后的访问冲突写入位置 /* 对于i=0到n-1 do 对于j=n到i+1 do if(向量[j-1]错误准确地发生在哪里?您是否尊重编译器使用的调用约定?我确实想知道为什么您会费心用汇编优化冒泡排序…由于排序算法是最慢的,我相信编译器自己会做得很好,assembly,visual-c++,x86,bubble-sort,Assembly,Visual C++,X86,Bubble Sort,冒泡排序后的访问冲突写入位置 /* 对于i=0到n-1 do 对于j=n到i+1 do if(向量[j-1]错误准确地发生在哪里?您是否尊重编译器使用的调用约定?我确实想知道为什么您会费心用汇编优化冒泡排序…由于排序算法是最慢的,我相信编译器自己会做得很好;优化汇编会更好d是一个更复杂的问题。只要看一看你的代码,我怀疑问题不是你的类型…问题更可能是你没有告诉编译器哪个寄存器是你的clobber。因此,它期望某些值仍然是你的汇编代码运行之前的值,然后它对它们进行操作,创建access violat

冒泡排序后的访问冲突写入位置
/*
对于i=0到n-1 do
对于j=n到i+1 do

if(向量[j-1]错误准确地发生在哪里?您是否尊重编译器使用的调用约定?我确实想知道为什么您会费心用汇编优化冒泡排序…由于排序算法是最慢的,我相信编译器自己会做得很好;优化汇编会更好d是一个更复杂的问题。只要看一看你的代码,我怀疑问题不是你的类型…问题更可能是你没有告诉编译器哪个寄存器是你的clobber。因此,它期望某些值仍然是你的汇编代码运行之前的值,然后它对它们进行操作,创建access violation。@MargaretBloom如果我在块asm之后做任何事情都会发生。@MichaelPetch非常感谢,现在它可以工作了。错误到底发生在哪里?你尊重你的编译器正在使用的调用约定吗?我真的想知道为什么你会费心用汇编优化冒泡排序…因为它是最慢的排序算法如果是这样的话,我相信编译器自己会做得很好;对汇编进行优化更适合于更复杂的事情。只要看一看你的代码,我怀疑问题不是你的类型…问题更可能是你没有告诉编译器哪个注册了你的clobber。因此,它希望n值仍然是程序集代码运行之前的值,然后它对它们进行操作,从而创建访问冲突。@MargaretBloom如果我在块asm之后执行任何操作,就会发生这种情况。@MichaelPetch非常感谢,现在它可以工作了。
/*
for i=0 to n-1 do
   for j=n to  i+1 do
      if (vector[j-1]<vector[j])
         swap(vector[j-1],vector[j])
      end_if
   end_for
end_for
*/
#include <iostream>
using namespace std;

void bubbleSort(int *v) {
    int n = 19;
    for (int i = 0; i < 20; i++)
    {
        printf("<%d> ", v[i]);
    }
    _asm
    {
        mov esi, v 
        mov ebx, n 
        mov ecx, 0
        loopi:
            mov edi, esi
            mov edx, n
        loopj:
            mov eax, [edi + 4 * 18]
            mov esp, [edi + 4 * 19] 
            cmp eax, esp
        jb no_swap
            xchg eax, [edi + 4 * 19] // swap
            mov [edi + 4 * 18], eax 
       no_swap :
            sub edi, 4 
            dec edx
            cmp edx, ecx
            ja loopj
            inc ecx
            cmp ecx, ebx
            jb loopi
    }
    printf("%d\n", v[1]);
    for (int i = 0; i < 20; i++)
    {
        printf("%d\n", v[i]);
    }
}
int main() {
    int vector[20] = {1,3,4,5,2,10,13,15,6,9,20,7,11,19,8,12,18,14,17,16};
    bubbleSort(vector);
    /*for (int i = 0; i < 20; i++)
    {
        printf("%d\n",vector[i]);
    }*/
    return 0;
}