编译器的优化

编译器使用的优化技巧

   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、堆栈恢复优化

原文地址:https://www.cnblogs.com/xiangtingshen/p/11212807.html