当前位置: 代码迷 >> 汇编语言 >> 深入理解计算机系统习题3.23疑惑,求大神解答,极度疑惑中
  详细解决方案

深入理解计算机系统习题3.23疑惑,求大神解答,极度疑惑中

热度:89   发布时间:2016-05-02 04:26:22.0
深入理解计算机系统练习题3.23疑惑,求大神解答,极度疑惑中
int fun_b(unsigned x){
     int val=0;
     int i;
    for(i=0;x<32;i++){
         val=(val<<1) | (x & 0x1);
         x>>=1;
    }
    return val;
}

movl  8(%ebp),%ebx
mov   $0,%eax
mov   $0,%ecx
.L13:
    leal    (%eax,%eax),%edx
    movl  (%ebx,%eax)
    andl   $1,%eax
    orl      %edx,%eax
    shrl    %ebx
    addl   $1,%ecx
    cmpl  $32,%ecx
    jne      .L13

求教大神能跟我解释下这个val<<1是怎么来的!不懂,极度疑惑
------解决思路----------------------
leal    (%eax,%eax),%edx

val<<1==val+val
------解决思路----------------------
http://blog.csdn.net/swordmanwk/article/details/41169953
 leal    (%eax,%eax),%edx在这里表示(edx) = (eax)+(eax)
而若左移一位相当于乘以2.
  相关解决方案