这里的任何人都可以帮我优化这个汇编代码吗?我试图使它比现在更快地执行,但我找不到任何其他方法来做它。
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
答案 0 :(得分:0)
您的代码中有多个冗余行,例如:
mov ebx, 2
inc ecx
sub ecx, ebx
与:
相同 mov ebx, 2
dec ecx
...等 但写得很好不会在现代CPU上加速,因为那些冗余线路几乎没有任何成本(或者实际上没有任何成本)。
循环看起来运行时间很长,如果我理解它(看起来你正在计算x的除数的数量,所以直到sqrt(x)就足够了,但你要到(x / 2))。
无论如何,我还没有完全破译它应该计算的东西。如果您敢于告诉我们该函数应该计算什么,我们可能会提出最终更快的算法(这可以使它更快,而不仅仅是更改x86指令 - 那里的增益可以忽略不计)。