标签:常量 加法 次方 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