标签:常量 加法 次方 xxx 结果 指令 圆整 应用 xxxx
编译器使用的优化技巧
a、1. 变量优化
b、加法的优化
变量+变量 = lea reg32,[变量+变量]
变量+变量 = add eax,xx
变量+常量 = add 变量+常量
变量+1 = inc 变量
b、减法的优化
变量-变量 = lea reg32,[变量-变量]
变量-变量 = sub xx,xx
变量-常量 = add 变量+补码(常量)
变量-1 = dec 变量
c、乘法优化
变量*常量(为2的幂)=shl eax, n(2^n)(乘数为2的幂)
变量*常量(非2的幂)=lea eax, [变量+变量*n]
变量*变量=Imul reg32
d、除法的优化
普通除法:
mov Reg32_1, XXXXXXXXh(除数)
imul Reg32_2(被除数)
add edx,Reg32_2
sar edx,xxx
mov eax,edx
Shr eax,1Fh
mov
Reg32_1, XXXXXXXXh(除数)
imul
Reg32_2(被除数)
mov
Reg32_1, edx
shr
Reg32_1, 1Fh
add
Reg32_1, edx
应用计算结果
(除数=XXXXXXXXh*2^-32 如果倒数被向上圆整了,那么根据sar指令后的数值向下 圆整即可)
除数为2的次方:
mov
eax, (被除数)
cdq
and
edx, XXh
add
eax, edx
sar
eax, YYh
应用计算结果
(除数 = XXh+1 或 2^YYh)
e、堆栈恢复优化
标签:常量 加法 次方 xxx 结果 指令 圆整 应用 xxxx
原文地址:https://www.cnblogs.com/xiangtingshen/p/11212807.html