如何优化此汇编代码?

时间:2014-11-27 10:38:45

标签: assembly x86

这里的任何人都可以帮我优化这个汇编代码吗?我试图使它比现在更快地执行,但我找不到任何其他方法来做它。

        code:
            mov eax, x
            mov a, eax
        again :
            mov ecx, a
            shr ecx, 1
            cmp ecx, 2
            jb skip
            mov ebx, 2
            inc ecx
            sub ecx, ebx
            mov count, 0
        repeat :
            mov eax, a
            sub edx,edx
            div ebx
            sub dx,0
            jnz finish
            inc count
        finish :
            inc ebx
            loop repeat
            mov ecx,count 
            cmp ecx,max
            jbe done
            mov max, ecx
            mov eax,a
            mov num,eax
        done :
        skip :
            mov ecx, y
            inc ecx
            sub ecx, a
            inc a

        loop again

1 个答案:

答案 0 :(得分:0)

您的代码中有多个冗余行,例如:

        mov ebx, 2
        inc ecx
        sub ecx, ebx

与:

相同
        mov ebx, 2
        dec ecx

...等 但写得很好不会在现代CPU上加速,因为那些冗余线路几乎没有任何成本(或者实际上没有任何成本)。

循环看起来运行时间很长,如果我理解它(看起来你正在计算x的除数的数量,所以直到sqrt(x)就足够了,但你要到(x / 2))。

无论如何,我还没有完全破译它应该计算的东西。如果您敢于告诉我们该函数应该计算什么,我们可能会提出最终更快的算法(这可以使它更快,而不仅仅是更改x86指令 - 那里的增益可以忽略不计)。