MENU

leal运用实例

August 26, 2019 • 我爱学习

leal运用实例

1.示例1(leal用于计算)

  • 这里使用C语言和汇编代码对比

    int arith(int x,int y, int z){
      int t1 = x+y;
      int t2 = z+t1;
      int t3 = x+4;
      int t4 = y*48;
      int t5 = t3 + t4; 
      int rval = t2*t5;
      return rval;
    }
    #4(%esp)存储储存着参数x,8(%esp)存储储存着参数y,12(%esp)存储储存着参数z
    
      movl    4(%esp), %ecx           #ecx = x
      movl    8(%esp), %edx           #edx = y
      leal    (%ecx,%edx), %eax       # eax = x + y       (t1)
      leal    (%edx,%edx,2), %edx     # edx = 3*y
      sall    $4, %edx                # edx = edx << 4    (t4)
      addl    12(%esp), %eax          # eax = z + t1      (t2)
      leal    4(%ecx,%edx), %edx      # edx = x+4 + t4    (t5)
      imull    %edx, %eax             # eax = t5 + t2     (ravl)

    2.实例2

    int logical(int x,int y){
      int t1 = x^y;
      int t2 = t1 >> 17;
      int mask = (1<<13) - 7;
      int rval = t2 & mask;
      return rval;
    }
      movl    8(%esp), %eax   # 将Y的值赋值给eax
      xorl    4(%esp), %eax   # x与Y进行异或运算,结果赋值给eax
      sarl    $17, %eax       # 给t1进行17位的算数右移,结果赋值给eax
     andl    $8185, %eax     # 8185是1左移13位减去7的结果,在编译之前就计算得出的
Last Modified: September 8, 2021