"这可能是由于堆的腐败造成的。在汇编时进行编程

时间:2015-11-06 13:20:59

标签: assembly x86

我尝试使用程序集转换代码以对数字数组进行排序;但是当我尝试运行它时,我得到了

  

"这可能是由于堆的损坏,这表明IntercambioDirecto_Ens.exe或它已加载的任何DLL中存在错误。"

我正在使用冒泡排序算法(我认为这是英文名称)

这是原始代码(工作正常):

    int[] IDS(int[] A, Boolean ord){
        int aux;
        int i = 0;
        while(i<=A.Length-1 && !band){
            band = true;
            for(j = 0; j < A.Length-1; j++){
                if(ord){
                    if(A[j]>A[j+1]){
                        aux = A[j];
                        A[j] = A[j+1];
                        A[j+1] = aux;
                        band = false;
                    } 
                }else{
                    if(A[j]<A[j+1]){
                        aux = A[j];
                        A[j] = A[j+1];
                        A[j+1] = aux;
                        band = false;
                    }
                }
            }
            i++;
        }
        return A;
    }

我尝试在汇编中创建相同的程序(使用20个数字的数组)

void ordenar()
{
  _asm
  {
    mov ecx,20
    mov auxCiclo, 20
    mov ebx, 0
    mov eax, 0
    mov esi, arr
    ciclo1:
        cmp band,1
            je salir

        mov band,1
        mov auxCiclo, ecx
        mov ecx,20
        ciclo:
            cmp orden,0 
                je ifdesc

                mov eax, [esi+ebx]
                mov a1, eax 
                mov eax, [esi+ebx+4]
                cmp a1, eax 
                    add ebx,4
                    loop ciclo

                ifdesc:
                    mov eax, [esi+ebx]
                    mov a1, eax
                    mov eax, [esi+ebx+4]
                    cmp a1, eax
                        jl intercambio
                        add ebx,4
                    loop ciclo

                intercambio1:
                add ebx,4 
        loop ciclo
        mov ecx, auxCiclo
        mov ebx,0
        cmp j,0
            jg ciclo1
    loop ciclo1
    jmp salir 
                    intercambio:
                        mov eax, [esi+ebx]
                        mov aux, eax
                        mov eax, [esi+ebx+4]
                        mov [esi+ebx],eax
                        mov eax, aux
                        mov [esi+ebx+4], eax
                        mov band,0
                        jmp intercambio1 

    salir:
  }
}

但是当我尝试运行它时会给我一个错误。

有什么建议吗?

0 个答案:

没有答案