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: October 3, 2019
Archives QR Code
QR Code for this page
Tipping QR Code