我正在使用以下ASM例程对数组进行冒泡排序。我想知道我的代码效率低下的:代码优化技巧:
.386
.model flat, c
option casemap:none
.code
public sample
sample PROC
;[ebp+0Ch]Length
;[ebp+08h]Array
push ebp
mov ebp, esp
push ecx
push edx
push esi
push eax
mov ecx,[ebp+0Ch]
mov esi,[ebp+08h]
_bubbleSort:
push ecx
push esi
cmp ecx,1
je _exitLoop
sub ecx,01h
_miniLoop:
push ecx
mov edx,DWORD PTR [esi+4]
cmp DWORD PTR [esi],edx
ja _swap
jmp _continueLoop
_swap:
lodsd
mov DWORD PTR [esi-4],edx
xchg DWORD PTR [esi],eax
jmp _skipIncrementESI
_continueLoop:
add esi,4
_skipIncrementESI:
pop ecx
loop _miniLoop
_exitLoop:
pop esi
pop ecx
loop _bubbleSort
pop eax
pop esi
pop edx
pop ecx
pop ebp
ret
sample ENDP
END
基本上我有两个循环,像往常一样冒泡排序算法。外环的ecx值为10,内环为[ecx-1]。我已经尝试过例程,它编译并运行成功,但我不确定它是否有效。
你知不知道冒泡排序是在效率方面可怕的排序算法?如果您要采用二次排序算法,那么挖掘汇编程序级别的意义是什么(除了要提供一个不做**的例子)? –
任何其他效率低*旁*简单的事实,你使用的bubblesort。在汇编中实现一个泡泡是(完全正确的)做完全错误的事情的典型例子,并且浪费你的时间来微观地优化错误的算法。 –
当我读到你在程序集中实现了一个冒泡排序时,我从字面上放弃了LOL。 –