我尝试使用程序集转换代码以对数字数组进行排序;但是当我尝试运行它时,我得到了
"这可能是由于堆的损坏,这表明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:
}
}
但是当我尝试运行它时会给我一个错误。
有什么建议吗?