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

yzlAccount 2015-06-04 01:33:59
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是怎么来的!不懂,极度疑惑
...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mewiteor 2015-06-04
  • 打赏
  • 举报
回复
引用 4 楼 yzlAccount 的回复:
[quote=引用 1 楼 mewiteor 的回复:]
leal    (%eax,%eax),%edx
val<<1==val+val
这个leal不是加载有效地址吗?可以给我更详细的说说这个val<<1==val+val怎么来的吗?[/quote] lea取(%eax,%eax)的地址,也就是(%eax+%eax)的地址,也就是%eax+%eax
yzlAccount 2015-06-04
  • 打赏
  • 举报
回复
引用 1 楼 mewiteor 的回复:
leal    (%eax,%eax),%edx
val<<1==val+val
这个leal不是加载有效地址吗?可以给我更详细的说说这个val<<1==val+val怎么来的吗?
纵横车 2015-06-04
  • 打赏
  • 举报
回复
http://blog.csdn.net/swordmanwk/article/details/41169953 leal (%eax,%eax),%edx在这里表示(edx) = (eax)+(eax) 而若左移一位相当于乘以2.
yzlAccount 2015-06-04
  • 打赏
  • 举报
回复
这个leal指令不是加载有效地址吗?我原来猜话也是在这里,请您可以给我更详细的说下吗》谢谢
mewiteor 2015-06-04
  • 打赏
  • 举报
回复
leal    (%eax,%eax),%edx
val<<1==val+val

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧